8. 4. 2022

5 0

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

 


 

Assine
Notificação de
0 Comentários
Feedbacks em linha
Ver todos os comentários

Postos relacionados