8. 4. 2022

5 0

Impostare lo stop loss se l'ordine OpenPrice è superiore o inferiore a un prezzo limite Eccetto uno

Imposta lo Stop Loss a un livello specificato se l'ordine openPrice è superiore (per una posizione lunga) o inferiore (per una posizione corta) a un prezzo Limite.

Se si hanno più posizioni aperte, si eviterà di impostare lo stop loss sulle posizioni perdenti. In questo modo si potrebbe chiudere immediatamente la posizione

Quando si aprono diversi ordini a mercato, è possibile che si debbano chiudere tutti gli ordini tranne una posizione ("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="(SIO) Set Stop Loss if Possible Except One", display="Imposta Stop Loss se possibile tranne uno", returnType = ReturnTypes.Action)
@Help("Imposta lo Stop Loss a un livello specificato se l'ordine openPrice è al di sopra (per una posizione long) o al di sotto (per una posizione short) di un prezzo Limite, tranne che per un ordine: 'Magic Number Excluded'. Se lo SL esiste già, verrà spostato").
@SortOrder(500) // In AlgoWizard, questa è una posizione di dropbox (400 o 500 o 600 ecc.) di questa funzione nel menu di "Aggiungi nuova condizione"; è possibile che dobbiate adattarla a seconda della funzione già installata sullo stesso dropbox.
@CategoriaOrdine(200)
@IgnoreInBuilder
@NotSupportedFor(motori="EL")
public class SetStopLossIfPossibleExceptOne 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")
    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="Limite di prezzo")
    @Help("Limite di prezzo dell'ordine, verrà selezionato solo l'ordine lungo con prezzo aperto più alto o solo l'ordine corto con prezzo aperto più basso")
    @Editor(type=Editors.Formula, formulaName="RangeLevel")
    public IFormula PriceLimit;

    @Parametro(categoria="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(Strategy, Symbol, openPrice, Direction);
                        order.setSL(sl).Send();
                    }
                    se (Direction != -1 && openPrice <= PriceLimit.evaluateFormula(Strategy, Symbol, openPrice, Direction))
                    {
                        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