Fijar Stop Loss Excepto Uno
Al abrir varias órdenes de mercado, es posible que tengamos que cerrar todas las órdenes excepto una posición ("Número mágico excluido")
Por ejemplo, hay 5 posiciones largas abiertas, queremos cerrarlas todas excepto una posición larga ("Número Mágico Excluido")
Aquí está el código :
paquete SQ.Bloques.Orden.Modificar; import SQ.Functions.OrderFunctions; importar SQ.Internal.ActionBlock; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; // Modificado en Francia por Emmanuel Evrard para la Comunidad StrategyQuantX :) @BuildingBlock(name="(SLO) Establecer Stop Loss Excepto Uno", display="Establecer Stop Loss Excepto Uno", returnType = ReturnTypes.Action) @Help("Establece Stop Loss a un nivel especificado excepto para una orden : 'Magic Number Excluded' . Si el SL ya existe será movido.") @SortOrder(300) // En AlgoWizard, esta es una posición de dropbox (400 o 500 o 600 etc.) de esta función en el menú de "Añadir Nueva Condición", puede que tengas que ajustarla dependiendo de la función ya instalada en el mismo dropbox. @CategoryOrder(200) @IgnorarEnConstructor @NotSupportedFor(motores="EL") public class SetStopLossExceptOne extends ActionBlock { @Parameter(defaultValue="Actual", category="Identificación del pedido", showIfDefault=false, allowAny=true) public String Símbolo; @Parameter(defaultValue="0", category="Identificación del pedido", showIfDefault=false) @Editor(type=Editors.Selection, values="Largo=1,Corto=-1,Cualquiera=0") public int Dirección; @Parameter(defaultValue="Número mágico", category="Identificación del pedido", showIfDefault=false) @Help("Número mágico que puede identificar el pedido.") @Editor(type=Editors.SelectionVariablesWithAny) public int NúmeroMágico; @Parameter(defaultValue="", category="Identificación del pedido", showIfDefault=false) @Help("Comentario también se puede utilizar para identificar el pedido. En el caso de Comment, el pedido coincide si los comentarios del pedido contienen el texto especificado aquí.") public String Comentario; @Parameter(defaultValue="MagicNumber", category="Identificación del pedido", showIfDefault=false) @Help("Número mágico del pedido excluido, este pedido no se tendrá en cuenta") @Editor(type=Editors.SelectionVariables) public int NúmeroMágicoExcluidos; @Parámetro(categoría="Stop Loss") @Editor(type=Editors.Formula, formulaName="Nivel de rango") public IFórmula StopLoss; //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ @Override public void OnAction() lanza 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(orden, Estrategia, Símbolo, Dirección, NúmeroMágico, Comentario)) { if (order.getMagicNumber() != MagicNumberExcluded) { double sl = StopLoss.evaluateFormula(Strategy, Symbol, openPrice, Direction); order.setSL(sl).Send(); } } } } }