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


Ngày tạo: 2023-12-18 17:30:15 sửa đổi lần cuối: 2023-12-18 17:30:15
sao chép: 0 Số nhấp chuột: 722
1
tập trung vào
1621
Người theo dõi

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

Tổng quan

Chiến lược này được gọi là chiến lược giao dịch robot MACD. Chiến lược này kiểm soát rủi ro 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, đánh giá thời gian mua và bán thị trường, và theo dõi dừng lỗ.

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

Chiến lược này được phát triển chủ yếu dựa trên chỉ số MACD. Chỉ số MACD bao gồm đường nhanh và đường chậm, đường nhanh là trung bình ngắn hạn, đường chậm là trung bình 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.

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

Khi xác định thời gian mua, không chỉ nhìn vào dây chuyền nhanh và chậm, mà còn phải đánh giá xem giá trị tuyệt đối của MACD có lớn hơn đường mua tùy chỉnh hay không. Nếu đáp ứng, tín hiệu mua sẽ được phát ra, sử dụng theo dõi dừng để kiểm soát rủi ro.

Khi xác định thời gian bán, để đáp ứng các điều kiện của dây chết nhanh và dây tín hiệu đồng thời là tích cực, hãy phát tín hiệu bán và xóa vị trí.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Sử dụng chỉ số MACD để xác định thời gian mua và bán, độ tin cậy cao hơn
  2. Tăng đường tín hiệu để cải thiện chất lượng tín hiệu
  3. Theo dõi và kiểm soát rủi ro hiệu quả
  4. Dòng mua có thể tùy chỉnh độ nhạy của chiến lược
  5. Tất cả các điều kiện dựa trên chỉ số, không có ảnh hưởng 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ị tụt hậu, có thể bỏ lỡ cơ hội hoạt động ngắn
  2. Thiết lập điểm dừng sai có thể gây ra tổn thất không cần thiết
  3. Parameter Tuning cần 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à điểm trượt

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

Hướng tối ưu hóa

Chiến lược này 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 tín hiệu, chẳng hạn như KDJ, RSI, vv
  2. Thêm thuật toán học máy để xác định điểm mua và bán
  3. Sử dụng dừng động thay vì dừng tĩnh
  4. Tối ưu hóa kiểm tra các tham số MACD và đường mua
  5. Chiến lược điều chỉnh để tính đến tác động của chi phí giao dịch

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng có độ tin cậy cao. Bằng cách đánh giá xu hướng thông qua chỉ số MACD, thực hiện theo dõi rủi ro kiểm soát lỗ hổng, có thể nhận được lợi nhuận đầu tư ổn định. Bước tiếp theo là tối ưu hóa các tham số hơn nữa, kết hợp các chỉ số khác, kết hợp với máy học để tăng lợi nhuận của chiến lược.

Mã nguồ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)