Chiến lược giao dịch robot MACD

Tác giả:ChaoZhang, Ngày: 2023-12-18 17:30:15
Tags:

img

Tổng quan

Chiến lược này được gọi là Chiến lược giao dịch robot MACD. Nó xác định thời gian mua và bán trên thị trường bằng cách tính toán mối quan hệ giữa đường nhanh và đường chậm của chỉ số MACD và áp dụng lệnh dừng lỗ để kiểm soát rủi ro.

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

Đường MACD là một chỉ số thị trường thông thường. Đường MACD bao gồm một đường nhanh và một đường chậm. Đường nhanh là một đường trung bình di chuyển ngắn hạn và đường chậm là một đường trung bình di chuyển dài hạn. Mối quan hệ giữa hai phản ánh tình trạng mua và bán trên thị trường. Khi đường nhanh vượt qua đường chậm, đó là tín hiệu mua, và khi nó vượt qua dưới, đó là tín hiệu bán.

Trong chiến lược này, đường nhanh và đường chậm được tính bằng thuật toán EMA tương ứng, và các khoảng thời gian có thể được tùy chỉnh. Để cải thiện chất lượng tín hiệu, một đường tín hiệu được thêm vào, sử dụng thuật toán EMA để làm mịn giá trị MACD một lần nữa.

Khi xác định thời gian mua, hãy kiểm tra không chỉ đường chéo vàng của đường nhanh và đường chậm, mà còn xem giá trị tuyệt đối của MACD có lớn hơn đường mua tùy chỉnh hay không.

Khi xác định thời gian bán, đường chết của đường nhanh và đường chậm và đường tín hiệu là tích cực được yêu cầu phải được đáp ứng cùng một lúc, sau đó một tín hiệu bán được phát hành để đóng vị trí.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Sử dụng chỉ số MACD để xác định tín hiệu giao dịch với độ tin cậy cao
  2. Tăng đường tín hiệu cải thiện chất lượng tín hiệu
  3. Trailing stop loss kiểm soát hiệu quả rủi ro
  4. Đường mua tùy chỉnh điều chỉnh độ nhạy của chiến lược
  5. Tất cả các điều kiện đều dựa trên tính toán chỉ số, không bị ảnh hưởng bởi các yếu tố bên ngoài

Phân tích rủi ro

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

  1. Chỉ số MACD bị chậm, có thể bỏ lỡ cơ hội giao dịch ngắn hạn
  2. Thiết lập điểm dừng lỗ không chính xác có thể gây ra tổn thất không cần thiết
  3. Parameter Tuning đòi hỏi rất nhiều thời gian để thử nghiệm và điều chỉnh
  4. Tác động của chi phí giao dịch và trượt

Những rủi ro này có thể được giảm bằng cách điều chỉnh các tham số một cách thích hợp, kết hợp các chỉ số khác, v.v.

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

Chiến lược có thể được tối ưu hóa theo các hướng sau:

  1. Kết hợp với các chỉ số khác để lọc các tín hiệu, chẳng hạn như KDJ, RSI, v.v.
  2. Thêm các thuật toán học máy để xác định các điểm nhập và xuất
  3. Sử dụng stop loss động thay vì stop loss tĩnh
  4. Kiểm tra và tối ưu hóa các thông số MACD và đường mua
  5. Xem xét tác động của chi phí giao dịch để điều chỉnh chiến lược

Kết luận

Nhìn chung, đây là một chiến lược theo xu hướng với độ tin cậy cao. Bằng cách đánh giá xu hướng thông qua chỉ số MACD và kiểm soát rủi ro bằng cách dừng lỗ, lợi nhuận đầu tư ổn định có thể đạt được. Bước tiếp theo là tối ưu hóa thêm các tham số, kết hợp các chỉ số khác và kết hợp học máy để cải thiện lợi nhuận chiến lược.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD MACD")
fastMA = input(title="Fast moving average",  defval = 12, minval = 7)
slowMA = input(title="Slow moving average",  defval = 26, minval = 7)
lastColor = yellow
[currMacd,_,_] = macd(close[0], fastMA, slowMA, 9)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9)
plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red
plot(currMacd, style = histogram, color = plotColor, linewidth = 3)
plot(0, title = "Zero line", linewidth = 1, color = gray)

//MACD
// 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)
///END OF MACD

//Long and Close Long Lines
linebuy = input(title="Enter Long", type=float, defval=-0.00045)
linesell = input(title="Close Long", type=float, defval=0.0001)

//Plot Long and Close Long Lines
plot(linebuy,color=green),plot(linesell,color=red)


//Stop Loss Input
sl_inp = input(0.05, title='Stop Loss %', type=float)/100


//Order Conditions
longCond = crossover(currMacd, linebuy)
exitLong = crossover(currMacd, signal) and signal > 0
stop_level = strategy.position_avg_price * (1 - sl_inp)


//Order Entries
strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)
strategy.exit("Stop Loss", stop=stop_level)

Thêm nữa