Estrategia dinámica de suspensión de pérdidas adaptada a las fluctuaciones del ATR

El autor:¿ Qué pasa?, Fecha: 2023-10-09 15:30:29
Las etiquetas:

Resumen general

Esta estrategia combina el valor del indicador de impulso Stochastic K y el indicador de volatilidad ATR para ajustar dinámicamente la línea de stop loss y la línea de entrada en función de los valores ATR, realizando la idea de ajustar automáticamente las líneas de stop loss y de entrada de acuerdo con la volatilidad del mercado.

Estrategia lógica

  1. Calcular el valor de K sma ((stoch ((cercano, alto, bajo, len), suaveK) con longitud len, que representa el valor de K estocástico.

  2. Calcular el valor ATR atr ((len) con longitud len.

  3. Grafico gráfico de la línea de stop loss ((rsi(atr, len) +lowLine,..., título = línea baja) y gráfico gráfico de la línea de entrada ((rsi(atr, len) *-1+100-lowLine,..., título = línea alta) basado en el valor ATR.

  4. Determinar las señales de entrada y salida cuando el valor K cruza la línea de entrada (k, línea ascendente) y la línea de stop loss (k, línea baja).

  5. Trazar colores de fondo para señales de compra y venta.

  6. Ejecutar operaciones y establecer un stop loss cuando se activen las señales anteriores.

Análisis de ventajas

  1. La estrategia ajusta dinámicamente las líneas de stop loss y de entrada en función de la volatilidad del mercado ATR, que adapta automáticamente el riesgo de stop loss en función de la volatilidad del mercado.

  2. Cuando la volatilidad del mercado es alta, la distancia entre las líneas de stop loss y las líneas de entrada aumenta para evitar que las fluctuaciones las detengan.

  3. Cuando la volatilidad del mercado es baja, la distancia entre las líneas de stop loss y las líneas de entrada se reduce para lograr un stop loss oportuno.

  4. Utilizando los valores K del indicador de impulso para determinar entradas y salidas.

  5. La combinación de indicadores de impulso y volatilidad puede capturar tendencias y ajustar automáticamente los riesgos en función de las fluctuaciones.

Análisis de riesgos

  1. Los valores de K pueden tener falsas rupturas, causando señales comerciales innecesarias.

  2. Si el parámetro ATR len es demasiado grande, la distancia entre las líneas de stop loss y entrada se vuelve demasiado grande con alto riesgo.

  3. La pérdida de parada de seguimiento pura no puede determinar si la posición de pérdida de parada es apropiada y no puede controlar el riesgo de pérdida de parada única. Puede considerar la pérdida de parada esperada para controlar el riesgo de pérdida de parada única.

  4. Las señales de estrategia frecuentes conducen a altos costos de negociación. Puede ajustar el parámetro de línea de entrada lowLine para controlar la frecuencia de negociación.

Direcciones de optimización

  1. Prueba y ajusta el parámetro smoothK para encontrar las combinaciones óptimas de parámetros de valor smoothK.

  2. Se ensayarán diferentes valores del parámetro ATR len para determinar los parámetros ATR adecuados.

  3. Optimizar el parámetro de línea de entrada lowLine para encontrar parámetros óptimos para controlar la frecuencia de negociación.

  4. Considerar la posibilidad de combinar otros indicadores para filtrar las señales de entrada y evitar falsos breakouts, como los indicadores de volumen de operaciones, los indicadores de KDJ, etc.

  5. Considere la posibilidad de optimizar los métodos de stop loss, mejorando la espera de stop loss para controlar activamente el riesgo de stop loss.

Resumen de las actividades

La estrategia realiza la idea de ajustar dinámicamente las líneas de stop loss y entrada basadas en los valores del indicador de impulso K y el indicador de volatilidad ATR. Puede capturar tendencias y ajustar automáticamente los riesgos basados en las fluctuaciones, lo que es muy innovador y práctico.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

len = input(34, minval=1, title="Length for Main Stochastic & ATR") 
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")

//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")

//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")

aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0

//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)

bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")

bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")

bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")

//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1

strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)





Más.