Strategi ini menghasilkan sinyal masuk LONG atau SHORT ketika rata-rata bergerak sederhana 30 hari yang cepat dan rata-rata bergerak sederhana 33 hari yang lambat dari harga saham bersilang.
Inti dari strategi ini adalah untuk menghitung MA 30 hari cepat dan MA 33 hari lambat. Garis cepat dapat merespons perubahan harga lebih cepat sementara garis lambat memiliki efek penyaringan yang lebih baik. Ketika garis cepat menembus garis lambat ke atas, sinyal beli dihasilkan. Ini menunjukkan harga mulai naik dan garis cepat telah merespons sementara garis lambat masih tertinggal. Ketika garis cepat menembus garis lambat ke bawah, sinyal jual dihasilkan. Ini menunjukkan harga mulai menurun sementara garis cepat telah merespons tetapi garis lambat masih tertinggal.
Melalui desain crossover MA yang cepat dan lambat, ia dapat menghasilkan sinyal perdagangan ketika tren baru dimulai, dan keluar pada sinyal yang berlawanan, secara efektif menangkap tren harga jangka menengah hingga panjang.
Strategi ini memiliki keuntungan berikut:
Ada juga beberapa risiko untuk strategi ini:
Metode seperti optimasi parameter, pengaturan tingkat stop loss, hanya perdagangan ketika tren jelas dll dapat digunakan untuk mengendalikan dan mengurangi risiko tersebut.
Strategi dapat dioptimalkan dalam aspek berikut:
Melalui pengujian dan optimalisasi, aturan strategi dapat terus ditingkatkan untuk mendapatkan sinyal perdagangan yang lebih dapat diandalkan di berbagai lingkungan pasar.
Singkatnya, strategi breakout crossover MA ganda ini cukup sederhana dan praktis. Dengan menggabungkan MA cepat dan MA lambat, ia dapat secara efektif mengidentifikasi awal tren jangka menengah hingga panjang dan menghasilkan sinyal perdagangan yang relatif dapat diandalkan. Juga, aturan stop lossnya mudah diterapkan. Dengan optimasi lebih lanjut, strategi ini dapat menjadi sistem kuantitatif jangka panjang yang bermanfaat.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //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=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)