Estrategia de suspensión de pérdidas de seguimiento de la media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-11-16 17:18:59
Las etiquetas:

img

Resumen general

Esta estrategia genera señales largas y cortas a través de promedios móviles duales e implementa el seguimiento de stop loss.

Estrategia lógica

Esta estrategia utiliza hl2 como el precio de origen y calcula ATR de un cierto período como el rango de stop loss. Las bandas superior e inferior se calculan en función de ATR multiplicado por un cierto factor. Cuando el precio se rompe por encima de la banda superior, se genera una señal de compra para ir largo. Cuando el precio se rompe por debajo de la banda inferior, se genera una señal de venta para ir corto.

Después de abrir posiciones, el stop loss se ajusta en tiempo real en función de los cambios en ATR para lograr el seguimiento del stop loss. Específicamente, después de ir largo, la banda inferior se eleva progresivamente en función del último mínimo para rastrear el stop loss.

De esta manera, esta estrategia hace pleno uso de las medias móviles capacidad de determinar la dirección de la tendencia, e incorpora también el mecanismo de seguimiento de stop loss basado en ATR para garantizar la dirección de la negociación y el control de riesgos.

Ventajas

La mayor ventaja de esta estrategia radica en el control de riesgos. Las estrategias de promedios móviles tradicionales solo consideran juicios direccionales y pueden hacer explotar fácilmente las cuentas. Al incorporar ATR para rastrear el stop loss, esta estrategia puede ajustar dinámicamente el stop loss basado en la volatilidad del mercado para controlar eficazmente los riesgos comerciales.

Además, esta estrategia combina el comercio bidireccional. En comparación con las estrategias unidireccionales, puede ajustar rápidamente las direcciones de la posición cuando las tendencias se invierten, evitando quedar atrapados en una dirección y mejorando la rentabilidad de la estrategia.

Los riesgos

Los principales riesgos de esta estrategia provienen de la configuración de parámetros del período ATR y el multiplicador. Si el período ATR es demasiado corto o el multiplicador demasiado grande, el rango de stop loss sería demasiado pequeño para controlar los riesgos de manera efectiva. Si el período ATR es demasiado largo o el multiplicador demasiado pequeño, el stop loss sería demasiado flojo para obtener ganancias. También, hay riesgos de falsas rupturas cuando los precios penetran los promedios móviles.

Los riesgos se pueden gestionar optimizando el período de ATR y el multiplicador para equilibrar los objetivos de stop loss y beneficio e incorporando otros indicadores para filtrar las fallas y mejorar la calidad de la señal.

Oportunidades de mejora

Esta estrategia puede reforzarse a partir de los siguientes aspectos:

  1. Optimizar los períodos de media móvil para encontrar la mejor combinación de parámetros.

  2. Añadir otros indicadores como MACD, KDJ, etc. para filtrar las señales y mejorar la calidad.

  3. Incorporar el tamaño de la posición como fracción fija, Martingale, etc. para mejorar la rentabilidad.

  4. Investigación de parámetros diferencias entre varios productos para la optimización.

  5. Aplicar el aprendizaje automático como algoritmos genéticos para el entrenamiento de parámetros y la optimización.

Conclusión

Esta estrategia considera plenamente la evaluación de tendencias y el control de riesgos, la búsqueda de ganancias mientras se reducen las reducciones. La mejora adicional a través de la optimización de parámetros y métodos de cartera puede ayudar a mejorar la rentabilidad de la estrategia. En resumen, esta es una estrategia comercial cuantitativa robusta y estable con lógica clara y fácil implementación.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("Trenbolone Strategy", overlay = true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Más.