Stop Loss setzen, wenn OpenPrice Order über oder unter einem Limitpreis liegt
Setzt den Stop Loss auf ein bestimmtes Niveau, wenn der openPrice-Auftrag über (bei Long-Positionen) oder unter (bei Short-Positionen) einem Preislimit liegt.
Wenn Sie mehrere Positionen geöffnet haben, wird es vermieden, einen Stop-Loss für Verlustpositionen zu setzen. Dadurch könnte die Position sofort geschlossen werden
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="(SLI) Stop Loss setzen, wenn möglich", display="Stop Loss setzen, wenn möglich", returnType = ReturnTypes.Action) @Help("Setzt den Stop Loss auf ein bestimmtes Niveau, wenn die openPrice-Order über (für Long-Position) oder unter (für Short-Position) einem Preislimit liegt. Wenn SL bereits existiert, wird er verschoben.") @SortOrder(400) // 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 SetStopLossIfPossible 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") 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(category="Preis Min/Max") @Help("Preislimit der Order, nur Long Order mit höherem Eröffnungskurs wird ausgewählt oder nur Short Order mit niedrigerem Eröffnungskurs wird ausgewählt") @Editor(type=Editors.Formula, formulaName="RangeLevel") public IFormula PriceLimit; @Parameter(category="Stop Loss") @Editor(type=Editors.Formula, formulaName="RangeLevel") public IFormula StopLoss; //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ @Override public void OnAction() throws TradingException { for(int i=0; i= PriceLimit.evaluateFormula(Strategy, Symbol, openPrice, Direction)) { double sl = StopLoss.evaluateFormula(Strategie, Symbol, openPrice, Direction); order.setSL(sl).Send(); } if (Direction != -1 && openPrice <= PriceLimit.evaluateFormula(Strategy, Symbol, openPrice, Direction)) { double sl = StopLoss.evaluateFormula(Strategie, Symbol, openPrice, Direction); order.setSL(sl).Send(); } } } } }