
Esta estrategia construye una señal de pluripolarización para realizar un seguimiento de stop loss a través de un promedio móvil bidireccional. Su idea central es usar un promedio móvil para determinar la dirección de la tendencia, hacer más shorting en la dirección de la tendencia y usar ATR para calcular el punto de stop loss para realizar un seguimiento de stop loss.
Esta estrategia utiliza hl2 como precio de origen y calcula el ATR de un determinado ciclo como el margen de pérdida. La subida y bajada se calculan en base a los valores ATR multiplicados por un determinado múltiplo. Se produce una señal de compra cuando el precio sube en la subida y una señal de venta cuando el precio baja en la bajada.
Después de abrir una posición, ajuste el nivel de parada de acuerdo con los cambios en tiempo real de ATR, para lograr el seguimiento de parada. En concreto, cuando se hace más, la vía inferior se sube continuamente según el punto más bajo más reciente, para lograr el seguimiento de parada. Cuando se hace vacío, la vía superior se sube continuamente según el punto más alto más reciente, para lograr el seguimiento de parada.
De esta manera, la estrategia aprovecha al máximo la función de las medias móviles para determinar la dirección de la tendencia, además de agregar un mecanismo de seguimiento de pérdidas basado en ATR, que garantiza la corrección de la dirección de la operación y controla el riesgo de la operación.
La mayor ventaja de esta estrategia reside en el control del riesgo. La estrategia tradicional de promedio móvil solo considera el juicio de la dirección, por lo que es fácil romper posiciones. La estrategia agrega el seguimiento del stop loss calculado por el ATR, que puede ajustar el stop loss en función de la amplitud de las fluctuaciones del mercado, lo que controla el riesgo de negociación.
Además, esta estrategia combina el comercio de dos vías en múltiples espacios. En comparación con la estrategia unilateral, la estrategia permite ajustar la dirección de la posición a tiempo cuando la tendencia cambia, evitar quedarse atrapado en la misma dirección y aumentar los beneficios de la estrategia.
El principal riesgo de esta estrategia reside en la configuración del ciclo ATR y el multiplicador. Si el ciclo ATR es demasiado corto o el multiplicador es demasiado grande, el margen de parada será demasiado pequeño para controlar el riesgo de manera efectiva; si el ciclo ATR es demasiado largo o el multiplicador es demasiado pequeño, el stop será demasiado flexible y difícil de obtener ganancias.
Se puede equilibrar el stop loss con la optimización de los parámetros de ciclo y multiplicador; en combinación con otros indicadores, se puede filtrar la brecha falsa, mejorar la calidad de la señal y reducir el riesgo.
Esta estrategia puede ser optimizada en los siguientes aspectos:
Optimización del ciclo de las medias móviles para encontrar la mejor combinación de parámetros
Añadir filtros de otros indicadores, como MACD, KDJ, etc., para mejorar la calidad de la señal
Aumentar las estrategias de gestión de posiciones, como las acciones fijas, Martingale, etc., para mejorar los beneficios de las estrategias
Se pueden estudiar las diferencias de parámetros de diferentes variedades para optimizar los parámetros
Se puede combinar métodos de aprendizaje automático como algoritmos genéticos para optimizar el entrenamiento de parámetros
Esta estrategia tiene en cuenta el juicio de tendencias y el control del riesgo, y al mismo tiempo se centra en reducir los retrocesos en la búsqueda de ganancias. A través de métodos como la optimización de parámetros y la combinación, los beneficios de la estrategia pueden ser mejorados aún más. En general, la idea de esta estrategia es clara, fácil de implementar y es una estrategia de comercio cuantitativa confiable y estable.
/*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)