Chiến lược giao cắt đường trung bình động kép


Ngày tạo: 2023-11-16 17:25:13 sửa đổi lần cuối: 2023-11-16 17:25:13
sao chép: 0 Số nhấp chuột: 655
1
tập trung vào
1621
Người theo dõi

Chiến lược giao cắt đường trung bình động kép

Tổng quan

Chiến lược này sử dụng nguyên tắc giao thoa hai đường bằng phẳng, kết hợp với phán đoán xu hướng của chỉ số MACD và điểm giao thoa nổi bật nền, hỗ trợ với điểm hình dạng, nhằm mục đích chụp xu hướng trung bình của thị trường. Logic chính là vào khi chuyển đổi theo hướng bằng phẳng, đi qua điểm giao thoa nổi bật của màu nền MACD, kết hợp với phán đoán thay đổi màu sắc của đồ thị đường thẳng MACD.

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

Chiến lược sử dụng EMA nhanh và EMA chậm để xây dựng hai đường trung bình, đường nhanh và đường chậm để xác định hướng xu hướng. Đồng thời, tính toán MACD và Signal, điểm chênh lệch của nó được vẽ như một đồ thị thẳng.

Dựa trên mã, chiều dài đường nhanh là 12, chiều dài đường chậm là 26, thể hiện xu hướng ngắn hạn và dài hạn. Dài Signal là 9, xử lý mịn thêm.

Lập luận chéo

  • trend_up = macd > signal: đường nhanh trên đường chậm, đại diện cho xu hướng tăng ngắn hạn
  • trend_dn = macd < signal: đường nhanh xuyên qua đường chậm, đại diện cho xu hướng giảm ngắn hạn

Địa điểm giao nhau:

  • cross_UP = signal[1] >= macd[1] and signal < macd: đường nhanh đi qua đường chậm từ dưới
  • cross_DN = signal[1] <= macd[1] and signal > macd: đường nhanh xuyên qua đường chậm từ trên xuống dưới

Hình chữ nhật thay đổi màu sắc để xác định mức độ xu hướng:

  • histA_IsUp = Cột hình dọc tăng lên và lớn hơn 0, biểu thị tăng cường tăng lên
  • histA_IsDown = Cột đồ hình vuông giảm nhỏ hơn và lớn hơn 0, đại diện cho sự suy giảm sức mạnh tăng
  • Đọc thêm

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

  1. Sử dụng đường hai chiều để xác định hướng xu hướng trung hạn, tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn

  2. Chỉ số MACD hỗ trợ xác định xu hướng và cường độ ngắn hạn, tăng khả năng kiếm lợi nhuận

  3. Sự thay đổi màu sắc của đồ thị thẳng đứng xác định kích thước, có thể nắm bắt thời gian nhập cảnh tốt hơn

  4. Các điểm giao nhau được đánh dấu bằng màu nền.

  5. Có thể tùy chỉnh chu kỳ trung bình để thích ứng với các môi trường thị trường khác nhau

  6. Có thể điều chỉnh các tham số MACD để tối ưu hóa hiệu quả của chỉ số

  7. Cung cấp nhiều cách xác nhận nhập cảnh: hướng đồng tuyến, giao điểm, đột phá hình dạng

Rủi ro chiến lược

  1. Bi-equilibrium đánh giá xu hướng trung hạn không nhạy cảm với biến động ngắn hạn, có thể bỏ lỡ cơ hội đường ngắn

  2. Các tham số MACD được thiết lập không đúng, chỉ số không hiệu quả, phát ra tín hiệu sai

  3. Chỉ với đường trung bình và tín hiệu MACD, có một số mù lòa

  4. Không tính đến các cơ chế rút khỏi lỗ hổng, có nguy cơ mở rộng lỗ hổng

  5. Thiếu quản lý quỹ và kiểm soát vị trí nghiêm ngặt

