Strategi rata-rata pergerakan lima kali lipat yang kuat

EMA WMA SMA TMA VAR WWMA ZLEMA TSF
Tanggal Pembuatan: 2024-05-23 18:14:35 Akhirnya memodifikasi: 2024-05-23 18:14:35
menyalin: 3 Jumlah klik: 276
1
fokus pada
1166
Pengikut

Strategi rata-rata pergerakan lima kali lipat yang kuat

Ringkasan

Strategi Moving Average Quadruple adalah strategi perdagangan yang didasarkan pada beberapa moving average. Strategi ini menggunakan 5 periode dan jenis moving average yang berbeda untuk mengidentifikasi tren kuat di pasar. Tiga moving average pertama adalah komponen inti dari strategi ini, terutama untuk identifikasi tren dan pembuatan sinyal; sedangkan moving average keempat dan kelima terutama untuk penilaian tambahan dan analisis visual.

Dengan mempertimbangkan secara komprehensif pergerakan dan hubungan posisi relatif dari berbagai periode dan jenis rata-rata bergerak, strategi ini dapat menilai dengan lebih akurat arah dan kekuatan tren pasar saat ini, dan menyesuaikan posisi tepat waktu sesuai dengan perubahan tren untuk mendapatkan keuntungan yang lebih baik.

Prinsip Strategi

Strategi ini menggunakan 5 periode dan jenis rata-rata bergerak yang berbeda, yaitu:

  1. Moving Average Tingkat Satu: Tampilan, label, sumber data, kerangka waktu, panjang, lebar garis, warna, dan jenis yang dapat disesuaikan.
  2. Moving Average Tingkat II: Tampilan, label, sumber data, jangka waktu, panjang, lebar garis, warna, dan jenis yang dapat disesuaikan.
  3. Tingkat ketiga adalah Moving Average (MA) yang dapat disesuaikan dengan tampilan, label, sumber data, jangka waktu, panjang, lebar garis, warna, dan jenisnya.
  4. Moving Average Tingkat IV: terutama digunakan untuk penilaian tambahan, dapat disesuaikan dengan tampilan, label, sumber data, kerangka waktu, panjang, lebar garis, dan warna.
  5. Tingkat kelima Moving Average: terutama digunakan untuk penilaian tambahan, tampilan yang dapat disesuaikan, label, sumber data, kerangka waktu, panjang, lebar garis, dan warna.

Lima jenis rata-rata bergerak ini dapat diatur secara fleksibel, termasuk 8 jenis seperti SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, dan TSF.

Gagasan inti dari strategi ini adalah menggunakan multiple trend confirmation dari berbagai periode dan jenis moving average untuk menilai arah dan intensitas tren:

  • Jika harga ditutup di atas rata-rata bergerak tingkat 1, 2, dan 3, lakukan lebih banyak.
  • Ketika harga ditutup di bawah rata-rata bergerak level 1, 2, dan 3, maka Anda harus melakukan shorting.
  • Ketika telah memegang lebih banyak posisi, jika harga penutupan jatuh di bawah Moving Average Lapisan 1 dan 2, lebih banyak;
  • Ketika telah memegang posisi kosong, jika harga penutupan menembus Moving Average Lapisan 1 dan 2, maka posisi kosong.

Selain itu, strategi ini juga menampilkan warna garis K berdasarkan arah posisi saat ini:

  • Jika Anda memiliki lebih dari satu posisi, garis K menunjukkan warna hijau.
  • K-line berwarna merah saat posisi kosong;
  • Dalam kasus lain, garis K menunjukkan warna abu-abu.

Keunggulan Strategis

  1. Strategi ini menggunakan beberapa kombinasi rata-rata bergerak jangka menengah dan panjang untuk menilai tren, dan memiliki kemampuan identifikasi tren yang kuat, sehingga dapat secara efektif menangkap tren utama pasar.
  2. Parameternya dapat disesuaikan secara fleksibel. Parameter strategi ini dapat diatur secara fleksibel, termasuk jenis, periode, dan durasi rata-rata bergerak, yang dapat dioptimalkan sesuai dengan karakteristik pasar yang berbeda dan preferensi investor.
  3. Adaptasi ke beberapa pasar. Strategi ini menilai tren terutama berdasarkan pergerakan harga itu sendiri, memiliki kemampuan adaptasi yang kuat terhadap pasar, dapat digunakan untuk beberapa pasar seperti saham, futures, forex, cryptocurrency.
  4. Logika yang jelas dan sederhana. Logika inti dari strategi ini sederhana dan jelas, mudah dimengerti dan diimplementasikan, dan tidak memerlukan model matematika yang terlalu rumit.

Risiko Strategis

  1. Risiko pencucian uang di pasar yang bergolak. Strategi ini biasanya dilakukan di pasar yang bergolak, dan kemungkinan akan terjadi lebih banyak transaksi kecil yang merugikan, yang menyebabkan penurunan laba bersih.
  2. Risiko optimasi parameter. Strategi ini menggunakan lebih banyak parameter, yang dapat menyebabkan penurunan yang lebih besar dalam perdagangan real-time di masa depan jika tidak melakukan pemantauan data historis dan optimasi parameter yang memadai.
  3. Strategi ini terutama berlaku untuk tren, jika tren pasar berbalik, strategi ini mungkin akan terus berdagang sesuai dengan arah tren asli, menyebabkan kerugian.

Untuk mengurangi risiko di atas, pertimbangan untuk melakukan perbaikan adalah sebagai berikut:

  1. Bergabunglah dengan deteksi dan penilaian logika pasar yang bergoyang, mengurangi jumlah transaksi dalam kondisi non-trending.
  2. Uji optimasi parameter yang memadai untuk strategi ini untuk menemukan kombinasi parameter optimal yang stabil.
  3. Tetapkan stop loss yang wajar, kendalikan risiko maksimum dalam satu transaksi. Pada saat yang sama, Anda dapat mengkonfirmasi pembalikan tren melalui indikator atau sinyal lain, dan menyesuaikan posisi tepat waktu.

Arah optimasi strategi

  1. Memperkenalkan lebih banyak indikator pengakuan tren, seperti MACD, DMI, dan lain-lain, untuk meningkatkan akurasi penilaian tren.
  2. Untuk pasar yang bergoyang, pertimbangkan untuk memperkenalkan logika operasi yang dapat beradaptasi dengan situasi yang bergoyang, seperti perdagangan grid.
  3. Adaptivitas dapat ditingkatkan dengan mengoptimalkan parameter strategi yang sesuai dengan karakteristik pasar yang berbeda.
  4. Strategi ini dapat dipertimbangkan untuk dikombinasikan dengan strategi lain, seperti kombinasi strategi tren + strategi goyah, kombinasi strategi tren + strategi berlawanan arah, dan lain-lain, untuk meningkatkan stabilitas strategi.

Meringkaskan

Strategi Moving Average Five-Strong adalah strategi perdagangan yang didasarkan pada konfirmasi tren ganda, dengan mempertimbangkan secara komprehensif pergerakan rata-rata bergerak dari beberapa periode dan jenis, dapat menilai dengan akurat arah dan kekuatan tren pasar saat ini, dan menyesuaikan posisi sesuai dengan perubahan tren. Logika strategi ini sederhana dan jelas, parameternya fleksibel, sesuai dengan beberapa pasar, tetapi umumnya terjadi di pasar yang bergolak, dan ada risiko optimasi parameter tertentu dan risiko pergeseran tren.

Kode Sumber Strategi
/*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)