Chiến lược giao dịch ngắn hạn kết hợp hai đường trung bình động và MACD

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

Tổng quan

Chiến lược này kết hợp hai đường trung bình động, chỉ số stochastic và MACD để xác định các cơ hội giao dịch ngắn hạn, đó là một chiến lược giao dịch ngắn hạn tương đối cổ điển.

Nguyên tắc

Chiến lược này chủ yếu dựa trên các nguyên tắc sau:

  1. Sử dụng EMA 50 giai đoạn và 100 giai đoạn để xác định hướng xu hướng. EMA có thời gian ngắn hơn có thể phản ứng nhanh chóng với những thay đổi về giá cả. Việc vượt qua EMA 50 giai đoạn trên EMA 100 giai đoạn đại diện cho việc thiết lập vị trí dài; việc vượt qua xuống đại diện cho việc thiết lập vị trí ngắn.

  2. Sử dụng chênh lệch giữa MACD để xác định điểm nhập và thoát. Khi chênh lệch vượt trên 0, nó cho thấy sức mạnh tăng và dẫn đến bước vào dài; khi vượt dưới 0, nó cho thấy sức mạnh giảm và dẫn đến bước vào ngắn.

  3. Kết hợp chỉ số Stochastic RSI để đánh giá tình hình mua quá nhiều và bán quá nhiều. Chỉ số này kết hợp các lợi thế của KDJ và RSI, và có thể hiển thị các điều kiện mua quá nhiều và bán quá nhiều tốt. Khi nó thấp hơn 20, thị trường được bán quá nhiều và có thể được xem là bước vào dài kết hợp các chỉ số khác; khi nó cao hơn 80, thị trường được mua quá nhiều và có thể được xem là bước vào ngắn.

  4. Sau khi xác định hướng nhập cảnh, nếu 4 trong số 5 ngọn nến gần đây nhất có giá đóng chạm vào đường trung bình động, nó cho thấy có hỗ trợ / kháng cự xung quanh đường trung bình động và các vị trí có thể được mở.

  5. Sử dụng stop loss và take profit để quản lý rủi ro.

Ưu điểm

Những lợi thế của chiến lược này bao gồm:

  1. Sự kết hợp của nhiều chỉ số cải thiện tỷ lệ chiến thắng, sử dụng trung bình động, chỉ số mua quá mức / bán quá mức và chỉ số động lực cùng nhau.

  2. Các đường trung bình động ngắn có thể nắm bắt xu hướng và đảo ngược nhanh chóng. Các thông số MACD được tối ưu hóa để tạo ra các tín hiệu nhập chính xác.

  3. Các thông số RSI ngẫu nhiên được tối ưu hóa để xác định các điều kiện mua quá mức / bán quá mức tốt.

  4. Sử dụng hỗ trợ / kháng cự xung quanh các đường trung bình động để kiểm soát thời gian tránh bị mắc kẹt bởi các sự đột phá giả.

  5. Stop loss hợp lý và lấy lợi nhuận có hiệu quả kiểm soát rủi ro cho mỗi giao dịch.

Rủi ro

Có một số rủi ro của chiến lược này:

  1. Không thể hoàn toàn tránh được tổn thất gây ra bởi những vụ trốn thoát giả.

  2. Sự khác biệt có thể xảy ra giữa các chỉ số, gây ra các tín hiệu giao dịch không nhất quán.

  3. Đặt dừng lỗ và lấy lợi nhuận cố định có thể không thích nghi với những thay đổi trên thị trường.

  4. Mã phức tạp với nhiều thông số là khó để tối ưu hóa.

Các giải pháp là:

  1. Tối ưu hóa các thông số để cải thiện chất lượng tín hiệu và giảm khả năng thoát giả.

  2. Đặt ưu tiên giữa các chỉ số để tránh xung đột.

  3. Sử dụng stop loss động và lấy lợi nhuận dựa trên phạm vi ATR.

  4. Đơn giản hóa logic và trích xuất các thông số cốt lõi để thử nghiệm và tối ưu hóa.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kiểm tra và tìm ra sự kết hợp tối ưu của các giai đoạn trung bình động và các thông số MACD.

  2. Kiểm tra các chỉ số mua quá mức / bán quá mức khác nhau để thay thế Stochastic RSI.

  3. Hãy thử dừng lỗ động và lấy lợi nhuận, dừng lại để làm cho quản lý rủi ro thông minh hơn.

  4. Thêm các điều kiện lọc như tăng âm lượng để cải thiện chất lượng tín hiệu.

  5. Tối ưu hóa logic đầu vào để tránh sự đột phá không hiệu quả, sử dụng nhiều chỉ số hơn để xác định xu hướng.

  6. Đặt giới hạn dừng lỗ theo kích thước tài khoản, số lượng giao dịch mỗi ngày để kiểm soát rủi ro tổng thể.

Tóm lại

Chiến lược này tích hợp các lợi thế của nhiều chỉ số, và rất thực tế cho giao dịch ngắn hạn. Bằng cách tiếp tục tối ưu hóa tham số, logic nhập khẩu nghiêm ngặt và quản lý rủi ro được cải thiện, sự ổn định và lợi nhuận có thể được tăng thêm. Nó phù hợp với các nhà giao dịch ngắn hạn với một số kinh nghiệm, nhưng rủi ro phải được kiểm soát để tránh tổn thất lớn.


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

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.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_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, 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=plot.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)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Thêm nữa