Chiến lược trung bình động mạnh gấp năm lần

EMA WMA SMA TMA VAR WWMA ZLEMA TSF
Ngày tạo: 2024-05-23 18:14:35 sửa đổi lần cuối: 2024-05-23 18:14:35
sao chép: 3 Số nhấp chuột: 575
1
tập trung vào
1617
Người theo dõi

Chiến lược trung bình động mạnh gấp năm lần

Tổng quan

Chiến lược trung bình di chuyển mạnh 5 lần là một chiến lược giao dịch dựa trên nhiều trung bình di chuyển. Chiến lược này sử dụng 5 chu kỳ và loại trung bình di chuyển khác nhau để xác định xu hướng mạnh mẽ trên thị trường. 3 trung bình di chuyển đầu tiên là thành phần cốt lõi của chiến lược, chủ yếu được sử dụng để xác định xu hướng và tạo tín hiệu; và trung bình di chuyển thứ 4 và thứ 5 chủ yếu được sử dụng để hỗ trợ phán đoán và phân tích trực quan.

Bằng cách cân nhắc tổng hợp các biến động và mối quan hệ vị trí tương đối của các trung bình di chuyển theo chu kỳ và loại khác nhau, chiến lược này có thể đánh giá chính xác hơn về hướng và cường độ của xu hướng hiện tại của thị trường và điều chỉnh vị trí theo xu hướng thay đổi để đạt được hiệu quả lợi nhuận tốt hơn.

Nguyên tắc chiến lược

Chiến lược này sử dụng các trung bình di chuyển trong 5 chu kỳ khác nhau và các loại khác nhau:

  1. Mạng trung bình di chuyển cấp 1: có thể tùy chỉnh hiển thị, thẻ, nguồn dữ liệu, khung thời gian, chiều dài, chiều rộng đường, màu sắc và loại.
  2. Mạng trung bình di chuyển cấp hai: hiển thị tùy chỉnh, thẻ, nguồn dữ liệu, khung thời gian, chiều dài, chiều rộng đường, màu sắc và loại.
  3. Mạng trung bình di chuyển cấp ba: hiển thị tùy chỉnh, thẻ, nguồn dữ liệu, khung thời gian, chiều dài, chiều rộng đường, màu sắc và loại.
  4. Mạng trung bình di chuyển cấp bốn: chủ yếu được sử dụng để hỗ trợ phán đoán, có thể tùy chỉnh hiển thị, thẻ, nguồn dữ liệu, khung thời gian, chiều dài, chiều rộng đường và màu sắc.
  5. Mạng trung bình di chuyển cấp năm: chủ yếu được sử dụng để hỗ trợ phán đoán, có thể tùy chỉnh hiển thị, thẻ, nguồn dữ liệu, khung thời gian, chiều dài, chiều rộng đường và màu sắc.

5 loại trung bình di chuyển có thể được thiết lập linh hoạt, bao gồm 8 loại như SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF.

Ý tưởng cốt lõi của chiến lược này là sử dụng xác nhận xu hướng đa dạng của các trung bình di chuyển theo chu kỳ và loại khác nhau để đánh giá chiều hướng và cường độ của xu hướng:

  • Khi giá đóng cửa ở trên mức trung bình di chuyển 1, 2 và 3, hãy làm nhiều hơn.
  • Khi giá đóng cửa dưới mức trung bình di chuyển 1, 2 và 3;
  • Khi đã nắm giữ nhiều vị thế, nếu giá đóng cửa giảm xuống dưới mức trung bình di chuyển tầng 1 hoặc 2, thì giá sẽ giảm;
  • Khi đang giữ vị trí trống, nếu giá đóng cửa phá vỡ đường trung bình di chuyển tầng 1 hoặc 2, thì sẽ trống.

Ngoài ra, chiến lược này cũng hiển thị màu K-line theo hướng nắm giữ hiện tại:

  • K-line hiển thị màu xanh lá cây khi giữ nhiều vị trí.
  • Dòng K hiển thị màu đỏ khi bạn đang giữ một vị trí trống.
  • Các trường hợp khác, đường K hiển thị màu xám.

