8. 4. 2022

5 0

Establecer Stop Loss si la orden OpenPrice está por encima o por debajo de un precio límite Excepto Uno

Establece Stop Loss a un nivel especificado si la orden openPrice está por encima (para posición larga) o por debajo (para posición corta) de un precio Límite.

Si tiene varias posiciones abiertas, evitará establecer stop loss en las posiciones perdedoras. Esto podría cerrar inmediatamente la posición

Al abrir varias órdenes de mercado, es posible que tengamos que cerrar todas las órdenes excepto una posición ("Número mágico excluido")


Este es 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="(SIO) Establece Stop Loss si es posible excepto uno", display="Establece Stop Loss si es posible excepto uno", returnType = ReturnTypes.Action)
@Help("Establece Stop Loss a un nivel especificado si la orden openPrice está por encima (para posición larga) o por debajo (para posición corta) de un precio Límite excepto para una orden : 'Magic Number Excluded'. Si SL ya existe se moverá.")
@SortOrder(500) // 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 tenga que ajustarla dependiendo de la función ya instalada en el mismo dropbox.
@CategoryOrder(200)
@IgnorarEnConstructor
@NotSupportedFor(motores="EL")
public class SetStopLossIfPossibleExceptOne 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")
    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="Precio Límite")
    @Help("Límite de precio de la orden, sólo se seleccionará la Orden Larga con Precio Abierto más alto o sólo se seleccionará la Orden Corta con Precio Abierto más bajo")
    @Editor(type=Editors.Formula, formulaName="Nivel de Rango")
    public IFormula LímitePrecio;

    @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= PriceLimit.evaluateFormula(Strategy, Symbol, openPrice, Direction))
                    {
                        double sl = StopLoss.evaluateFormula(Strategy, Symbol, openPrice, Direction);
                        order.setSL(sl).Send();
                    }
                    if (Direction != -1 && openPrice <= PriceLimit.evaluateFormula(Strategy, Symbol, openPrice, Direction))
                    {
                        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