Strategi purata bergerak lima kali kuat adalah strategi perdagangan berdasarkan pelbagai purata bergerak. Strategi ini menggunakan 5 purata bergerak dari pelbagai jangka masa dan jenis untuk mengenal pasti trend yang kuat di pasaran. 3 purata bergerak pertama adalah komponen teras strategi, terutama digunakan untuk pengenalan trend dan penjanaan isyarat, sementara purata bergerak ke-4 dan ke-5 digunakan terutamanya untuk penilaian tambahan dan analisis visual.
Dengan mempertimbangkan secara komprehensif trend dan hubungan kedudukan relatif purata bergerak dari pelbagai jangka masa dan jenis, strategi ini dapat menentukan dengan tepat hala tuju trend semasa dan kekuatan pasaran, dan menyesuaikan kedudukan tepat pada masanya mengikut perubahan trend, untuk mencapai keuntungan yang baik.
Strategi ini menggunakan lima purata bergerak dari pelbagai jangka masa dan jenis, iaitu:
Jenis 5 purata bergerak ini boleh ditetapkan dengan fleksibel, termasuk SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF dan 8 jenis lain.
Idea teras strategi ini adalah untuk menentukan arah trend dan kekuatan dengan menggunakan pelbagai pengesahan trend purata bergerak jangka masa dan jenis yang berbeza:
Di samping itu, strategi ini akan memaparkan warna lilin mengikut kedudukan semasa:
Untuk mengurangkan risiko di atas, penambahbaikan berikut boleh dipertimbangkan:
Strategi purata bergerak kuat lima kali adalah strategi dagangan berdasarkan beberapa pengesahan trend. Dengan mempertimbangkan secara komprehensif trend dan hubungan kedudukan relatif purata bergerak dari jangka masa dan jenis yang berbeza, ia dapat menentukan arah trend semasa dan kekuatan pasaran dengan agak tepat, dan menyesuaikan kedudukan tepat pada masanya mengikut perubahan trend. Logik strategi adalah mudah dan jelas, parameternya fleksibel dan boleh disesuaikan, dan ia dapat disesuaikan dengan pelbagai pasaran. Walau bagaimanapun, ia menjalankan pasaran jangkauan masuk secara amnya, dan terdapat risiko pengoptimuman parameter tertentu dan risiko pembalikan trend. Pada masa akan datang, kita boleh mempertimbangkan untuk memperkenalkan lebih banyak penunjuk, mengoptimumkan parameter, menambah logik operasi untuk pasaran jangkauan, dan menggabungkan dengan jenis strategi lain untuk meningkatkan lagi ketahanan dan keuntungan strategi ini.
/*backtest start: 2023-05-17 00:00:00 end: 2024-05-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Quintuple Strong Moving Average Strategy","QuisMa", overlay=true, margin_long=100, margin_short=100) // 1 mav1_show = input.bool(true, 'Show Plot', group='Level 1 ', inline='mav1_0') mav1_label = input.bool(true, 'Show Label', group='Level 1 ', inline='mav1_0') mav1_source = input.source(close, '', group='Level 1 ', inline='mav1_1') mav1_timeframe = input.timeframe('5', '', group='Level 1 ', inline='mav1_1') mav1_length = input.int(50, 'Length', group='Level 1 ', inline='mav1_3') mav1_size = input.int(2000, 'Size', minval=1, group='Level 1 ', inline='mav1_3') mav1_width = input.int(2, '', minval=0, group='Level 1 ', inline='mav1_2') mav1_color = input.color(color.new(#ffd000, 0), '', group='Level 1 ', inline='mav1_2') mav1_type = input.string(title='Moving Average Type 1', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF']) // 2 mav2_show = input.bool(true, 'Show Plot', group='Level 2', inline='mav2_0') mav2_label = input.bool(true, 'Show Label', group='Level 2', inline='mav2_0') mav2_source = input.source(close, '', group='Level 2', inline='mav2_1') mav2_timeframe = input.timeframe('30', '', group='Level 2', inline='mav2_1') mav2_length = input.int(50, 'Length', group='Level 2', inline='mav2_3') mav2_size = input.int(2000, 'Size', minval=1, group='Level 2', inline='mav2_3') mav2_width = input.int(2, '', minval=0, group='Level 2', inline='mav2_2') mav2_color = input.color(color.new(#ffd000, 0), '', group='Level 2', inline='mav2_2') mav2_type = input.string(title='Moving Average Type 2', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF']) // 3 mav3_show = input.bool(true, 'Show Plot', group='Level 3', inline='mav3_0') mav3_label = input.bool(true, 'Show Label', group='Level 3', inline='mav3_0') mav3_source = input.source(close, '', group='Level 3', inline='mav3_1') mav3_timeframe = input.timeframe('60', '', group='Level 3', inline='mav3_1') mav3_length = input.int(50, 'Length', group='Level 3', inline='mav3_3') mav3_size = input.int(2000, 'Size', minval=1, group='Level 3', inline='mav3_3') mav3_width = input.int(2, '', minval=0, group='Level 3', inline='mav3_2') mav3_color = input.color(color.new(#ffd000, 0), '', group='Level 3', inline='mav3_2') mav3_type = input.string(title='Moving Average Type 3', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF']) // 4 mav4_show = input.bool(true, 'Show Plot', group='Level 4', inline='mav4_0') mav4_label = input.bool(true, 'Show Label', group='Level 4', inline='mav4_0') mav4_source = input.source(close, '', group='Level 4', inline='mav4_1') mav4_timeframe = input.timeframe('480', '', group='Level 4', inline='mav4_1') mav4_length = input.int(50, 'Length', group='Level 4', inline='mav4_3') mav4_size = input.int(2000, 'Size', minval=1, group='Level 4', inline='mav4_3') mav4_width = input.int(2, '', minval=0, group='Level 4', inline='mav4_2') mav4_color = input.color(color.new(#ffd000, 0), '', group='Level 4', inline='mav4_2') mav4_type = input.string(title='Moving Average Type 4', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF']) // 5 mav5_show = input.bool(true, 'Show Plot', group='Level 5', inline='mav5_0') mav5_label = input.bool(true, 'Show Label', group='Level 5', inline='mav5_0') mav5_source = input.source(close, '', group='Level 5', inline='mav5_1') mav5_timeframe = input.timeframe('720', '', group='Level 5', inline='mav5_1') mav5_length = input.int(50, 'Length', group='Level 5', inline='mav5_3') mav5_size = input.int(2000, 'Size', minval=1, group='Level 5', inline='mav5_3') mav5_width = input.int(2, '', minval=0, group='Level 5', inline='mav5_2') mav5_color = input.color(color.new(#ffd000, 0), '', group='Level 5', inline='mav5_2') mav5_type = input.string(title='Moving Average Type 5', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF']) // FUNCTIONS {{{ candle_size_ms = time - time[1] // milliseconds of a candle timetostring(tms) => d_ = math.floor(tms / 86400) h_ = math.floor((tms - d_ * 86400) / 3600) m_ = math.floor((tms - d_ * 86400 - h_ * 3600) / 60) s_ = math.floor(tms - d_ * 86400 - h_ * 3600 - m_ * 60) ret = d_ > 0 ? str.tostring(d_) + ' D ' : '' ret += (h_ > 0 ? str.tostring(h_) + ' H ' : '') ret += (m_ > 0 ? str.tostring(m_) + ' m ' : '') if d_ == 0 ret += (s_ > 0 ? str.tostring(s_) + ' s ' : '') ret ret tftostring(tf) => tfa = str.split(tf, '') tfalast = array.get(tfa, array.size(tfa) - 1) tfalastIsNum = na(str.tonumber(tfalast)) ? false : true txt = tfalastIsNum ? timetostring(str.tonumber(tf) * 60) : tf txt htfLabel(htfy, tf, col) => txt = tftostring(tf) htftxt = 'ᐊ ' + txt htftip = 'HTF [ ' + txt + ' ] ' + str.tostring(htfy, '#.##') label.new(x=time + candle_size_ms * 2, y=htfy, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(color.black, 100), textcolor=col, style=label.style_label_left, size=size.normal, text=htftxt, tooltip=htftip) // Moving Averages Functions {{{ Var_Func(src, length) => valpha = 2 / (length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR Wwma_Func(src, length) => wwalpha = 1 / length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA Zlema_Func(src, length) => zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, length) ZLEMA Tsf_Func(src, length) => lrc = ta.linreg(src, length, 0) lrc1 = ta.linreg(src, length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, length, 0) + lrs TSF getMA(src, length, mav_type) => ma = 0.0 if mav_type == 'SMA' ma := ta.sma(src, length) if mav_type == 'EMA' ma := ta.ema(src, length) if mav_type == 'WMA' ma := ta.wma(src, length) if mav_type == 'TMA' ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1) if mav_type == 'VAR' ma := Var_Func(src, length) if mav_type == 'WWMA' ma := Wwma_Func(src, length) if mav_type == 'ZLEMA' ma := Zlema_Func(src, length) if mav_type == 'TSF' ma := Tsf_Func(src, length) ma mav1 = request.security(syminfo.tickerid, mav1_timeframe, getMA(mav1_source, mav1_length, mav1_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(mav1_show ? mav1 : na, 'mav 1', color=mav1_color, linewidth=mav1_width, show_last=mav1_size) var label mav1lbl = na label.delete(mav1lbl) mav1lbl := mav1_label ? htfLabel(mav1, mav1_timeframe, mav1_color) : na mav2 = request.security(syminfo.tickerid, mav2_timeframe, getMA(mav2_source, mav2_length, mav2_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(mav2_show ? mav2 : na, 'mav 2', color=mav2_color, linewidth=mav2_width, show_last=mav2_size) var label mav2lbl = na label.delete(mav2lbl) mav2lbl := mav2_label ? htfLabel(mav2, mav2_timeframe, mav2_color) : na mav3 = request.security(syminfo.tickerid, mav3_timeframe, getMA(mav3_source, mav3_length, mav3_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(mav3_show ? mav3 : na, 'mav 3', color=mav3_color, linewidth=mav3_width, show_last=mav3_size) var label mav3lbl = na label.delete(mav3lbl) mav3lbl := mav3_label ? htfLabel(mav3, mav3_timeframe, mav3_color) : na mav4 = request.security(syminfo.tickerid, mav4_timeframe, getMA(mav4_source, mav4_length, mav4_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(mav4_show ? mav4 : na, 'mav 4', color=mav4_color, linewidth=mav4_width, show_last=mav4_size) var label mav4lbl = na label.delete(mav4lbl) mav4lbl := mav4_label ? htfLabel(mav4, mav4_timeframe, mav4_color) : na mav5 = request.security(syminfo.tickerid, mav5_timeframe, getMA(mav5_source, mav5_length, mav5_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) plot(mav5_show ? mav5 : na, 'mav 5', color=mav5_color, linewidth=mav5_width, show_last=mav5_size) var label mav5lbl = na label.delete(mav5lbl) mav5lbl := mav5_label ? htfLabel(mav5, mav5_timeframe, mav5_color) : na // Alış ve Satış Koşulları alisKosulu = close > mav1 and close > mav2 and close > mav3 satisKosulu = close < mav1 and close < mav2 and close < mav3 // Alış ve Satış Sinyalleri if (alisKosulu and not satisKosulu) strategy.entry("Alış", strategy.long) if (satisKosulu and not alisKosulu) strategy.entry("Satış", strategy.short) // Pozisyonları Kapatma Koşulları if (strategy.opentrades > 0) if (close < mav1 and close < mav2 and strategy.position_size > 0) strategy.close("Alış") if (close > mav1 and close > mav2 and strategy.position_size < 0) strategy.close("Satış") // Mum Rengi Ayarlama longKosul = strategy.opentrades > 0 and strategy.position_size > 0 shortKosul = strategy.opentrades > 0 and strategy.position_size < 0 barcolor(longKosul ? color.green : shortKosul ? color.red : color.gray)