Documentación
Aplicaciones
Última actualización el 21. 12. 2021 por clonex / Ivan Hudec
ATR Volatilidad Dimensionamiento simple
Contenido de la página
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>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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡Excelente !!!!!!!!!!!!!!
Esto es exactamente lo que necesito. Gracias clonex
Hola COMO PUEDO COMPILAR ESTE ARCHIVO EN EL EDITOR DE CODIGO MUCHAS GRACIAS POR SU ATENCION
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?
No puedo hacer que funcione con build 138
Para la compilación 138 , tenemos que actualizar la línea :
@Override
público doble computeTradeSize(EstrategiaBase, Símbolo de cadena, byte orderType, doble precio, doble sl, doble tickSize, doble pointValue, doble tamañoPaso) lanza Excepción {
Genial, pero sería estupendo si pudiera funcionar con estrategias de selección de valores
Hola, he tenido problemas al compilar mi código. ¿Alguna recomendación? Estoy trabajando con la versión 142. package SQ_MoneyManagement; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; import java.util.List; import java.util.Calendar; import java.util.TimeZone; @ClassConfig(name=”GestionRRVariable”, display=”RRVariable Diario: #Lotes# lotes”) @trdtrd(“Gestión de riesgo: 0.5% base → x1.5 tras ganancia, reset tras pérdida; pausa si -4%/ +8% diario.”) public class GestionRRVariable extends MoneyManagementMethod { @Parameter(name=”Lotes”, defaultValue=”0.1″, minValue=0.01, maxValue=100, step=0.1) @trdtrd(“Número de lotes fijo (solo por compatibilidad con SQX).”) public double Lots; // Parámetros private final double baseRiskPct = 0.5; private final double multiplier = 1.5; private final double maxDailyLossPct = 4.0; private final double maxDailyGainPct = 8.0; private... Leer más "