Chiến lược động lượng phán đoán xu hướng giá và khối lượng nâng cao

MACD ATR MA EMA SMA
Ngày tạo: 2025-01-10 15:40:37 sửa đổi lần cuối: 2025-01-10 15:40:37
sao chép: 0 Số nhấp chuột: 346
1
tập trung vào
1617
Người theo dõi

Chiến lược động lượng phán đoán xu hướng giá và khối lượng nâng cao

Tổng quan

Chiến lược này là một hệ thống giao dịch dựa trên chỉ báo MACD và mối quan hệ giữa khối lượng và giá. Nó xác định điểm đảo chiều của xu hướng thị trường bằng cách quan sát những thay đổi về hình dạng của biểu đồ MACD. Chiến lược này áp dụng cơ chế dừng lỗ và dừng lãi động, đồng thời sử dụng chỉ báo ATR để thích ứng với biến động của thị trường và kiểm soát rủi ro hiệu quả.

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

Logic cốt lõi của chiến lược này dựa trên những thay đổi theo cột sâu và nông của chỉ báo MACD, kết hợp với hệ thống đường trung bình động kép EMA và SMA. Khi biểu đồ MACD chuyển từ tối sang sáng, điều này cho thấy động lượng đang thay đổi và hệ thống sẽ giao dịch tại thời điểm này. Cụ thể:

  1. Tính giá trị MACD bằng cách sử dụng đường trung bình động nhanh (12) và chậm (26)
  2. MACD được làm mịn bằng đường tín hiệu 9 chu kỳ
  3. Quan sát sự thay đổi màu sắc của biểu đồ MACD
  4. Kết hợp chỉ báo ATR 14 kỳ để thiết lập chốt lời và dừng lỗ động

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

  1. Sự kết hợp chỉ báo khoa học và hợp lý, MACD có thể nắm bắt xu hướng hiệu quả và ATR có thể thích ứng với biến động
  2. Cài đặt dừng lợi nhuận và dừng lỗ linh hoạt và có thể được điều chỉnh theo các đặc điểm khác nhau của thị trường thông qua nhiều thông số
  3. Tín hiệu giao dịch rõ ràng và thời điểm vào lệnh có thể được đánh giá trực quan thông qua sự thay đổi màu sắc của biểu đồ thanh
  4. Có tính đến cả giao dịch hai chiều dài hạn và ngắn hạn, tăng khả năng áp dụng các chiến lược và cơ hội lợi nhuận

Rủi ro chiến lược

  1. MACD là một chỉ báo trễ có thể bỏ lỡ điểm vào tốt nhất cho những biến động nhanh của thị trường
  2. Tín hiệu sai có thể được tạo ra trong một thị trường biến động, dẫn đến giao dịch thường xuyên
  3. Cài đặt ATR không đúng có thể khiến lệnh dừng lỗ quá lỏng hoặc quá chặt
  4. Cần thiết lập quản lý quỹ hợp lý để tránh tình trạng thua lỗ đơn lẻ quá mức

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

  1. Giới thiệu tín hiệu xác nhận âm lượng để cải thiện độ tin cậy của tín hiệu
  2. Đã thêm bộ lọc xu hướng để giảm tín hiệu sai trong thị trường biến động
  3. Tối ưu hóa bội số dừng lợi nhuận và dừng lỗ, có thể điều chỉnh linh hoạt theo các khoảng thời gian khác nhau
  4. Đã thêm bộ lọc biến động để giảm tần suất giao dịch trong thời kỳ biến động cao
  5. Hãy cân nhắc việc giới thiệu bộ lọc thời gian để tránh giao dịch trong những thời kỳ bất lợi

Tóm tắt

Đây là một chiến lược toàn diện kết hợp chỉ báo phân tích kỹ thuật cổ điển MACD với các phương pháp kiểm soát rủi ro hiện đại. Nắm bắt sự thay đổi trong động lực thị trường bằng cách quan sát những thay đổi về hình dạng của biểu đồ MACD và sử dụng ATR để kiểm soát rủi ro động. Chiến lược được thiết kế hợp lý, logic hoạt động rõ ràng và có giá trị thực tiễn tốt. Thông qua quá trình tối ưu hóa và cải tiến liên tục, chiến lược này dự kiến ​​sẽ đạt hiệu suất tốt hơn trong chiến đấu thực tế.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy(title="軒割MACD 空心量能不足策略", shorttitle="軒割MACD 空心量能不足策略", overlay=true)

