Strategi purata bergerak lima kali ganda

EMA WMA SMA TMA VAR WWMA ZLEMA TSF
Tarikh penciptaan: 2024-05-23 18:14:35 Akhirnya diubah suai: 2024-05-23 18:14:35
Salin: 3 Bilangan klik: 575
1
fokus pada
1617
Pengikut

Strategi purata bergerak lima kali ganda

Gambaran keseluruhan

Strategi pergerakan rata-rata berkekuatan lima adalah strategi perdagangan berdasarkan beberapa purata bergerak. Strategi ini menggunakan 5 purata bergerak yang berbeza untuk tempoh dan jenis untuk mengenal pasti trend yang kuat di pasaran. Tiga purata bergerak pertama adalah bahagian teras strategi ini, yang digunakan terutamanya untuk pengenalan trend dan penjanaan isyarat; dan purata bergerak keempat dan kelima digunakan terutamanya untuk penilaian tambahan dan analisis visual.

Dengan mempertimbangkan pergerakan dan hubungan kedudukan relatif dari purata bergerak berkala dan jenis yang berbeza secara komprehensif, strategi ini dapat menilai arah dan kekuatan trend semasa pasaran dengan lebih tepat, dan menyesuaikan kedudukan tepat pada masanya mengikut perubahan trend, untuk mencapai kesan keuntungan yang lebih baik.

Prinsip Strategi

Strategi ini menggunakan 5 purata bergerak berkala dan jenis yang berbeza, iaitu:

  1. Tahap 1 MAV: Tampilan, label, sumber data, jangka masa, panjang, lebar garis, warna dan jenis yang boleh disesuaikan.
  2. Tahap kedua: Tampilan, label, sumber data, jangka masa, panjang, lebar garis, warna dan jenis yang boleh disesuaikan.
  3. Tahap ketiga: Tampilan, label, sumber data, jangka masa, panjang, lebar garis, warna dan jenis yang boleh disesuaikan.
  4. Tahap keempat: digunakan untuk penilaian tambahan, menampilkan, label, sumber data, jangka masa, panjang, lebar garisan dan warna.
  5. Tahap kelima adalah purata bergerak, yang digunakan untuk penilaian tambahan, yang boleh dipaparkan, dilabel, sumber data, jangka masa, panjang, lebar garis dan warna.

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

Idea utama strategi ini adalah untuk mengenal pasti arah dan kekuatan trend dengan menggunakan pelbagai pengesahan trend dari pelbagai tempoh dan jenis purata bergerak:

  • Apabila harga penutupan berada di atas purata bergerak peringkat 1, 2, dan 3, anda boleh melakukan lebih banyak.
  • Apabila harga penutupan berada di bawah purata bergerak Tahap 1, Tahap 2 dan Tahap 3, anda boleh melakukan shorting.
  • Apabila anda telah memegang lebih banyak kedudukan, anda akan mendapat lebih banyak jika harga penutupan jatuh di bawah purata bergerak lapisan 1 dan 2;
  • Apabila telah memegang kedudukan kosong, jika harga penutupan menembusi purata bergerak lapisan 1 dan 2, kosong.

Selain itu, strategi ini juga akan memaparkan warna garis K berdasarkan arah kedudukan semasa:

  • Garis K berwarna hijau apabila anda mempunyai lebih banyak kedudukan.
  • Garis K menunjukkan warna merah apabila anda memegang saham kosong.
  • Dalam kes lain, garis K menunjukkan kelabu.

Kelebihan Strategik

  1. Strategi ini menggunakan beberapa gabungan purata bergerak jangka menengah dan panjang untuk menilai trend, dan mempunyai keupayaan pengenalan trend yang kuat untuk menangkap trend utama pasaran dengan berkesan.
  2. Parameter boleh diatur secara fleksibel. Pelbagai parameter strategi ini boleh disesuaikan secara fleksibel, termasuk jenis, kitaran, dan panjang purata bergerak, yang boleh dioptimumkan mengikut ciri-ciri pasaran dan pilihan pelabur yang berbeza.
  3. Beradaptasi dengan pelbagai pasaran. Strategi ini menilai trend berdasarkan pergerakan harga itu sendiri, sangat beradaptasi dengan pasaran, dan boleh digunakan untuk pelbagai pasaran seperti saham, niaga hadapan, forex, dan cryptocurrency.
  4. Logik yang jelas dan mudah. Logik teras strategi ini mudah dan mudah difahami dan dilaksanakan tanpa memerlukan model matematik yang terlalu rumit.

Risiko Strategik

  1. Risiko pencucian kertas di pasaran yang bergolak. Strategi ini biasanya berlaku di pasaran yang bergolak, dan mungkin akan menyebabkan lebih banyak perdagangan kerugian kecil, yang menyebabkan penurunan keuntungan bersih.
  2. Risiko pengoptimuman parameter. Strategi ini menggunakan lebih banyak parameter, dan jika data sejarah yang mencukupi dan pengoptimuman parameter tidak dilakukan, ia boleh menyebabkan pengunduran yang lebih besar dalam perdagangan saham di masa depan.
  3. Strategi ini digunakan terutamanya untuk keadaan trend, jika trend pasaran berbalik, strategi ini mungkin terus berdagang mengikut arah trend asal, menyebabkan kerugian.

Untuk mengurangkan risiko ini, langkah-langkah berikut boleh dipertimbangkan:

  1. Bergabung dengan pengesanan dan penghakiman logik pasaran yang bergolak, mengurangkan jumlah dagangan dalam keadaan bukan trend.
  2. Uji optimum parameter yang mencukupi untuk strategi ini, untuk mencari kombinasi parameter optimum yang stabil.
  3. Menetapkan kedudukan hentian yang munasabah untuk mengawal risiko maksimum perdagangan tunggal. Pada masa yang sama, anda boleh menyesuaikan kedudukan anda dengan masa yang tepat untuk mengesahkan pembalikan trend melalui petunjuk atau isyarat lain.

Arah pengoptimuman strategi

  1. Memperkenalkan lebih banyak indikator pengesahan trend seperti MACD, DMI dan lain-lain untuk meningkatkan ketepatan penilaian trend.
  2. Untuk pasaran yang bergolak, pertimbangkan untuk memperkenalkan logik operasi yang dapat menyesuaikan diri dengan keadaan yang bergolak, seperti perdagangan grid.
  3. Untuk ciri-ciri pasaran yang berbeza, parameter strategi boleh dioptimumkan secara berasingan untuk meningkatkan daya serap.
  4. Anda boleh mempertimbangkan untuk menggabungkan strategi ini dengan strategi lain, seperti gabungan strategi trend + goyah, gabungan strategi trend + strategi berlawanan, dan sebagainya, untuk meningkatkan kestabilan strategi.

ringkaskan

Strategi pergerakan rata-rata berkekuatan lima adalah strategi perdagangan berdasarkan pengesahan pelbagai trend, dengan mempertimbangkan pergerakan rata-rata bergerak dalam pelbagai kitaran dan jenis, dapat menilai arah dan kekuatan trend semasa pasaran dengan lebih tepat, dan menyesuaikan kedudukan dengan cepat mengikut perubahan trend. Logik strategi ini sederhana dan jelas, parameternya fleksibel, sesuai dengan pelbagai pasaran, tetapi ia berlaku secara umum di pasaran yang bergolak, dan terdapat risiko pengoptimuman parameter dan risiko perubahan trend.

Kod 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)