8. 4. 2022

5 0

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

 


 

Suscríbase a
Notificar a
0 Comentarios
Feedbacks de Inline
Ver todos los comentarios

Puestos relacionados