Strategi ini menggunakan penunjuk Julat Benar Purata (ATR) untuk menentukan arah trend. Ia pergi lama apabila trend naik dan pergi pendek apabila trend turun. Ia tergolong dalam jenis strategi trend berikut.
Strategi ini mula-mula mengira purata bergerak mudah (sma) dan purata bergerak eksponensial (ema) harga. Kemudian ia mengira penunjuk ATR, yang merupakan julat purata pergerakan harga selama N hari yang lalu.
Strategi ini menggunakan garis purata ema, band atas (ema + pekali ATR *) dan band bawah (ema - pekali ATR *) untuk menentukan arah trend.
Logik utama dalam kod:
Dengan menyesuaikan kedudukan secara dinamik berdasarkan ATR, ia dapat mengikut arah trend dengan berkesan.
Penyelesaian:
Strategi mengikuti trend ATR mempunyai logik yang jelas untuk menentukan arah trend menggunakan ATR. Ia adalah sistem trend berikut yang tipikal. Kelebihannya adalah kesederhanaan dan keupayaan untuk mengikuti trend. Tetapi ia juga mempunyai risiko yang memerlukan pengoptimuman untuk pasaran yang berbeza. Secara keseluruhan, ia mempunyai potensi dan nilai yang besar sebagai alat perdagangan kuantitatif.
/*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)