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