8. 4. 2022

5 0

Stop Loss setzen, wenn OpenPrice Order über oder unter einem Limitpreis liegt, außer einer

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

Wenn wir mehrere Marktaufträge eröffnen, müssen wir möglicherweise alle Aufträge bis auf eine 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.*;
importieren com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;


// Modifiziert in Frankreich von Emmanuel Evrard für die StrategyQuantX Community :)
@BuildingBlock(name="(SIO) Setzt Stop Loss wenn möglich außer einem", display="Setzt Stop Loss wenn möglich außer einem", returnType = ReturnTypes.Action)
@Help("Setzt den Stop Loss auf ein bestimmtes Niveau, wenn der openPrice Auftrag über (für eine Long-Position) oder unter (für eine Short-Position) einem Preislimit liegt, mit Ausnahme eines Auftrags: 'Magic Number Excluded'. Wenn SL bereits existiert, wird er verschoben.")
@SortOrder(500) // 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 SetStopLossIfPossibleExceptOne 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(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="Preisgrenze")
    @Help("Preislimit der Order, nur Long Order mit höherem Open Price wird ausgewählt oder nur Short Order mit niedrigerem Open Price 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