Các giải pháp có thể:

  1. Kết hợp với các chỉ số khác giới hạn phạm vi biến động ngắn hạn, kiểm soát rủi ro

  2. Tối ưu hóa các tham số MACD để kiểm tra hiệu quả của các thị trường khác nhau

  3. Thêm hình dạng, các yếu tố như Momentum để xác nhận tín hiệu

  4. Thiết lập các cơ chế ngăn chặn thiệt hại để tránh tổn thất quá lớn

  5. Tham gia mô-đun quản lý tiền để kiểm soát các vị trí đơn theo quy mô tiền

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

  1. Kiểm tra tối ưu hóa các tham số đường trung bình để phù hợp với nhiều tình huống thị trường hơn

  2. Thử các loại đường trung bình khác nhau như VWAP, đường trung bình và các loại khác

  3. Cân nhắc tăng lượng giao thông, tránh đột phá giả

  4. Kết hợp các chỉ số như RSI, xác nhận quá mua quá bán

  5. Thiết lập các cơ chế ngăn chặn thiệt hại, chẳng hạn như ngăn chặn di chuyển, ngăn chặn rung động

  6. Tham gia vào cơ chế quản lý vị trí, kiểm soát vị trí đơn theo quy mô vốn

  7. Có thể xem xét tối ưu hóa tham số kết hợp với thuật toán học máy

  8. Chiến lược mở rộng Universe, hướng đi đầu tư sâu hơn trong danh mục đầu tư

Tóm tắt

Chiến lược này tích hợp phán đoán xu hướng hai đường đồng nhất và chỉ số động lực MACD, thêm các đặc điểm hình dạng, xây dựng một chiến lược giao dịch trung hạn tương đối ổn định. Ưu điểm cốt lõi là nắm bắt hướng xu hướng chính và tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn.

Mã nguồn chiến lược
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1")
//Plot Inputs
res           = input.timeframe("",  "Indicator TimeFrame")
fast_length   = input.int(title="Fast Length", defval=12)
slow_length   = input.int(title="Slow Length", defval=26)
src           = input.source(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal    = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Show Plots T/F
show_macd     = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10")
show_macd_LW  = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11")
show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11")
show_Hist     = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20")
show_hist_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20")
show_trend    = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30")
show_HB       = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40")
show_cross    = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50")
show_dots     = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60")
show_dots_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60")

//show_trend    = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5")
// MACD Lines colors
col_macd      = input.color(#FF6D00, "MACD Line  ",  group="Color Settings", inline="CS1")
col_signal    = input.color(#2962FF, "Signal Line  ",  group="Color Settings", inline="CS1")
col_trnd_Up   = input.color(#4BAF4F, "Trend Up      ",  group="Color Settings", inline="CS2")
col_trnd_Dn   = input.color(#B71D1C, "Trend Down    ",  group="Color Settings", inline="CS2")
// Histogram Colors
col_grow_above = input.color(#26A69A, "Above   Grow",  group="Histogram Colors", inline="Hist10")
col_fall_above = input.color(#FF5252, "Fall",  group="Histogram Colors", inline="Hist10")
col_grow_below = input.color(#FF5252, "Below Grow",  group="Histogram Colors", inline="Hist20")
col_fall_below = input.color(#f8f524, "Fall",  group="Histogram Colors", inline="Hist20")
// Alerts T/F Inputs
alert_Long    = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10")
alert_Short   = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10")
alert_Long_A  = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20")
alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20")
// Calculating
fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length))
slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length))
macd = fast_ma - slow_ma
signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length))
hist = macd - signal
// MACD Trend and Cross Up/Down conditions
trend_up   = macd > signal
trend_dn   = macd < signal
cross_UP   = signal[1] >= macd[1] and signal < macd
cross_DN   = signal[1] <= macd[1] and signal > macd
cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0
cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0
// Condition that changes Color of MACD Line if Show Trend is turned on..
trend_col = show_trend  and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend  and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na 

//Var Statements for Histogram Color Change
var bool histA_IsUp = false
var bool histA_IsDown = false
var bool histB_IsDown = false
var bool histB_IsUp = false
histA_IsUp   := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0
histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0
histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0
histB_IsUp   := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0

hist_col =  histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver 

// Plot Statements
//Background Color
bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false)
bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false)
//Highlight Price Bars
barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false)
barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false)
//Regular Plots
plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW)
plot(show_macd  and signal ? signal : na, title="Signal", color=color.new(col_signal, 0),  style=plot.style_line ,linewidth=show_signal_LW)
plot(show_macd  and macd ? macd : na, title="MACD", color=color.new(trend_col, 0),  style=plot.style_line ,linewidth=show_macd_LW)
hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false)
plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)

//Alerts
if alert_Long and cross_UP
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short and cross_DN
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close)
//Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0
if alert_Long_A and cross_UP_A
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short_B and cross_DN_B
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close)


if (histA_IsUp)
	strategy.entry("buy", strategy.long, comment="buy")
if (histA_IsDown)
	strategy.entry("sell", strategy.short, comment="sell")