Documentación

Aplicaciones

Última actualización el 21. 12. 2021 por clonex / Ivan Hudec

ATR Volatilidad Dimensionamiento simple

En situaciones en las que la volatilidad a corto plazo está subiendo o bajando, puede tener sentido cambiar el tamaño de la posición. En el siguiente tutorial le mostraremos un sencillo snippet en StrategyQuant X x que le permite aumentar/disminuir el tamaño de una operación. Snippet que puede descargar aquí.

Paso 1 - Crear un nuevo fragmento de gestión monetaria

Abrir Editor de códigohaga clic en Crear nuevo y elija Gestión del dinero  en la parte inferior. Ponle un nombre ATRVolatilidadTamaño.

Esto creará un nuevo fragmento ATRVolatilidadTamaño.java en carpeta Usuario/Snippets/SQ/Gestión del dinero

 

 

Paso 2 - Definir parámetros

En este punto, definimos los parámetros que utilizaremos más adelante cuando implementemos el snippet. En este caso, definiremos lo siguiente

  • Tamaño: valor por defecto para el tamaño de la operación.
  • Multiplicador - Multiplicador que utilizaremos para cambiar el tamaño de la operación.
  • FastATR- Periodo ATR rápido
  • SlowATR- Periodo ATR lento

 

@ClassConfig(name="Tamaño de volatilidad ATR", display="Tamaño de volatilidad ATR: lotes #Size# con multiplicación #Multiplier#")
@Ayuda("<b>Dimensionamiento de la volatilidad ATR</b>")
@Description("Tamaño de la volatilidad ATR, #Size# y #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Tamaño de orden", maxValue=1000000d, step=0.1d, category="Por defecto")
    @Help("Tamaño de la orden (número de lotes para forex)")
    public double Tamaño;

    @Parámetro(defaultValue="0.1", minValue=0.01d, name="Multiplicador", maxValue=1000, step=0.1d, category="Por defecto")
    @Ayuda("Multiplicador")
    public double Multiplicador;

    @Parameter(defaultValue="5", minValue=2, name="Periodo ATR rápido", maxValue=480, step=1, category="Por defecto")
    @Help("Periodo ATR rápido")
    public int Periodo FastATR;

    @Parameter(defaultValue="20", minValue=2, name="Periodo ATR lento", maxValue=480, step=1, category="Por defecto")
    @Help("Periodo ATR lento")
    public int Periodo ATR lento;

 

 

Paso 3 - Implementación del método doble computeTradeSize

En este método se especifica el tamaño del lote. Vale la pena mencionar los parámetros del método.

  • StrategyBase strategy es la clase base para la estrategia, a partir de ella hay clases derivadas que implementan funciones adicionales
    Cadena símbolo - el símbolo con el que se ordenó la estrategia
  • byte orderType
  • precio doble - precio de apertura de la operación
  • doble sl - stop loss
  • double tickSize tamaño del tick
  • double pointValue - valor del punto.

Con este método podemos realizar cálculos más sencillos, pero también más complejos. En nuestro caso, fijamos el precio de cierre anterior y dos valores diferentes de ATR. Si el ATR a corto plazo es superior al ATR a largo plazo, cambiamos el tamaño de la posición.

 

@Override
public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
    
    double tradeSize;
    // obtener cierre anterior
    double prevClose = strategy.MarketData.Chart(symbol).Close(1);
    // obtener ATR redondeado con periodo más lento
    double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATR, 1), 5);
    // obtener ATR redondeado con periodo más rápido
    double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATR, 1), 5);
    // si la volatilidad a corto sube, modifica el tamaño de la operación
    if(fastValueATR>slowValueATR){
        tradeSize = Tamaño*Multiplicador;

    }
    // si no, no haga nada
    else tradeSize = Tamaño;
    // devolver tamaño de operación
    devolver tradeSize;
    
}

Paso 4 - Uso del fragmento de tamaño de volatilidad ATR

Tras reiniciar SQX, encontrará el nuevo fragmento en la pestaña Gestión monetaria.

En el siguiente gráfico se puede ver la evolución de las operaciones.

 

 

 

