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


Ngày tạo: 2023-10-09 16:47:42 sửa đổi lần cuối: 2023-10-09 16:47:42
sao chép: 0 Số nhấp chuột: 749
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này sử dụng tổng hợp hai đường trung bình, chỉ số ngẫu nhiên và chỉ số MACD để xác định cơ hội giao dịch ngắn hạn, thuộc chiến lược giao dịch ngắn hạn cổ điển.

Nguyên tắc

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

  1. Sử dụng đường trung bình EMA của 50 chu kỳ và 100 chu kỳ để đánh giá xu hướng. Chu kỳ trung bình EMA ngắn hơn, có thể phản ứng nhanh với sự thay đổi giá. Đi 100 đường trung bình trên đường chu kỳ 50 đại diện cho nhập cảnh nhiều hơn; Đi 100 đường trung bình dưới đường chu kỳ 50 đại diện cho nhập cảnh trống.

  2. Sử dụng chỉ số MACD để xác định thời gian mua và bán. Khi chênh lệch từ trên đến 0 hiển thị tăng cường lực lượng đa đầu, làm nhiều; Khi chênh lệch từ dưới đến 0 tăng cường lực lượng đầu trống, làm trống.

  3. Kết hợp với chỉ số Stochastic RSI để xác định xem có quá mua hay quá bán không. Chỉ số này kết hợp các lợi thế của chỉ số KDJ và chỉ số RSI, có thể cho thấy tình trạng quá mua quá bán của thị trường. Khi chỉ số thấp hơn 20 là quá bán, kết hợp với các chỉ số khác là quá bán; Khi chỉ số cao hơn 80 là quá mua, kết hợp với các chỉ số khác là lỗ.

  4. Sau khi xác định hướng mở vị trí, bạn có thể mở vị trí nếu 4 trong số 5 đường K gần nhất chạm vào đường trung bình, cho thấy có hỗ trợ hoặc áp lực gần đường trung bình.

  5. Sử dụng điểm dừng để quản lý rủi ro.

Ưu điểm

Chiến lược này có những ưu điểm sau:

  1. Giao thức đa chỉ số, sử dụng đường trung bình tổng hợp, chỉ số bán tháo và chỉ số năng lượng, tăng tỷ lệ thắng giao dịch.

  2. Chu kỳ đường trung bình ngắn hơn, có thể nắm bắt xu hướng và đảo ngược nhanh chóng. Các tham số MACD được tối ưu hóa, xác định thời gian mua và bán chính xác.

  3. Stochastic RSI có các tham số được tối ưu hóa để xác định quá mua quá bán.

  4. Sử dụng áp lực hỗ trợ gần đường trung bình để kiểm soát nhịp điệu, tránh bị mắc kẹt trong đột phá không hiệu quả.

  5. Giới thiệu các phương pháp quản lý rủi ro giao dịch

Rủi ro

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

  1. Tuy nhiên, các nhà khoa học vẫn chưa thể hoàn toàn tránh được những tổn thất do đột nhập giả mạo.

  2. Các cặp đa chỉ số có thể bị lệch, dẫn đến tín hiệu giao dịch không đồng nhất.

  3. Các điểm dừng cố định có thể không thích ứng với sự thay đổi của thị trường.

  4. Có thể thực hiện mã phức tạp, nhiều tham số, và không dễ dàng tối ưu hóa.

Các giải pháp đối phó với rủi ro như sau:

  1. Tối ưu hóa tham số, cải thiện chất lượng tín hiệu, giảm khả năng phá vỡ giả.

  2. Thiết lập ưu tiên giữa các chỉ số để tránh xung đột tín hiệu.

  3. Để theo dõi động thái dừng lỗ, thiết lập phạm vi dừng lỗ theo các chỉ số như ATR.

  4. Đơn giản hóa logic mã, trích xuất các tham số cốt lõi để kiểm tra và tối ưu hóa.

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. Kiểm tra chu kỳ đường trung bình, tham số MACD để tìm các tham số kết hợp tốt nhất.

  2. Kiểm tra các chỉ số khác nhau để thay thế Stochastic RSI.

  3. Hãy thử các phương pháp như dừng lỗ động, dừng lỗ di động để quản lý lỗ hổng thông minh hơn.

  4. Thêm các điều kiện lọc, chẳng hạn như tăng khối lượng giao dịch, để cải thiện chất lượng tín hiệu.

  5. Tối ưu hóa logic mở vị trí, ngăn chặn phá vỡ không hiệu quả.

  6. Thiết lập giới hạn dừng lỗ cho số tiền trong tài khoản, số lần giao dịch mỗi ngày, và kiểm soát rủi ro tổng thể.

Tóm tắt

Chiến lược này tích hợp các lợi thế của nhiều chỉ số và có tính thực tiễn mạnh mẽ trong giao dịch ngắn hạn. Bằng cách tiếp tục tối ưu hóa các tham số, logic mở vị trí nghiêm ngặt và cải thiện chiến lược quản lý lỗ hổng, bạn có thể nâng cao hơn nữa sự ổn định và khả năng lợi nhuận của chiến lược. Chiến lược này phù hợp cho người giao dịch ngắn hạn có một số cơ sở, nhưng cần chú ý đến kiểm soát rủi ro để tránh thua lỗ lớn.

Mã nguồn chiến lược
/*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 )