8. 4. 2022

5 0

Stop-Loss setzen außer einer

Wenn wir mehrere Marktaufträge eröffnen, müssen wir möglicherweise alle Aufträge bis auf eine Position schließen ("Magic Number Excluded").

Beispiel: 5 Long-Positionen sind offen, wir wollen alle bis auf eine Long-Position schließen ("Magic Number Excluded")

Hier ist der Code:

 

Paket SQ.Blocks.Order.Modify;

import SQ.Functions.OrderFunctions;
importieren SQ.Internal.ActionBlock;

import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

// Modifiziert in Frankreich von Emmanuel Evrard für die StrategyQuantX Community :)
@BuildingBlock(name="(SLO) Stop Loss außer einem setzen", display="Stop Loss außer einem setzen", returnType = ReturnTypes.Action)
@Help("Setzt den Stop Loss auf ein bestimmtes Niveau, außer für eine Order: 'Magic Number Excluded' . Wenn SL bereits existiert, wird er verschoben.")
@SortOrder(300) // In AlgoWizard ist dies eine Dropbox-Position (400 oder 500 oder 600 usw.) dieser Funktion im Menü "Neue Bedingung hinzufügen", Sie müssen sie eventuell anpassen, je nachdem, welche Funktion bereits auf derselben Dropbox installiert ist.
@CategoryOrder(200)
@IgnoreInBuilder
@NotSupportedFor(engines="EL")
public class SetStopLossExceptOne extends ActionBlock {
    
    @Parameter(defaultValue="Current", category="Order identification", showIfDefault=false, allowAny=true)
    public String Symbol;
    
    @Parameter(defaultValue="0", category="Auftragskennung", showIfDefault=false)
    @Editor(type=Editors.Selection, values="Long=1,Short=-1,Any=0")
    public int Direction;

    @Parameter(defaultValue="MagicNumber", category="Auftragskennung", showIfDefault=false)
    @Help("Magische Zahl, mit der die Bestellung identifiziert werden kann.")
    @Editor(type=Editors.SelectionVariablesWithAny)
    public int MagicNumber;

    @Parameter(defaultValue="", category="Auftragskennung", showIfDefault=false)
    @Help("Comment kann auch zur Identifizierung der Bestellung verwendet werden. Im Falle von Comment passt die Bestellung, wenn der Bestellkommentar den hier angegebenen Text enthält.")
    public String Comment;

    @Parameter(defaultValue="MagicNumber", category="Auftragskennung", showIfDefault=false)
    @Help("MagicNumber der ausgeschlossenen Bestellung, diese Bestellung wird nicht berücksichtigt")
    @Editor(type=Editors.SelectionVariables)
    public int MagicNumberExcluded;
    
    @Parameter(category="Stop Loss")
    @Editor(type=Editors.Formula, formulaName="RangeLevel")
    public IFormula StopLoss;
    
    
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------

    @Override
    public void OnAction() throws TradingException
    {
        for(int i=0; i<Strategy.Trader.getOpenOrdersCount(false); i++)
        {
            ILiveOrder order = Strategy.Trader.getOpenOrder(i, false);

            double openPrice = order.isNettingMode() ? order.getLastOpenPrice() : order.getOpenPrice();
            
            if(OrderFunctions.identify(order, Strategy, Symbol, Direction, MagicNumber, Comment))
            {
                if (order.getMagicNumber() != MagicNumberExcluded)
                {
                    double sl = StopLoss.evaluateFormula(Strategy, Symbol, openPrice, Direction);
                    order.setSL(sl).Send();
                }
            }
        }
    }
}

 


 

Abonnieren
Benachrichtigen Sie mich bei
0 Kommentare
Inline-Rückmeldungen
Alle Kommentare anzeigen

Verwandte Beiträge