Código comentado

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Todos los derechos reservados.
 *
 * Código en este archivo se hizo de buena fe que es correcto y hace lo que debe.
 * Si ha encontrado un error en este código O tiene una sugerencia de mejora O desea incluir
 * su propio fragmento de código en nuestra biblioteca estándar por favor póngase en contacto con nosotros en:
 * https://roadmap.strategyquant.com
 *
 * Este código sólo puede ser utilizado dentro de los productos StrategyQuant.
 * Cada propietario de una licencia válida (gratuita, de prueba o comercial) de cualquier producto StrategyQuant
 * se le permite utilizar libremente, copiar, modificar o hacer trabajos derivados de este código sin limitaciones,
 * para ser utilizado en todos los productos StrategyQuant y compartir sus modificaciones o trabajos derivados
 * con la comunidad StrategyQuant.
 *
 * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA,
 * INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN DETERMINADO
 * PROPÓSITO Y NO INFRACCIÓN. EN NINGÚN CASO SERÁN LOS AUTORES RESPONSABLES DE CUALQUIER RECLAMACIÓN, DAÑO
 * U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SURJA DE,
 * O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS OPERACIONES CON EL SOFTWARE.
 *
 */
paquete SQ.MoneyManagement;

importar com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

@ClassConfig(name="Tamaño de volatilidad ATR", display="Tamaño de volatilidad ATR: lotes #Size# con multiplicación #Multiplier#")
@Ayuda("<b>Dimensionamiento de la volatilidad ATR</b>")
@Description("Tamaño de la volatilidad ATR, #Size# y #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Tamaño de orden", maxValue=1000000d, step=0.1d, category="Por defecto")
    @Help("Tamaño de la orden (número de lotes para forex)")
    public double Tamaño;

    @Parámetro(defaultValue="0.1", minValue=0.01d, name="Multiplicador", maxValue=1000, step=0.1d, category="Por defecto")
    @Ayuda("Multiplicador")
    public double Multiplicador;

    @Parameter(defaultValue="5", minValue=2, name="Periodo ATR rápido", maxValue=480, step=1, category="Por defecto")
    @Help("Periodo ATR rápido")
    public int Periodo ATR rápido;

    @Parameter(defaultValue="20", minValue=2, name="Periodo ATR lento", maxValue=480, step=1, category="Por defecto")
    @Help("Periodo ATR lento")
    public int Periodo ATR lento;



    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
        
        double tradeSize;
        // obtener cierre anterior
        double prevClose = strategy.MarketData.Chart(symbol).Close(1);
        // obtener ATR redondeado con periodo más lento
        double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATRPeriod, 1), 5);
        // obtener ATR redondeado con periodo más rápido
        double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATRPeriod, 1), 5);
        // si la volatilidad a corto sube, modifica el tamaño de la operación
        if(fastValueATR&gt;slowValueATR){
            tradeSize = Tamaño*Multiplicador;

        }
        // si no, tamaño igual a Tamaño por defecto
        else tradeSize = Tamaño;
        // devolver tamaño de operación
        return tradeSize;

 

¿Le ha resultado útil este artículo? El artículo era útil El artículo no era útil

Suscríbase a
Notificar a
6 Comentarios
Más antiguo
Más reciente Más votados
Feedbacks de Inline
Ver todos los comentarios
Emmanuel
6. 1. 2022 11:56 am

¡¡¡¡¡¡¡¡¡¡¡¡¡¡Excelente !!!!!!!!!!!!!!

binhsir
15. 1. 2022 2:05 pm

Esto es exactamente lo que necesito. Gracias clonex

Kaveh Karimi
1. 3. 2022 9:39 pm

Hola COMO PUEDO COMPILAR ESTE ARCHIVO EN EL EDITOR DE CODIGO MUCHAS GRACIAS POR SU ATENCION

Sr. Omi
3. 11. 2023 5:03 am

Gracias clonex / Ivan Hudec.

No sé por qué no puedo guardar mi estrategia con formato mq5. El error es "Uno o más bloques de la estrategia utiliza no está implementado en el código MQL", "Plantilla inclusión falló (para el valor del parámetro "MoneyManagement/ATRVolatilitySizing_variables.tpl").

¿Podría ayudarme a solucionarlo?

Last edited 6 months ago by Mr Omi
Emmanuel
13. 2. 2024 1:17 pm

I can not make it work with build 138

Emmanuel
13. 2. 2024 1:27 pm

For build 138 , we need to update the line :
@Override
    public doble computeTradeSize(StrategyBase strategy, String symbol, byte orderType, doble precio, doble sl, doble tickSize, doble pointValue, doble sizeStep) throws Exception {