Lợi thế chiến lược

  1. Khả năng theo dõi xu hướng mạnh mẽ. Chiến lược này sử dụng nhiều kết hợp trung bình di chuyển dài hạn để đánh giá xu hướng, khả năng nhận ra xu hướng mạnh mẽ, có thể nắm bắt được xu hướng chính của thị trường một cách hiệu quả.
  2. Các tham số có thể được điều chỉnh một cách linh hoạt. Các tham số của chiến lược có thể được thiết lập một cách linh hoạt, bao gồm loại, chu kỳ, độ dài của trung bình di chuyển, v.v., có thể được tối ưu hóa theo các đặc điểm thị trường khác nhau và sở thích của nhà đầu tư.
  3. Phù hợp với nhiều thị trường. Chiến lược này đánh giá xu hướng chủ yếu dựa trên chính sự chuyển động của giá cả, có khả năng thích ứng mạnh mẽ với thị trường và có thể được sử dụng cho nhiều thị trường như cổ phiếu, tương lai, ngoại hối, tiền điện tử.
  4. Logic Clear and Simple: logic cốt lõi của chiến lược là đơn giản, dễ hiểu và dễ thực hiện mà không cần mô hình toán học phức tạp.

Rủi ro chiến lược

  1. Rủi ro rửa giấy trong thị trường chấn động. Chiến lược này thường hoạt động trong thị trường chấn động, có thể có nhiều giao dịch thua lỗ nhỏ hơn, do đó làm giảm lợi nhuận ròng.
  2. Rủi ro tối ưu hóa tham số. Chiến lược này sử dụng nhiều tham số hơn, nếu không có đủ dữ liệu lịch sử và tối ưu hóa tham số, có thể dẫn đến sự rút lui lớn trong giao dịch thực tế trong tương lai.
  3. Rủi ro đảo chiều xu hướng. Chiến lược này chủ yếu áp dụng cho các tình huống xu hướng, và một khi xu hướng thị trường đảo ngược, chiến lược này có thể tiếp tục giao dịch theo hướng xu hướng ban đầu, gây thiệt hại.

Để giảm nguy cơ trên, các biện pháp cải tiến sau đây có thể được xem xét:

  1. Tham gia vào logic phát hiện và đánh giá thị trường chấn động, giảm số lần giao dịch trong các tình huống không có xu hướng.
  2. Kiểm tra tối ưu hóa tham số đầy đủ cho chiến lược để tìm ra sự kết hợp tham số tốt nhất.
  3. Thiết lập mức dừng lỗ hợp lý, kiểm soát rủi ro tối đa của giao dịch đơn lẻ. Đồng thời, có thể xác nhận xu hướng đảo ngược bằng các chỉ số hoặc tín hiệu khác và điều chỉnh vị trí kịp thời.

Hướng tối ưu hóa chiến lược

  1. Các chỉ số xác nhận xu hướng như MACD, DMI, và nhiều hơn nữa được giới thiệu để cải thiện tính chính xác của việc đánh giá xu hướng.
  2. Đối với thị trường sốc, bạn có thể xem xét việc đưa ra các logic hoạt động thích ứng với tình huống sốc, chẳng hạn như giao dịch lưới.
  3. Đối với các đặc điểm thị trường khác nhau, các tham số của chiến lược có thể được tối ưu hóa riêng biệt, tăng khả năng thích ứng.
  4. Có thể xem xét kết hợp chiến lược này với các chiến lược khác, chẳng hạn như kết hợp chiến lược xu hướng + chiến lược chấn động, kết hợp chiến lược xu hướng + chiến lược ngược, v.v., để tăng cường sự ổn định của chiến lược.

Tóm tắt

Chiến lược trung bình di chuyển mạnh năm là một chiến lược giao dịch dựa trên xác nhận xu hướng đa dạng, có thể đánh giá chính xác hướng và cường độ xu hướng hiện tại của thị trường bằng cách cân nhắc tổng hợp nhiều chu kỳ và loại động trung bình, và điều chỉnh vị trí kịp thời theo xu hướng thay đổi. Lập luận của chiến lược đơn giản và rõ ràng, các tham số có thể được điều chỉnh một cách linh hoạt, phù hợp với nhiều thị trường, nhưng hoạt động chung trong thị trường chấn động, và có một số tham số tối ưu hóa rủi ro và rủi ro biến đổi xu hướng.

Mã nguồn chiến lược
/*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)