Chiến lược này là một hệ thống giao dịch dựa trên chỉ số MACD và mối quan hệ giá - khối lượng, xác định các điểm đảo ngược xu hướng thị trường bằng cách quan sát những thay đổi trong các mô hình biểu đồ MACD. Chiến lược sử dụng một cơ chế lấy lợi nhuận và dừng lỗ năng động bằng cách sử dụng chỉ số ATR để thích nghi với biến động thị trường và kiểm soát rủi ro hiệu quả.
Lý thuyết cốt lõi của chiến lược được xây dựng dựa trên sự thay đổi màu sắc của biểu đồ MACD, kết hợp với hệ thống EMA và SMA di chuyển kép. Khi biểu đồ MACD chuyển từ màu tối sang màu sáng, nó chỉ ra sự thay đổi động lực, kích hoạt hệ thống thực hiện giao dịch. Cụ thể: 1. Tính toán giá trị MACD bằng cách sử dụng trung bình di chuyển nhanh ((12) và chậm ((26) 2. MACD trơn tru với đường tín hiệu 9 giai đoạn 3. Theo dõi sự thay đổi độ sâu màu sắc trong biểu đồ MACD Đặt mục tiêu lợi nhuận năng động và dừng lỗ bằng cách sử dụng ATR 14 giai đoạn
Đây là một chiến lược toàn diện kết hợp chỉ số 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ó nắm bắt sự thay đổi động lực thị trường bằng cách quan sát sự thay đổi mô hình biểu đồ MACD trong khi sử dụng ATR để kiểm soát rủi ro năng động. Chiến lược được thiết kế tốt với logic hoạt động rõ ràng và giá trị thực tế. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược này cho thấy hứa hẹn cho hiệu suất tốt hơn trong điều kiện giao dịch thực tế.
/*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)