Strategi ini mengoptimumkan strategi crossover purata bergerak konvensional dengan menetapkan tiga purata bergerak dengan tempoh yang berbeza, membina corak salib emas dengan purata bergerak 9 tempoh, 50 tempoh dan 100 tempoh.
Strategi ini menggunakan tiga purata bergerak dengan tempoh 9, 50 dan 100. MA 9 tempoh adalah MA jangka pendek, MA 50 tempoh adalah MA jangka sederhana, dan MA 100 tempoh adalah MA jangka panjang. Isyarat perdagangan dihasilkan oleh persilangan antara MA jangka pendek dan MA jangka sederhana. Khususnya, apabila MA jangka panjang berada dalam trend menaik (di atas MA jangka sederhana), isyarat beli diaktifkan apabila MA jangka pendek melintasi di atas MA jangka sederhana. Isyarat jual diaktifkan apabila MA jangka pendek melintasi di bawah MA jangka sederhana.
Berbanding dengan strategi crossover purata bergerak berganda konvensional, strategi ini menambah syarat menilai trend jangka menengah dan panjang sebelum menghasilkan isyarat perdagangan, yang secara berkesan dapat menapis beberapa isyarat yang tidak sah. Apabila trend jangka panjang tidak jelas, strategi tidak akan menghasilkan isyarat, mengelakkan terperangkap dalam penyatuan. Pada masa yang sama, strategi ini sesuai untuk menangkap pergerakan trend dalam jangka pendek dan sederhana, mengurangkan kemungkinan kemasukan agresif.
Apabila menetapkan parameter untuk strategi ini, gabungan tempoh purata bergerak perlu diselaraskan. Kombinasi tempoh yang berbeza akan memberi kesan kepada keberkesanan strategi. Jika parameter tempoh tidak ditetapkan dengan betul, terdapat risiko menghasilkan terlalu banyak isyarat palsu. Di samping itu, peniaga perlu menyedari potensi risiko sistemik dan menghentikan kerugian tepat pada masanya untuk mengurangkan risiko.
Pertimbangkan untuk memasukkan penunjuk lain untuk membantu menilai trend pasaran, seperti MACD, BOLL, dan lain-lain, dan menetapkan syarat kemasukan yang lebih ketat, atau menggabungkan penunjuk turun naik untuk membina purata bergerak adaptif supaya parameter dapat menyesuaikan diri secara automatik berdasarkan keadaan pasaran untuk mengoptimumkan lagi strategi.
Berdasarkan persilangan purata bergerak berganda konvensional, strategi ini menambah penilaian MA jangka panjang dan syarat penapis, yang dapat menapis isyarat palsu dengan berkesan dan sesuai untuk menangkap pergerakan trend jangka pendek hingga sederhana. Ini adalah strategi trend yang mudah dan praktikal. Walau bagaimanapun, peniaga masih perlu memberi perhatian kepada pengoptimuman parameter dan risiko sistemik, dan merumuskan strategi pengurusan risiko saintifik.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) // Input switch1=input(true, title="Enable Bar Color?") switch2=input(false, title="Show Fast Moving Average") switch3=input(true, title="Show Slow Moving Average") //Calculate Moving Averages movingaverage_fast = sma(close, input(9)) movingaverage_slow = sma(close, input(100)) movingaverage_normal= sma(close, input(50)) //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // Calculation bullish_cross = crossover(movingaverage_fast, movingaverage_normal) bearish_cross = crossunder(movingaverage_fast, movingaverage_normal) //Entry and Exit if bullish_cross and window() and movingaverage_slow > movingaverage_normal strategy.entry("long", strategy.long) strategy.close("long", when = bearish_cross and window()) // Colors bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue barcolor(switch1?bartrendcolor:na) // Output plot(movingaverage_fast, color=color.orange, linewidth=2) plot(movingaverage_slow, color=color.purple, linewidth=3) plot(movingaverage_normal, color=color.blue, linewidth=2) bgcolor(color = showDate and window() ? color.gray : na, transp = 90)