Estrategia de backtester del canal SSL con ATR y gestión de dinero

El autor:¿ Qué pasa?, Fecha: 2023-11-23 10:26:58
Las etiquetas:

img

Resumen general

Esta es una estrategia de backtesting basada en el indicador del canal SSL, integrada con funciones como ATR stop loss, ATR take profit y gestión de dinero para facilitar una prueba más completa de la estrategia del canal SSL.

Estrategia lógica

Indicador de canal SSL

El indicador de canal SSL consiste en la línea media del canal y las bandas del canal. La línea media del canal contiene una pista superior y una pista inferior, que generalmente son promedios móviles simples de precios altos y bajos durante un período de retroceso. Las bandas del canal se forman entre las pistas superior e inferior.

Cuando el precio se acerca a la banda superior, indica condiciones de sobrecompra; cuando el precio se acerca a la banda inferior, señala condiciones de sobreventa.

El parámetro del canal SSL está configurado enssl_period=16en esta estrategia.

En el caso de las entidades de crédito, el importe de las pérdidas se calculará de acuerdo con el método de cálculo de las pérdidas y ganancias.

El rango medio verdadero (ATR) mide la volatilidad del mercado y se puede utilizar para determinar los niveles de stop loss y take profit.

Esta estrategia utiliza un ATR de 14 períodos (atr_period=14) y multiplicadores dinámicosatr_stop_factor=1.5yatr_target_factor=1.0establecer un stop loss adaptativo y obtener ganancias basadas en la volatilidad.

También comprueba si el instrumento tiene una precisión de 2 decimales (two_digit) para ajustar el stop y el target en consecuencia para pares como el oro y el JPY.

Gestión del dinero

La gestión del dinero se logra medianteposition_size(dimensión en posición fija) yrisk(porcentaje de riesgo por operación).use_mm=true.

El objetivo es determinar el tamaño óptimo de la posición para cada operación. Utilizando el riesgo fijo % por operación, el tamaño permitido de la posición se calculará dinámicamente sobre la base del patrimonio de la cuenta para limitar la pérdida en cada operación.

Análisis de ventajas

  • El canal SSL es eficaz en la captura de señales de inversión de tendencia
  • Las paradas basadas en ATR se ajustan automáticamente según la volatilidad
  • La gestión del dinero ayuda a controlar el riesgo en todos los oficios

Análisis de riesgos

  • Las señales del canal SSL pueden no ser completamente confiables, pueden ocurrir señales falsas
  • Las paradas ATR pueden terminar siendo demasiado anchas o demasiado estrechas
  • Las configuraciones incorrectas de gestión de fondos pueden llevar a posiciones de gran tamaño o baja eficiencia

Estos riesgos pueden mitigarse mediante:

  1. Añadir filtros para confirmar señales y evitar entradas falsas
  2. Ajuste del parámetro del período ATR para obtener niveles óptimos de stop loss/take profit
  3. Prueba de diferentes parámetros de gestión de dinero para el tamaño de posición ideal

Direcciones de optimización

La estrategia puede mejorarse en los siguientes aspectos:

  1. Optimice los parámetros del canal SSL para obtener el mejor rendimiento
  2. Mejorar o sustituir el mecanismo de detención ATR
  3. Añadir indicadores de filtrado para evitar operaciones innecesarias
  4. Incorporar el tamaño de las posiciones para maximizar los rendimientos ajustados al riesgo
  5. Parámetros de afinación para diferentes instrumentos
  6. Añadir herramientas cuantitativas para pruebas más completas

Con la optimización sistemática, esta estrategia puede convertirse en un sistema robusto de comercio algorítmico.

Conclusión

Esta estrategia combina el canal SSL para la tendencia, ATR para el control de riesgos y la gestión de dinero para el tamaño de la posición. La backtesting integral facilita la evaluación y mejora de la estrategia en un sistema de negociación automatizado. También hay espacio para mejoras como agregar filtros, optimizar parámetros y expandir la funcionalidad. En general, esto forma una base sólida para construir estrategias de negociación algorítmicas.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © comiclysm

//@version=4
strategy("SSL Backtester", overlay=false)

//--This strategy will simply test the effectiveness of the SSL using
//--money management and an ATR-derived stop loss

//--USER INPUTS

two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)")
ssl_period = input(16, "SSL Period")
atr_period = input(14, "ATR Period")
atr_stop_factor = input(1.5, "ATR Stop Loss Factor")
atr_target_factor = input(1.0, "ATR Target Factor")
use_mm = input(true, "Check this to use Money Management")
position_size = input(1000, "Position size (for Fixed Risk)")
risk = input(0.01, "Risk % in Decimal Form")

//--INDICATORS------------------------------------------------------------

    //--SSL
    
sma_high = sma(high, ssl_period)
sma_low = sma(low, ssl_period)
ssl_value = 0
ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1]
ssl_low = ssl_value < 0 ? sma_high : sma_low
ssl_high = ssl_value < 0 ? sma_low : sma_high

    //--Average True Range
    
atr = atr(atr_period)

//--TRADE LOGIC----------------------------------------------------------

signal_long = ssl_value > 0 and ssl_value[1] < 0
signal_short = ssl_value < 0 and ssl_value[1] > 0

//--RISK MANAGMENT-------------------------------------------------------
strategy.initial_capital = 50000
balance = strategy.netprofit + strategy.initial_capital
risk_pips = atr*10000*atr_stop_factor
if(two_digit)
    risk_pips := risk_pips / 100
risk_in_value = balance * risk
point_value = syminfo.pointvalue
risk_lots = risk_in_value / point_value / risk_pips
final_risk = use_mm ? risk_lots * 10000 : position_size

//--TRADE EXECUTION-----------------------------------------------------

if (signal_long)
    stop_loss = close - atr * atr_stop_factor
    target = close + atr * atr_target_factor
    strategy.entry("Long", strategy.long, final_risk)
    strategy.exit("X", "Long", stop=stop_loss, limit=target)
if (signal_short)
    stop_loss = close + atr * atr_stop_factor
    target = close - atr * atr_target_factor
    strategy.entry("Short", strategy.short, final_risk)
    strategy.exit("X", "Short", stop=stop_loss, limit=target)
    
//--PLOTTING-----------------------------------------------------------

plot(ssl_low, "SSL", color.red, linewidth=1)
plot(ssl_high, "SSL", color.lime, linewidth=1)


Más.