Trend ATR Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-09-21 15:13:47
Tag:

Ringkasan

Strategi ini menggunakan Julat Benar Purata (ATR) untuk menangkap trend harga dan menetapkan berhenti berdasarkan ATR untuk mengikuti trend.

Cara Ia Bekerja

  1. Mengira nilai ATR.

  2. Tentukan tahap stop loss berdasarkan ATR.

  3. Masukkan panjang/pendek apabila harga memecahkan paras berhenti.

  4. Kunci keuntungan dengan menyesuaikan berhenti secara dinamik.

Kelebihan

  • ATR menyesuaikan berhenti secara automatik, tiada campur tangan manual diperlukan
  • Logik yang mudah dan intuitif, mudah dilaksanakan
  • Membantu mengelakkan terperangkap, berhenti rugi tepat pada masanya
  • Keuntungan daripada trend menunggang
  • Frekuensi perdagangan dikawal melalui parameter ATR

Risiko

  • Parameter ATR yang buruk boleh menyebabkan berhenti terlalu longgar atau ketat
  • Tidak dapat mengenal pasti akhir trend dengan berkesan
  • Ada sedikit kelewatan masa.
  • Kembali boleh mengurangkan keuntungan

Arahan pengoptimuman

  • Mengoptimumkan parameter tempoh ATR
  • Uji pelbagai kelipatan ATR untuk jarak berhenti
  • Tambah penapis untuk mengesan pembalikan trend
  • meneroka pembelajaran mesin untuk pengoptimuman parameter
  • Pertimbangkan mekanisme pengambilan keuntungan tambahan

Kesimpulan

Strategi ini berkesan menangkap trend menggunakan ATR dan mengunci keuntungan dengan hentian dinamik. Parameter penyesuaian halus boleh meningkatkan prestasi. Tetapi kelewatan ATR tidak dapat dihapuskan sepenuhnya. Secara keseluruhan penyelesaian trend berikut yang mudah dan praktikal.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy(title="ATR Strategy", overlay = true,  commission_type=strategy.commission.percent,commission_value=0.075)
//credits to HPotter for the orginal code
nATRPeriod = input(5)
nATRMultip = input(3.5)
xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
	    iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy? color.green:color.red)



Lebih lanjut