
La estrategia utiliza el pensamiento del trailing stop dinámico para calcular la línea de pérdidas de la posición corta y larga en función del ATR y el valor máximo del precio. Combinando la idea de Chandelier Exit, en función de la dirección de la línea de pérdidas para juzgar la dirección de la posición corta y larga. Cuando la línea de pérdidas se rompa hacia arriba, juzgarlo como pesado, hacer más; cuando la línea de pérdidas se rompa hacia abajo, juzgarlo como bajista, hacer nada.
La estrategia tiene la doble función de juzgar el stop loss y la señal de entrada.
La estrategia se compone principalmente de las siguientes partes:
Calcula el ATR en tiempo real, basado en la longitud y el múltiplo de los períodos ATR establecidos por el usuario. Luego calcula la línea de pérdida de posición larga y corta basándose en el ATR y el valor máximo del precio:
longStop = 最高价 - ATR
shortStop = 最低价 + ATR
Compara la línea de pérdidas de la línea K anterior con la línea de pérdidas de la línea K actual. Si la línea de pérdidas de la línea K actual se rompe, se emite una señal de negociación:
长仓止损线上方突破,做多
短仓止损线下方突破,做空
El ATR calcula el Stop Loss Distance y el Stop Stop Distance en función de la relación entre el riesgo y el retorno del riesgo (riskRewardRatio) que establece el usuario. También se puede establecer un stop loss y un stop loss al abrir una posición.
La estrategia tiene las siguientes ventajas:
La estrategia utiliza un seguimiento dinámico de las líneas de parada para detener los pérdidas a tiempo y controlar el riesgo de caída.
La línea de parada de la estrategia simplifica la lógica de la estrategia al mismo tiempo que sirve como criterio de entrada.
La búsqueda adecuada de una mayor rentabilidad de acuerdo con la relación de riesgo-beneficio establecida.
La estructura de la estrategia es simple, fácil de entender y de optimizar para la expansión.
La estrategia también tiene sus riesgos:
La estrategia es una estrategia de negociación bilateral, con el riesgo de hacer más y de hacer menos.
La configuración de los parámetros ATR afecta directamente a la línea de stop loss y a la frecuencia de las transacciones, y una configuración incorrecta puede causar que el stop loss sea demasiado flexible o que la frecuencia de las transacciones sea demasiado alta.
Esta estrategia es más adecuada para situaciones de brechas después de la corrección de la línea media, no para escenarios de tendencia demasiado fuerte.
Para los riesgos mencionados, se puede optimizar en los siguientes aspectos:
Combinación de indicadores de tendencia como la MA para determinar la tendencia del mercado y evitar el comercio en contra.
Optimización de los parámetros ATR y de la relación entre el riesgo y el rendimiento para que el stop loss y el stop stop sean más razonables.
Aumentar las condiciones de filtración de los indicadores de volumen o volatilidad para garantizar la calidad de las operaciones.
La estrategia tiene espacio para ser optimizada aún más:
Utiliza modelos de aprendizaje automático para predecir tendencias de precios y mejorar la precisión de entrada.
Utiliza la volatilidad de los precios de las variedades de cobertura de opciones para construir una cartera de arbitraje sin riesgo.
Arbitraje estadístico entre los diferentes mercados y variedades para obtener un Alfa estable.
Eficiencia en la retroalimentación de estrategias y en el comercio en vivo a través de un motor de negociación algorítmico.
Este artículo analiza en profundidad una estrategia de comercio cuantitativa basada en el seguimiento dinámico de los estancamientos. Esta estrategia tiene al mismo tiempo la función de gestión de los estancamientos y de la determinación de las señales de negociación, lo que permite controlar el riesgo de manera efectiva. También analizamos las ventajas de la estrategia, los posibles riesgos y las ideas de optimización posteriores.
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)
// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', defval=true)
atr = mult * ta.atr(length)
longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir
// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)
// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr
// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1
// Entry Signals
if (longCondition)
strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)
longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)
midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)
fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')
// Alerts
if (dir != dir[1])
strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")