
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ỗ.
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í.
Chiến lược này có một số lợi thế:
Chiến lược này cũng có một số rủi ro:
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.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
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.
/*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)