Xu hướng MACD theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-16 17:42:09
Tags:

img

Tổng quan

Chiến lược này thực hiện xu hướng sau khi giao dịch trên chỉ số MACD. Nó xác định hướng xu hướng bằng cách sử dụng MACD và với stop loss động để khóa lợi nhuận.

Chiến lược logic

  1. Tính toán chỉ số MA nhanh, MA chậm và MACD. MA nhanh sử dụng EMA 12 giai đoạn, MA chậm sử dụng EMA 26 giai đoạn.

  2. Thiết lập đường mua và bán. Tạo tín hiệu mua khi MACD vượt qua đường mua, tạo tín hiệu bán khi MACD vượt qua đường bán.

  3. Đặt stop loss động sau khi mở vị trí.

  4. Vị trí đóng khi stop loss được kích hoạt hoặc tín hiệu đảo ngược xuất hiện.

Phân tích lợi thế

  1. Sử dụng MACD để xác định hướng xu hướng có thể theo dõi xu hướng hiệu quả.

  2. Đặt lỗ dừng động có thể liên tục khóa lợi nhuận và tránh tổn thất lớn hơn.

  3. Logic chiến lược đơn giản và rõ ràng, dễ hiểu và tự động hóa cho giao dịch lượng.

Phân tích rủi ro

  1. MACD có hiệu ứng chậm, có thể bỏ lỡ sự đảo ngược xu hướng ngắn hạn.

  2. Đặt dừng lỗ quá lỏng lẻo có thể bỏ lỡ một số lợi nhuận, quá chặt chẽ có thể dừng sớm.

  3. Các thông số MACD và đường mua / bán cần kiểm tra và tối ưu hóa liên tục.

  4. Làm việc tốt hơn trong thị trường xu hướng, có thể có lỗ trong thị trường hỗn loạn.

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

  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 phương pháp dừng mất mát khác nhau, chẳng hạn như điểm cố định, dựa trên ATR v.v.

  3. Thêm các điều kiện lọc bằng cách sử dụng các chỉ số khác để tránh các tín hiệu sai, ví dụ: Bollinger Bands, RSI v.v.

  4. Kết hợp với các công cụ xác định xu hướng, điều chỉnh động các thông số chiến lược dựa trên xu hướng so với thị trường giới hạn phạm vi.

Tóm lại

Chiến lược này có logic rõ ràng sử dụng MACD để theo dõi xu hướng và stop loss động để khóa lợi nhuận. Nó có thể theo dõi hiệu quả các thị trường xu hướng. Nhưng MACD có vấn đề chậm trễ, và điểm stop loss cần được tối ưu hóa. Bước tiếp theo là kiểm tra thêm các thông số, tối ưu hóa cơ chế stop loss, thêm các bộ lọc với các chỉ số khác, để làm cho nó mạnh mẽ trong các điều kiện thị trường khác nhau, cải thiện tính ổn định.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "EURUSD MACD", title = "EURUSD 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.0002)
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, linesell)
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