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

Vorrei impostare il mio stop loss 0,5 punti al di sotto della barra 0, credo sia molto semplice ma non ci riesco.
Salve, la funzione di sottrazione in AlgoWizard. Il risultato sarà Open[0] o Close[0] - (meno) 0,5