Trend ATR Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-09-28 11:32:09
Tag:

Ringkasan

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.

Logika Strategi

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:

  1. Mengira purata harga sma dan ema
  2. Mengira julat purata ATR
  3. Mengira jalur atas dan bawah
  4. Menentukan isyarat panjang: harga pecah di atas jalur atas
  5. Menentukan isyarat pendek: harga pecah di bawah jalur bawah
  6. Tetapkan stop loss untuk menutup kedudukan: harga pecah di bawah band atas untuk menutup panjang; harga pecah di atas band bawah untuk menutup pendek.

Dengan menyesuaikan kedudukan secara dinamik berdasarkan ATR, ia dapat mengikut arah trend dengan berkesan.

Kelebihan

  1. Menggunakan ATR untuk menentukan arah trend boleh menangkap trend harga dengan berkesan
  2. Stop loss berdasarkan purata bergerak boleh mengawal risiko dengan munasabah
  3. Logik strategi yang mudah dan jelas, mudah difahami dan dilaksanakan
  4. Parameter yang boleh dikonfigurasikan yang fleksibel, dapat disesuaikan dengan persekitaran pasaran yang berbeza

Risiko

  1. Indikator ATR akan gagal dalam pasaran sampingan yang sangat tidak menentu
  2. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap
  3. Pembalikan tiba-tiba boleh membuat stop loss tidak sah
  4. Kos perdagangan yang lebih tinggi memerlukan penyesuaian untuk tetapan penjejakan

Penyelesaian:

  1. Hentikan strategi atau gunakan penunjuk lain dalam turun naik yang tinggi
  2. Mengoptimumkan parameter untuk mengurangkan kekerapan dagangan
  3. Meningkatkan nisbah stop loss untuk peristiwa data utama
  4. Sesuaikan julat ATR berdasarkan produk tertentu

Arahan Penambahbaikan

  1. Gabungkan dengan penunjuk trend untuk mengoptimumkan parameter, contohnya tambah MACD untuk trend
  2. Tambah penapis seperti Bollinger Bands untuk kemasukan
  3. Mengoptimumkan kaedah stop loss, seperti penunjuk berhenti atau keluar
  4. Mengoptimumkan julat ATR berdasarkan produk tertentu
  5. Tambah pengurusan risiko seperti saiz kedudukan pecahan tetap
  6. Mengoptimumkan parameter secara dinamik menggunakan pembelajaran mesin

Ringkasan

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)

Lebih lanjut