Strategi perdagangan lintas rata-rata bergerak ganda

Penulis:ChaoZhang, Tanggal: 2023-11-02 14:21:24
Tag:

img

Gambaran umum

Strategi ini menggunakan penyeberangan rata-rata bergerak ganda sebagai sinyal perdagangan, dikombinasikan dengan ATR berhenti untuk tren setelah perdagangan. Ide utamanya adalah untuk pergi panjang ketika rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat, dan pergi pendek ketika melintasi di bawah, sambil menggunakan ATR untuk mengatur tingkat stop loss untuk berhenti yang dinamis.

Logika Strategi

Strategi ini terutama menggunakan dua set rata-rata bergerak untuk menentukan arah tren. rata-rata bergerak cepat memiliki panjang 25 hari, dan rata-rata bergerak lambat memiliki panjang 100 hari. sinyal beli dihasilkan ketika MA cepat melintasi di atas MA lambat, dan sinyal jual dihasilkan ketika melintasi di bawah.

Untuk menyaring beberapa sinyal palsu, strategi ini menambahkan crossover counter yang disebut crossCount. Sinyal hanya dipicu ketika jumlah silang untuk MA cepat dalam periode lookback (default 25 hari) kurang dari maxNoCross (default 10).

Selain itu, strategi ini memiliki mekanisme konfirmasi, di mana sinyal juga dikonfirmasi jika harga kembali masuk antara dua rata-rata bergerak setelah sinyal awal.

Setelah memasuki posisi, strategi menggunakan ATR untuk mengatur level stop loss. ATR mengukur rentang fluktuasi harga selama periode tertentu, dan di sini 14x digunakan sebagai jarak stop.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan persilangan MA ganda dengan penyaringan, dapat secara efektif menangkap pergerakan tren yang kuat sambil menghindari sinyal palsu.

  2. Mekanisme konfirmasi mencegah pemalsuan oleh pelarian palsu.

  3. Stop loss ATR yang mengambang membantu memaksimalkan keuntungan sambil membatasi drawdown.

  4. Ini memiliki beberapa parameter yang dapat dioptimalkan dan mudah diimplementasikan.

  5. Terapkan di seluruh pasar termasuk aset kripto dan tradisional.

  6. Menggabungkan beberapa indikator teknis untuk ketahanan.

Analisis Risiko

Risiko utama dari strategi ini meliputi:

  1. Pembebasan MA yang sering terjadi selama periode yang terbatas pada kisaran dapat menyebabkan banyak kerugian.

  2. Pengaturan parameter ATR yang tidak benar dapat menyebabkan stop terlalu lebar atau terlalu ketat.

  3. Celah besar dapat langsung memicu berhenti.

  4. Peristiwa berita besar yang menyebabkan volatilitas besar juga dapat menghentikan posisi.

  5. Parameter MA yang tidak memadai dapat menyebabkan hilangnya tren atau terlalu banyak sinyal palsu.

  6. Aksi harga baru-baru ini dapat membuat berhenti ATR usang.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Mengoptimalkan parameter MA untuk menemukan kombinasi yang lebih baik, menguji periode yang berbeda dan rata-rata tertimbang.

  2. Uji periode ATR yang berbeda untuk menemukan jarak berhenti yang lebih baik.

  3. Tambahkan filter tambahan seperti lonjakan volume, indikator volatilitas untuk meningkatkan kualitas sinyal.

  4. Sertakan metrik tren untuk menghindari whipsaws di pasar bergolak.

  5. Tambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis melalui backtesting.

  6. Cari konfirmasi lebih lanjut pada jangka waktu yang lebih lama untuk menghindari kebisingan jangka pendek.

  7. Menerapkan aturan mengambil keuntungan bertahap untuk skala keluar dari posisi menguntungkan.

Ringkasan

Strategi ini menggabungkan penyeberangan MA ganda, penyaringan tren, konfirmasi, dan pemberhentian ATR dinamis untuk mengikuti tren yang kuat.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)

//MA's for basic signals, can experiment with these values

fastEMA = sma(close, 25)
slowEMA = sma(close, 100)

//Parameters for validation of position

lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets

//Amount of crosses on MA to filter out noise

ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)

//Entries long

agrLong =  ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false

//Entries short

agrShort =  ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false

//ATR

atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15",  title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))

//Strategy

longCondition = ((agrLong or consLong) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)

//Stop multiplier 

stopMult = 4

//horizontal stoplosses

longStop = na
longStop :=  shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] 
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]

//Strategy exit functions

strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)

//Plots 

redgreen = (fastEMA > slowEMA) ? green : red
    
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) 
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) 
fill(p1, p2, color=redgreen)

s1 = plot(longStop, style=linebr, color=red, linewidth=2,     title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2,  title='Short ATR Stop')

fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)





    




Lebih banyak