//=== 1) 參數 ===//
fast_length   = input.int(title="Fast Length",        defval=12)
slow_length   = input.int(title="Slow Length",        defval=26)
src           = input.source(title="MACD Source",     defval=close)
signal_length = input.int(title="Signal Smoothing",   defval=9,  minval=1, maxval=50)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA","EMA"])
sma_signal    = input.string(title="Signal MA Type",     defval="EMA", options=["SMA","EMA"])

// 啟用多單 / 空單
useLong       = input.bool(title="啟用多單?(底部紅色)", defval=true)
useShort      = input.bool(title="啟用空單?(頂部綠色)", defval=true)

// 止盈倍數 (1~10倍 ATR)
tpATRmult     = input.int(title="止盈 ATR 倍數 (1~10)", defval=10, minval=1, maxval=500)
// 止損倍數 (1~10倍 ATR)
slATRmult     = input.int(title="止損 ATR 倍數 (1~10)", defval=3, minval=1, maxval=500)

//=== 2) MACD 計算 ===//
fast_ma  = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma  = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd     = fast_ma - slow_ma
signal   = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist     = macd - signal

//=== 3) 判斷深色/淺色(用於變化訊號)===//
darkGreen  = hist >= 0 and hist <= hist[1]   // 上方,柱子縮小或持平
lightGreen = hist >= 0 and hist >  hist[1]   // 上方,柱子變大
darkRed    = hist <  0 and hist <= hist[1]   // 下方,柱子(絕對值)變大或持平
lightRed   = hist <  0 and hist >  hist[1]   // 下方,柱子(絕對值)變小

// 由「深 → 淺」是否發生在上一根
colorChangeToLightGreen = darkGreen[1] and lightGreen
colorChangeToLightRed   = darkRed[1]   and lightRed

//=== 4) ATR 計算 (用於止盈止損) ===//
atrPeriod  = 14
atrValue   = ta.atr(atrPeriod)

//=== 5) 多單策略:深紅 → 淺紅 (底部紅色) ===//
if useLong and colorChangeToLightRed
    // 以當前 K 線 low - ATR倍數 作為多單止損
    longStopLoss   = low - (slATRmult * atrValue)
    // 以當前 close + ATR倍數 作為多單止盈
    longTakeProfit = close + (tpATRmult * atrValue)

    // 進多單
    strategy.entry("Long Entry", strategy.long, comment="多", qty=1)
    strategy.exit("平多", "Long Entry", stop=longStopLoss, limit=longTakeProfit)

//=== 6) 空單策略:深綠 → 淺綠 (頂部綠色) ===//
if useShort and colorChangeToLightGreen
    // 以當前 K 線 high + ATR倍數 作為空單止損
    shortStopLoss   = high + (slATRmult * atrValue)
    // 以當前 close - ATR倍數 作為空單止盈
    shortTakeProfit = close - (tpATRmult * atrValue)

    // 進空單
    strategy.entry("Short Entry", strategy.short, comment="空", qty=1)
    strategy.exit("平空", "Short Entry", stop=shortStopLoss, limit=shortTakeProfit)

//=== 7) 繪製 MACD 與直方圖 ===//
hline(0, "Zero Line", color=color.new(#787B86, 50))

// 長條圖顏色:
//   - 上方 (hist >= 0) 時:hist 比前一根大 (淺綠) 或小 (深綠)
//   - 下方 (hist < 0)  時:hist 比前一根大 (淺紅) 或小 (深紅)
plot(hist,title="Histogram",style=plot.style_columns,color = hist >= 0? (hist > hist[1]  ? #26A69A : #B2DFDB)   : (hist > hist[1]  ? #FFCDD2 : #FF5252)  )

// 繪製 MACD 與 Signal
plot(macd,   title="MACD",   color=#2962FF)
plot(signal, title="Signal", color=#FF6D00)