Strategi Perdagangan Kuantitatif Pengembalian Saluran ATR

Penulis:ChaoZhang, Tarikh: 2023-12-11 15:38:25
Tag:

img

Ringkasan

Ini adalah strategi panjang sahaja yang mengenal pasti isyarat kemasukan apabila harga melanggar bawah jalur bawah saluran ATR, dan mengambil keuntungan apabila harga mencapai jalur tengah (EMA) atau jalur atas saluran ATR. Ia juga menggunakan ATR untuk mengira tahap stop loss. Strategi ini sesuai untuk perdagangan jangka pendek yang cepat.

Logika Strategi

Apabila harga pecah di bawah jalur ATR yang lebih rendah, ia menandakan penurunan anomali. Strategi akan menjadi panjang pada pembukaan lilin seterusnya. Stop loss ditetapkan pada harga kemasukan dikurangkan ATR stop loss multiplier kali ATR. Ambil keuntungan adalah pada jalur tengah (EMA) atau jalur ATR atas. Jika penutupan bar semasa lebih rendah daripada bar sebelumnya, maka gunakan bar sebelumnya rendah sebagai mengambil keuntungan.

Khususnya, logik utama termasuk:

  1. Mengira ATR dan jalur tengah (EMA)
  2. Tentukan penapis masa
  3. Mengenali isyarat panjang apabila harga < rentang ATR bawah
  4. Masuk panjang di bar seterusnya terbuka
  5. Harga kemasukan rekod
  6. Mengira harga stop loss
  7. Mengambil keuntungan apabila harga > rentang tengah (EMA) atau rentang ATR atas
  8. Stop out apabila harga < harga stop loss

Analisis Kelebihan

Kelebihan strategi ini:

  1. Menggunakan saluran ATR untuk isyarat masuk dan keluar yang boleh dipercayai
  2. Hanya lama selepas penurunan anomali mengelakkan mengejar tinggi
  3. Pengendalian risiko stop loss yang ketat
  4. Sesuai untuk perdagangan jangka pendek yang cepat
  5. Logik mudah dilaksanakan dan dioptimumkan

Analisis Risiko

Terdapat beberapa risiko:

  1. Frekuensi perdagangan yang tinggi membawa kepada kos transaksi yang lebih tinggi dan slippage
  2. Pemicu stop loss berturut-turut mungkin berlaku
  3. Pengoptimuman parameter yang tidak sesuai memberi kesan kepada prestasi
  4. Perubahan harga yang besar boleh menyebabkan stop loss yang terlalu besar

Risiko ini boleh dikurangkan dengan menyesuaikan tempoh ATR, pengganda stop loss dan lain-lain. Memilih broker dengan yuran dagangan yang rendah juga penting.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dengan:

  1. Menambah penunjuk penapis lain untuk mengelakkan kehilangan isyarat kemasukan terbaik
  2. Mengoptimumkan tempoh ATR
  3. Mempertimbangkan mekanisme kemasukan semula
  4. Saiz stop loss yang disesuaikan
  5. Menambah penapis trend untuk mengelakkan perdagangan yang bertentangan dengan trend

Kesimpulan

Ringkasnya, ini adalah strategi pembalikan purata yang mudah dan praktikal berdasarkan saluran ATR. Ia mempunyai peraturan kemasukan yang jelas, kerugian berhenti yang ketat, dan mengambil keuntungan yang munasabah. Terdapat juga ruang untuk penyesuaian parameter. Jika peniaga dapat memilih simbol yang betul dan mengawal risiko dengan kerugian berhenti, strategi ini dapat mencapai hasil yang baik.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
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/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)


Lebih lanjut