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(); } } } } }