Strategi perdagangan kuantitatif untuk pembalikan rata-rata saluran ATR

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

img

Gambaran umum

Ini adalah strategi panjang saja yang mengidentifikasi sinyal masuk ketika harga melanggar band bawah saluran ATR, dan mengambil keuntungan ketika harga mencapai band tengah (EMA) atau band atas saluran ATR. Ini juga menggunakan ATR untuk menghitung tingkat stop loss. Strategi ini cocok untuk perdagangan jangka pendek yang cepat.

Logika Strategi

Ketika harga pecah di bawah band ATR bagian bawah, itu menandakan penurunan anomali. Strategi akan pergi panjang pada candles berikutnya terbuka. Stop loss ditetapkan pada harga masuk dikurangi ATR stop loss multiplier kali ATR. Take profit berada di band tengah (EMA) atau band ATR bagian atas. Jika bar bar saat ini lebih rendah dari bar bar sebelumnya, maka gunakan bar bar sebelumnya sebagai take profit.

Secara khusus, logika kunci meliputi:

  1. Menghitung ATR dan band tengah (EMA)
  2. Tentukan filter waktu
  3. Mengidentifikasi sinyal panjang ketika harga < band ATR bawah
  4. Masuk panjang di bar berikutnya terbuka
  5. Harga entri rekor
  6. Menghitung harga stop loss
  7. Mengambil keuntungan ketika harga > band tengah (EMA) atau band ATR atas
  8. Stop out ketika harga < harga stop loss

Analisis Keuntungan

Keuntungan dari strategi ini:

  1. Menggunakan saluran ATR untuk sinyal masuk dan keluar yang dapat diandalkan
  2. Hanya lama setelah penurunan anomali menghindari mengejar tinggi
  3. Kontrol stop loss yang ketat terhadap risiko
  4. Cocok untuk perdagangan cepat jangka pendek
  5. Logika sederhana mudah diterapkan dan dioptimalkan

Analisis Risiko

Ada beberapa risiko:

  1. Frekuensi perdagangan yang tinggi mengarah pada biaya transaksi dan slippage yang lebih tinggi
  2. Stop loss yang berturut-turut dapat terjadi
  3. Optimasi parameter yang tidak tepat berdampak pada kinerja
  4. Perubahan harga yang besar dapat mengakibatkan stop loss yang terlalu besar

Risiko ini dapat dikurangi dengan menyesuaikan periode ATR, stop loss multiplier dll. Memilih broker dengan biaya perdagangan yang rendah juga penting.

Arahan Optimasi

Strategi dapat ditingkatkan dengan:

  1. Menambahkan indikator filter lainnya untuk menghindari kehilangan sinyal masuk terbaik
  2. Mengoptimalkan periode ATR
  3. Mempertimbangkan mekanisme re-entry
  4. Ukuran stop loss adaptif
  5. Menambahkan filter tren untuk menghindari perdagangan yang bertentangan dengan tren

Kesimpulan

Singkatnya, ini adalah strategi reversi rata-rata yang sederhana dan praktis berdasarkan saluran ATR. Ini memiliki aturan masuk yang jelas, stop loss yang ketat, dan mengambil keuntungan yang wajar. Ada juga ruang untuk penyesuaian parameter. Jika pedagang dapat memilih simbol yang tepat dan mengendalikan risiko dengan stop loss, 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 banyak