Parar a perda, exceto um
Como abrimos várias ordens de mercado, podemos ter que fechar todas as ordens exceto uma posição ("Número Mágico Excluído")
Por exemplo, 5 posições longas estão abertas, queremos fechar todas elas exceto uma posição longa ("Número Mágico Excluído")
Aqui está o código :
pacote SQ.Blocos.Pedido.Modificar; importação SQ.Functions.OrderFunctions; Importar SQ.Internal.ActionBlock; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; // Modificado na França por Emmanuel Evrard para a StrategyQuantX Community :) @BuildingBlock(name="(SLO) Set Stop Loss Except One", display="Set Stop Loss Except One", returnType = ReturnTypes.Action) @Help("Define Stop Loss para um nível especificado exceto para uma ordem: 'Número Mágico Excluído' . Se o SL já existir, ele será movido"). @SortOrder(300) // Em AlgoWizard, esta é uma posição dropbox (400 ou 500 ou 600 etc.) desta função no menu "Add New Condition", você pode ter que ajustá-la dependendo da função já instalada na mesma dropbox. @CategoryOrder(200) @IgnoreInBuilder @NotSupportedFor(engines="EL") classe pública SetStopLossExceptOne estende ActionBlock { @Parameter(defaultValue="Current", category="Order identification", showIfDefault=false, allowAny=true) Símbolo de corda pública; @Parameter(defaultValue="0", category="Order identification", showIfDefault=false) @Editor(tipo=Editores.Seleção, valores="Long=1,Short=-1,Any=0") direção da int pública; @Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false) @Help("Número mágico que pode identificar o pedido") @Editor(type=Editors.SelectionVariablesWithAny) público int MagicNumber; @Parameter(defaultValue="", category="Order identification", showIfDefault=false) @Help("Comentário também pode ser usado para identificar o pedido. Em caso de Comentário, o pedido corresponde se o comentário do pedido contiver o texto especificado aqui"). Public String Comment; @Parameter(defaultValue="MagicNumber", category="Order identification", showIfDefault=false) @Help("MagicNumber of the Excluded order, this order will not be taken into account") @Editor(type=Editores.SelectionVariables) público int MagicNumberExcluído; @Parameter(category="Stop Loss") @Editor(type=Editors.Formula, formulaName="RangeLevel") IFormula StopLoss pública; //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ @Override vazio público OnAction() atira a 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(ordem, estratégia, símbolo, direção, MagicNumber, Comentário)) { se (order.getMagicNumber() != MagicNumberExcluído) { double sl = StopLoss.evaluationFormula(Estratégia, Símbolo, Preço Aberto, Direção); order.setSL(sl).Send(); } } } } }