La estrategia se basa en el indicador de amplitud real promedio ATR para determinar la dirección de la tendencia, hacer más cuando la tendencia sube y hacer menos cuando la tendencia baja, y pertenece al tipo de estrategia de seguimiento de tendencias.
La estrategia primero calcula el promedio móvil simple de los precios sma y el promedio móvil del índice ema. Luego calcula el indicador ATR, es decir, el rango de fluctuación promedio de los últimos N días.
La estrategia determina la dirección de la tendencia a través de la media de ema, la trayectoria ascendente ((ema + ATR * factor) y la trayectoria descendente ((ema - ATR * factor)). Haga más cuando el precio sube a la trayectoria ascendente; haga vacío cuando el precio baja a la trayectoria descendente.
La lógica principal del código:
El ATR permite el ajuste dinámico de posiciones para el seguimiento eficaz de las tendencias.
La solución:
La estrategia de seguimiento de tendencias de ATR tiene una idea general clara, determina la dirección de la tendencia a través de los indicadores de ATR y es una estrategia de seguimiento de tendencias típica. La estrategia tiene la ventaja de ser simple y fácil de operar y de poder seguir la tendencia de manera efectiva.
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
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/
// © Investoz
//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
len = input(26, type=input.integer, minval=1, title="Length")
mul = input(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, type=input.float, minval=0, title="Length")
price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow
bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2008, title = "From Year", minval = 2008)
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 = 2020, title = "To Year", minval = 2019)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
startTimeOk() => true
if (startTimeOk()) and ema(close,1) > ema(close,528)
strategy.entry("KOP", strategy.long, when=bull_cross)
strategy.close("KOP", when=bear_cross)
if (startTimeOk()) and ema(close,1) < ema(close,528)
strategy.entry("SALJ", strategy.short, when=bear_cross)
strategy.close("SALJ", when=bull_cross)
plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)