8. 4. 2022

5 0

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

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

 

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="(SLI) Establece Stop Loss si es posible", display="Establece Stop Loss si es posible", 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. Si el SL ya existe será movido.")
@SortOrder(400) // En AlgoWizard, esta es una posición 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 SetStopLossIfPossible 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;

    @Parámetro(categoría="Precio Mín/Máx")
    @Help("Precio límite 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