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