Strategi ini berdasarkan purata sebenar gelombang indikator ATR untuk menilai arah trend, melakukan lebih banyak apabila trend meningkat, mengambil posisi kosong apabila trend menurun, adalah jenis strategi trend mengikuti.
Strategi ini pertama-tama mengira harga purata bergerak sederhana sma dan purata bergerak indeks ema. Kemudian, ia mengira indikator ATR, iaitu julat pergerakan purata untuk N hari yang lalu.
Strategi untuk menilai arah trend melalui rata-rata ema, atas ((ema + ATR * faktor) dan bawah ((ema - ATR * faktor)). Apabila harga naik ke atas, lakukan lebih banyak; apabila harga turun ke bawah, lakukan kosong.
Logik kod utama:
Dengan menggunakan ATR untuk mengubah kedudukan secara dinamik, Directions dapat mengesan trend secara berkesan.
Penyelesaian:
Strategi pengesanan trend ATR mempunyai pemikiran keseluruhan yang jelas, menilai arah trend melalui indikator ATR, dan merupakan strategi pengesanan trend yang tipikal. Kelebihan strategi ini adalah mudah digunakan dan dapat mengesan trend dengan berkesan; tetapi ada juga risiko tertentu, yang memerlukan penyesuaian optimum untuk keadaan pasaran yang berbeza untuk mencapai keberkesanan strategi. Secara keseluruhan, strategi ini mempunyai ruang pengembangan dan nilai penggunaan 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)