Quintuple Strong Moving Average adalah strategi perdagangan yang didasarkan pada beberapa moving average. Strategi ini menggunakan 5 moving average dari berbagai jangka waktu dan jenis untuk mengidentifikasi tren yang kuat di pasar.
Dengan mempertimbangkan secara komprehensif tren dan hubungan posisi relatif dari rata-rata bergerak dari kerangka waktu dan jenis yang berbeda, strategi ini dapat secara akurat menentukan arah tren saat ini dan kekuatan pasar, dan menyesuaikan posisi tepat waktu sesuai dengan perubahan tren, sehingga mencapai profitabilitas yang baik.
Strategi ini menggunakan lima rata-rata bergerak dari kerangka waktu dan jenis yang berbeda, yaitu:
Jenis dari 5 rata-rata bergerak ini dapat diatur secara fleksibel, termasuk SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF dan 8 jenis lainnya.
Ide inti dari strategi ini adalah untuk menentukan arah tren dan kekuatan dengan menggunakan beberapa konfirmasi tren dari rata-rata bergerak dari kerangka waktu dan jenis yang berbeda:
Selain itu, strategi ini akan menampilkan warna lilin sesuai dengan posisi saat ini:
Untuk mengurangi risiko di atas, perbaikan berikut dapat dipertimbangkan:
Strategi Quintuple Strong Moving Average adalah strategi trading yang didasarkan pada beberapa konfirmasi tren. Dengan secara komprehensif mempertimbangkan tren dan hubungan posisi relatif dari rata-rata bergerak dari kerangka waktu dan jenis yang berbeda, ia dapat secara relatif akurat menentukan arah tren dan kekuatan pasar saat ini, dan menyesuaikan posisi tepat waktu sesuai dengan perubahan tren. Logika strategi sederhana dan jelas, parameternya fleksibel dan dapat disesuaikan, dan dapat disesuaikan dengan beberapa pasar. Namun, secara umum melakukan pasar rentang masuk, dan ada risiko optimasi parameter tertentu dan risiko pembalikan tren. Di masa depan, kita dapat mempertimbangkan untuk memperkenalkan lebih banyak indikator, mengoptimalkan parameter, menambahkan logika operasi untuk pasar rentang, dan menggabungkan dengan jenis strategi lain untuk meningkatkan ketahanan dan profitabilitas 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)