8. 4. 2022

5 0

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

 

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

Verwandte Beiträge