8. 4. 2022

5 0

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

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

 

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="(SLI) Set Stop Loss if Possible", display="Imposta Stop Loss se possibile", 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. Se lo SL esiste già, verrà spostato.")
@SortOrder(400) // In AlgoWizard, questa è una posizione di dropbox (400 o 500 o 600 ecc.) di questa funzione nel menu di "Add New Condition", potrebbe essere necessario adattarla a seconda della funzione già installata sullo stesso dropbox.
@CategoriaOrdine(200)
@IgnoreInBuilder
@NotSupportedFor(motori="EL")
public class SetStopLossIfPossible 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(categoria="Prezzo Min/Max")
    @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