Estrategia de ruptura del canal de ATR adaptativa de AlphaTrend

El autor:¿ Qué pasa?, Fecha: 2023-09-11 14:27:54
Las etiquetas:

La estrategia AlphaTrend utiliza un canal ATR adaptativo para capturar la dirección de la tendencia del precio y seguir las tendencias basadas en las rupturas del canal. Específicamente, construye un canal dinámico basado en ATR, con la banda superior siendo el valor bajo menos ATR, y la banda inferior siendo el valor alto más ATR.

El ATR refleja la volatilidad y el impulso del mercado en tiempo real. El canal formado por las bandas superior e inferior puede medir el impulso y la fuerza del precio. Las rupturas señalan posibles inversiones de tendencia o aceleración, lo que hace que sea sensato seguir la tendencia.

Sin embargo, hay que tener en cuenta algunos problemas. El ATR en sí tiene características de retraso, que pueden causar entradas después de las inversiones de tendencia. Además, no usar un stop loss conduce a grandes reducciones. Por último, los parámetros como el período ATR necesitan optimización para diferentes productos y plazos.

En resumen, AlphaTrend tiene fortalezas únicas en la identificación de puntos de reversión de tendencia dinámica, pero todavía se requiere una gestión estricta del riesgo para el comercio en vivo, incluido el uso de paradas, posiciones de dimensionamiento y ajuste de parámetros.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
 

Más.