
Strategi perdagangan lintas rata-rata bergerak adalah strategi perdagangan kuantitatif yang lebih umum. Strategi ini menghasilkan sinyal perdagangan dengan menghitung rata-rata bergerak dari periode yang berbeda dan berdasarkan persimpangan mereka. Secara khusus, adalah menghitung rata-rata bergerak indeks dari 4 siklus, 8 siklus, dan 20 siklus (EMA), melakukan over saat melewati EMA jangka panjang pada EMA jangka pendek; melakukan over saat EMA jangka pendek melanggar EMA jangka panjang.
Logika inti dari strategi ini adalah:
Dengan metode ini, kami menggunakan persilangan antara garis rata-rata berkala yang berbeda untuk menilai sinyal pasar, dan menggunakan arah garis rata-rata berkala terpanjang untuk memfilter sinyal palsu dan membangun strategi perdagangan yang stabil.
Strategi ini memiliki beberapa keuntungan utama:
Strategi ini juga memiliki beberapa risiko:
Solusi utama adalah:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Siklus optimasi: menentukan kombinasi siklus MA yang optimal berdasarkan varietas yang berbeda Optimalisasi Stop Loss: mengatur stop loss yang masuk akal, mengendalikan kerugian tunggal Optimasi parameter: mengoptimalkan parameter secara dinamis menggunakan algoritma genetik, rantai Markov, dan lain-lain
Integrasi Model: Integrasi dengan model pembelajaran mendalam seperti LSTM, RNN, dan lain-lain untuk mendapatkan lebih banyak Alpha
Optimasi portofolio: portofolio strategi dengan indikator lainnya, untuk membangun portofolio strategi
Strategi crossover rata-rata bergerak secara keseluruhan adalah strategi perdagangan kuantitatif yang lebih klasik dan umum digunakan. Strategi ini logisnya sederhana, mudah dipahami dan diimplementasikan, dan memiliki stabilitas tertentu. Namun, ada juga beberapa masalah, seperti menghasilkan sinyal palsu, tidak dapat beradaptasi dengan perubahan pasar, dll.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub", overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)
testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() => true
ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)
go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]
go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]
if testPeriod()
strategy.entry("simpleBuy", strategy.long, when=go_long)
strategy.exit("simpleBuy", "simpleSell",when=exit_long)
strategy.entry("simpleSell", strategy.short,when=go_short)
strategy.exit("simpleSell", "simpleSell",when=exit_short)