8. 4. 2022

5 0

Impostare lo stop loss tranne uno

Quando si aprono diversi ordini a mercato, è possibile che si debbano chiudere tutti gli ordini tranne una posizione ("Magic Number Excluded").

Ad esempio, sono aperte 5 posizioni long, e vogliamo chiuderle tutte tranne una ("Magic Number Excluded").

Ecco il codice :

 

pacchetto SQ.Blocks.Order.Modify;

importare SQ.Functions.OrderFunctions;
importare SQ.Internal.ActionBlock;

importare com.strategyquant.lib.*;
importare com.strategyquant.datalib.*;
importare com.strategyquant.tradinglib.*;

// Modificato in Francia da Emmanuel Evrard per la comunità StrategyQuantX :)
@BuildingBlock(name="(SLO) Set Stop Loss Except One", display="Imposta Stop Loss Except One", returnType = ReturnTypes.Action)
@Help("Imposta lo Stop Loss a un livello specificato, tranne che per un ordine: 'Magic Number Excluded'. Se lo SL esiste già, verrà spostato.")
@SortOrder(300) // In AlgoWizard, questa è una posizione di dropbox (400 o 500 o 600 ecc.) di questa funzione nel menu di "Aggiungi nuova condizione"; potrebbe essere necessario adattarla a seconda della funzione già installata nello stesso dropbox.
@CategoriaOrdine(200)
@IgnoreInBuilder
@NotSupportedFor(motori="EL")
public class SetStopLossExceptOne extends ActionBlock {
    
    @Parameter(defaultValue="Current", category="Order identification", showIfDefault=false, allowAny=true)
    public String Symbol;
    
    @Parameter(defaultValue="0", category="Identificazione ordine", showIfDefault=false)
    @Editor(type=Editors.Selection, values="Long=1,Short=-1,Any=0")
    public int Direzione;

    @Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false)
    @Help("Numero magico che può identificare l'ordine.")
    @Editor(type=Editors.SelectionVariablesWithAny)
    public int MagicNumber;

    @Parametro(defaultValue="", category="Identificazione ordine", showIfDefault=false)
    @Help("Il commento può essere utilizzato anche per identificare l'ordine. In caso di Commento, l'ordine corrisponde se i commenti dell'ordine contengono il testo qui specificato.")
    public String Comment;

    @Parametro(defaultValue="MagicNumber", category="Identificazione ordine", showIfDefault=false)
    @Help("Numero magico dell'ordine escluso, questo ordine non sarà preso in considerazione")
    @Editor(type=Editors.SelectionVariables)
    public int MagicNumberExcluded;
    
    @Parametro(categoria="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();
                }
            }
        }
    }
}

 


 

Abbonarsi
Notificami
0 Commenti
Feedback in linea
Visualizza tutti i commenti

Messaggi correlati