Chiến lược giao dịch MACD Crossover Moving Average

Tác giả:ChaoZhang, Ngày: 2024-02-22 16:25:13
Tags:

img

Tổng quan

Chiến lược giao dịch chéo trung bình động MACD là một chiến lược giao dịch định lượng theo dõi các tình huống chéo của trung bình di chuyển theo cấp số nhân ngắn hạn và dài hạn (EMA) và thực hiện các giao dịch mua và bán khi chéo vàng và chéo chết xảy ra.

Chiến lược logic

Chiến lược này chủ yếu dựa trên EMA 12 ngày, EMA 26 ngày và chỉ số MACD.

  1. Tính toán EMA 12 ngày và EMA 26 ngày.
  2. Tính toán MACD (tức là EMA 12 ngày trừ EMA 26 ngày).
  3. Tính toán đường EMA 9 ngày của MACD dưới dạng đường tín hiệu.
  4. Khi MACD vượt qua đường tín hiệu, một tín hiệu mua được tạo ra.
  5. Khi MACD giảm xuống dưới đường tín hiệu, một tín hiệu bán được tạo ra.
  6. Thực hiện giao dịch mua hoặc bán tương ứng vào cuối ngọn nến thứ hai sau khi tín hiệu được tạo ra.

Ngoài ra, chiến lược này cũng đặt ra một số điều kiện lọc:

  1. Thời gian giao dịch là thời gian không đóng cửa của mỗi ngày giao dịch.
  2. Giá trị tuyệt đối của sự khác biệt giữa MACD và đường tín hiệu cần phải lớn hơn 0,08.
  3. Chỉ một hướng vị trí được phép tại một thời điểm.

Phân tích lợi thế

Chiến lược này kết hợp đường chéo trung bình động và chỉ số MACD, có thể nắm bắt hiệu quả các điểm biến động của xu hướng thị trường ngắn hạn và trung hạn.

  1. Các quy tắc chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện.
  2. Các thông số chỉ số được tối ưu hóa cho hiệu suất tương đối ổn định.
  3. Nó tính đến việc theo dõi xu hướng trung hạn và ngắn hạn và thoát khỏi lỗ dừng kịp thời.
  4. Logic giao dịch nghiêm ngặt để tránh giao dịch không hợp lệ.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Rủi ro quá phù hợp với dữ liệu kiểm tra ngược; ứng dụng thực tế có thể yêu cầu điều chỉnh tham số và ngưỡng.
  2. Rủi ro chi phí trượt cao do giao dịch thường xuyên.
  3. Rủi ro mất mát do không thoát đúng thời điểm khi xu hướng đảo ngược.
  4. Tăng cường rủi ro đòn bẩy vốn có trong giao dịch định lượng.

Phương pháp giảm thiểu tương ứng:

  1. Tối ưu hóa các tham số và điều chỉnh ngưỡng một cách năng động.
  2. Nới lỏng các quy tắc giao dịch phù hợp để giảm giao dịch không cần thiết.
  3. Kết hợp nhiều chỉ số để đánh giá tín hiệu đảo ngược.
  4. Kiểm soát chặt chẽ vị trí và đòn bẩy.

Hướng dẫn tối ưu hóa

Các khía cạnh chính để tối ưu hóa chiến lược này bao gồm:

  1. Kiểm tra các kết hợp trung bình động chu kỳ dài hơn để tìm các thông số tối ưu.
  2. Thêm các yếu tố cơ bản như hiệu suất tài chính, các sự kiện quan trọng v.v. như bộ lọc.
  3. Kết hợp nhiều chỉ số hơn để xác định thời gian đảo ngược xu hướng, như Bollinger Bands, KDJ vv.
  4. Phát triển các cơ chế dừng lỗ. Tự động cắt giảm lỗ khi lỗ đạt đến các điểm dừng lỗ được đặt trước.
  5. Thêm tỷ lệ rút tiền để kiểm soát rút tiền tối đa.

Tóm lại

Chiến lược giao dịch đường chéo MACD tạo ra các tín hiệu giao dịch thông qua việc theo dõi xu hướng đơn giản và kiểm soát hiệu quả rủi ro với các điều kiện lọc thích hợp. Đây là một chiến lược giao dịch định lượng hiệu quả. Chiến lược có thể được cải thiện theo những cách như tối ưu hóa tham số, thêm cơ chế dừng lỗ, kết hợp nhiều chỉ số phụ trợ hơn.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMMA", max_bars_back = 200)

var up1 = #26A69A
var up2 = #B2DFDB
var down1 = #FF5252
var down2 = #FFCDD2
var confirmationLength = 2

var earliest = timestamp("20 Jan 2024 00:00 +0000")

// Regn u
shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 26)
macd = shortEMA - longEMA
signal = ta.ema(macd, 9)
delta = macd - signal
absDelta = math.abs(delta)
previousDelta = delta[1]

signalCrossover = ta.crossover(macd, signal)
signalCrossunder = ta.crossunder(macd, signal)

harskiftetdag = hour(time[confirmationLength]) > hour(time)

enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08)
exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal)

enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08)
exitShortSignal = signalCrossover[confirmationLength] and (macd > signal)

// Så er det tid til at købe noe
qty = math.floor(strategy.equity / close)

if time >= earliest and not harskiftetdag
    if exitLongSignal 
        strategy.close("long")
    else if enterLongSignal
        strategy.close("short")
        strategy.entry("long", strategy.long, qty = qty)

    if exitShortSignal
        strategy.close("short")
    else if enterShortSignal
        strategy.close("long")
        strategy.entry("short", strategy.short, qty = qty)

// Så er det tid til at vise noe

plot(macd, color=color.blue)
plot(signal, color=color.orange)

// bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100))
// bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100))

histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2)

plot(
     delta,
     style=plot.style_columns,
     color=histogramColor
     )

Thêm nữa