Chiến lược đột phá hành động giá Dual MACD theo sau

MACD ATR
Ngày tạo: 2024-11-25 11:15:50 sửa đổi lần cuối: 2024-11-25 11:15:50
sao chép: 1 Số nhấp chuột: 532
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá hành động giá Dual MACD theo sau

Tổng quan

Đây là một chiến lược giao dịch kết hợp các chỉ số MACD kép và phân tích hành vi giá. Chiến lược xác định xu hướng thị trường bằng cách quan sát sự thay đổi màu sắc của đường thẳng MACD kép trong chu kỳ 15 phút, đồng thời tìm kiếm hình dạng đứt phá mạnh mẽ trong chu kỳ 5 phút và xác nhận tín hiệu phá vỡ trong chu kỳ 1 phút.

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

Chiến lược sử dụng hai bộ chỉ số MACD với các tham số khác nhau ((34/144/9 và 100/200/50) để xác nhận xu hướng thị trường. Khi cả hai đồ thị MACD đều hiển thị xu hướng màu giống nhau, hệ thống sẽ tìm kiếm hình dạng gạch mạnh trên đồ thị 5 phút, được đặc trưng bởi các thực thể lớn hơn 1,5 lần so với đường bóng. Một khi tìm thấy gạch mạnh, hệ thống sẽ giám sát trên đồ thị 1 phút để xem có phá vỡ hay không.

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

  1. Phân tích đa chu kỳ: kết hợp ba chu kỳ thời gian 15 phút, 5 phút và 1 phút để tăng độ tin cậy tín hiệu
  2. Xác định xu hướng: sử dụng xác thực chéo MACD kép để giảm tín hiệu giả
  3. Phân tích hành vi giá: Xác định mức giá quan trọng thông qua hình thức tăng mạnh
  4. Quản lý rủi ro động: Cơ chế dừng lỗ thích ứng và theo dõi dừng dựa trên ATR
  5. Bộ lọc tín hiệu: Điều kiện nhập cảnh nghiêm ngặt giảm sai sót
  6. Mức độ tự động hóa cao: Giao dịch tự động hóa toàn bộ, giảm sự can thiệp của con người

Rủi ro chiến lược

  1. Rủi ro đảo ngược xu hướng: Có thể có đột phá giả trong thị trường biến động mạnh
  2. Rủi ro trượt: Các giao dịch tần số cao có thể bị ảnh hưởng bởi trượt trong chu kỳ 1 phút
  3. Rủi ro giao dịch quá mức: tín hiệu thường xuyên có thể dẫn đến giao dịch quá mức
  4. Sự phụ thuộc vào môi trường thị trường: có thể không hoạt động tốt trong thị trường bất ổn Các biện pháp giảm thiểu:
  • Thêm bộ lọc xu hướng
  • Thiết lập ngưỡng biến động tối thiểu
  • Thêm giới hạn giao dịch
  • Giới thiệu cơ chế xác định môi trường thị trường

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

  1. Tối ưu hóa tham số MACD: Các tham số MACD có thể được điều chỉnh theo các đặc điểm thị trường khác nhau
  2. Tối ưu hóa Stop Loss: Xem xét thêm Stop Loss động dựa trên tỷ lệ biến động
  3. Bộ lọc thời gian giao dịch: thêm giới hạn cửa sổ thời gian giao dịch
  4. Quản lý vị trí: thực hiện cơ chế xây dựng và ra sân theo đợt
  5. Bộ lọc môi trường thị trường: Thêm chỉ số cường độ xu hướng
  6. Kiểm soát rút lui: giới thiệu cơ chế kiểm soát rủi ro dựa trên đường cong quyền lợi

Tóm tắt

Đây là một hệ thống chiến lược tổng hợp sử dụng phân tích kỹ thuật và quản lý rủi ro. Bảo đảm chất lượng giao dịch thông qua phân tích đa chu kỳ và lọc tín hiệu nghiêm ngặt, đồng thời sử dụng các cơ chế dừng động và theo dõi các cơ chế dừng để quản lý rủi ro hiệu quả. Chiến lược có khả năng thích ứng mạnh mẽ, nhưng vẫn cần được tối ưu hóa liên tục theo môi trường thị trường.

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

// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)

// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")

fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")

// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")

// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")

// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)

// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))

// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252

// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
    body = math.abs(close - open)
    tail = math.abs(high - low) - body
    body > tail * 1.5  // Ensure body is larger than the tail

// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na

// Check for new 15M candle and reset flags
if ta.change(time("15"))
    tradeExecuted := false      // Reset trade execution flag
    breakoutDetected := false  // Reset breakout detection
    if isStrongCandle(open[1], close[1], high[1], low[1])
        fiveMinuteHigh := high[1]
        fiveMinuteLow := low[1]
    else
        fiveMinuteHigh := na
        fiveMinuteLow := na

// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)

// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
    for i = 1 to 3
        if close1m[i] > fiveMinuteHigh and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdUptrend 
                // Open Long trade
                entryPrice := close
                stopLossPrice := close - (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Long", strategy.long)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

        else if close1m[i] < fiveMinuteLow and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdDowntrend
                // Open Short trade
                entryPrice := close
                stopLossPrice := close + (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Short", strategy.short)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0  // Long trade
    longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
    strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)

else if tradeExecuted and strategy.position_size < 0  // Short trade
    shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
    strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)

// Reset trade state when position is closed
if strategy.position_size == 0
    tradeExecuted := false
    entryPrice := na
    longTakeProfit := na
    shortTakeProfit := na