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