Chiến lược giao dịch định lượng MACD

Tác giả:ChaoZhang, Ngày: 2023-12-19 15:11:57
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số MACD để xây dựng tín hiệu giao dịch vị trí dài khi MACD dưới một mức nhất định để tận dụng các cơ hội đảo ngược trung bình.

Chiến lược logic

Một tín hiệu dài được tạo ra khi đường MACD nằm dưới đường SIGNAL và giá trị tuyệt đối của MACD dưới -0.00025. Sau khi thực hiện một vị trí dài, nếu đường MACD vượt qua trên đường SIGNAL một lần nữa, vị trí sẽ được đóng.

Chiến lược này sử dụng chỉ số MACD để phát hiện các vùng bán quá mức. Theo lý thuyết trung bình động, có xác suất đảo ngược trung bình trong ngắn hạn, và tín hiệu dài được thiết lập dựa trên xác suất này.

Ưu điểm

  1. Sử dụng chỉ số MACD để đánh giá mức bán quá mức, có độ tin cậy nhất định.
  2. Các tín hiệu giao dịch đơn giản và các quy tắc dễ thực hiện.
  3. Thời gian giữ dài có nghĩa là giao dịch ít thường xuyên hơn, giảm chi phí giao dịch và trượt.

Rủi ro

  1. Rủi ro của sự đảo ngược thất bại có nghĩa là nó sẽ dẫn đến tổn thất nếu không có sự đảo ngược xảy ra.
  2. Các tín hiệu không hợp lệ do lựa chọn tham số MACD kém.

Nguy cơ này có thể được giảm thiểu thông qua tối ưu hóa tham số.

Những cải tiến

  1. Tối ưu hóa các thông số MACD để tìm kết hợp tốt nhất.
  2. Kiểm tra các khoảng thời gian giữ khác nhau để tìm thời gian tối ưu.
  3. Thêm các cơ chế dừng lỗ.

Tóm lại

Chiến lược này sử dụng xác suất đảo ngược trung bình từ mức bán quá mức được xác định bởi chỉ số MACD để tạo ra tín hiệu dài và lợi nhuận thông qua thời gian giữ dài. Tối ưu hóa các tham số MACD và thêm stop loss cải thiện độ tin cậy. Tóm lại, nó sử dụng các chỉ số và quy tắc tương đối đơn giản để xây dựng một chiến lược định lượng dễ hiểu và thực hiện.


//@version=3
strategy(title="MACD - EURUSD", shorttitle="MACD EURUSD")

// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

longCond = crossover(macd, signal) and macd < -0.00025
exitLong = crossover(macd, hist)


strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)

Thêm nữa