Trình dao động Stochastic trong ngày với chiến lược chéo trung bình động đôi

Tác giả:ChaoZhang, Ngày: 2023-10-27 17:00:04
Tags:

img

Tổng quan

Chiến lược này kết hợp hai đường chéo trung bình động và dao động Stochastic để xác định các cơ hội đảo ngược xu hướng cho giao dịch ngắn hạn hiệu quả. Nó đi ngắn khi giá đi vào khu vực mua quá mức và đi dài khi giá đi vào khu vực bán quá mức, để bắt sự đảo ngược xu hướng trung hạn.

Chiến lược logic

Chiến lược này dựa trên sự kết hợp giữa đường chéo trung bình động đôi và dao động Stochastic.

Đường chéo trung bình di chuyển kép bao gồm đường chéo trung bình di chuyển nhanh, đường chéo di chuyển chậm và đường chéo di chuyển cực chậm. Khi MA nhanh vượt trên MA chậm, đó là tín hiệu mua. Khi MA nhanh vượt dưới MA chậm, đó là tín hiệu bán.

Động cơ Stochastic chứa các giá trị %K và %D. %K cho thấy nơi đóng cửa hiện tại tương đối với giá cao nhất và thấp nhất trong N ngày qua. %D là trung bình di chuyển đơn giản của %K trong ngày M. Các giá trị trên 80 có nghĩa là mức mua quá mức và các giá trị dưới 20 có nghĩa là mức bán quá mức. Động cơ Stochastic có thể xác định các vùng mua quá mức / bán quá mức ngắn hạn.

Chiến lược này kết hợp chéo MA kép và dao động Stochastic. Nó tìm kiếm các tín hiệu đảo ngược xu hướng từ chéo MA kép khi Stochastic hiển thị mức mua quá mức / bán quá mức. Điều này nhằm mục đích bắt được sự đảo ngược xu hướng ngắn hạn.

Phân tích lợi thế

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

  1. Kết hợp chéo MA kép và dao động Stochastic để xác định cả sự đảo ngược xu hướng trung hạn và ngắn hạn.

  2. Sử dụng các tín hiệu mua quá mức / bán quá mức Stochastic để chọn các giao dịch đảo ngược chéo MA hai hiệu quả hơn.

  3. Quy tắc giao dịch rõ ràng dễ thực hiện.

  4. Các thông số thời gian giao dịch và tháng có thể điều chỉnh phù hợp với các sản phẩm và khoảng thời gian khác nhau.

  5. Ngăn lỗ để kiểm soát rủi ro.

Phân tích rủi ro

Những rủi ro của chiến lược này:

  1. Double MA có thể có sự đột phá sai. Stochastic có thể có sự khác biệt giá cao / giá thấp không hợp lệ, dẫn đến các tín hiệu giao dịch sai. Điều chỉnh các thông số hoặc thêm các chỉ số khác để xác nhận combo.

  2. Chỉ dựa trên các chỉ số kỹ thuật mà không xem xét các yếu tố cơ bản. Có thể thất bại trong các sự kiện kinh tế lớn.

  3. Khó xác định chính xác thời gian đảo ngược MA, có thể có vấn đề về dừng quá chặt hoặc quá rộng.

  4. Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc chất lượng tín hiệu kém.

  5. Chỉ phù hợp với giao dịch ngắn hạn, không giữ dài hạn.

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

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

  1. Kiểm tra nhiều kết hợp chỉ số như KDJ, MACD v.v. để cải thiện tính hợp lệ của tín hiệu.

  2. Thêm phân tích khối lượng giao dịch để tránh đột phá sai.

  3. Tối ưu hóa các tham số MA đôi để xác định các điểm đảo ngược chính xác hơn.

  4. Tối ưu hóa chiến lược dừng lỗ để giảm nguy cơ bị dừng lại.

  5. Thêm các mô-đun kiểm soát rủi ro sự kiện kinh tế để tránh tác động từ các sự kiện lớn.

  6. Sử dụng kỹ thuật học máy để tự động tối ưu hóa các thông số để thích nghi tốt hơn.

  7. Backtest trên nhiều sản phẩm và khung thời gian để tìm ứng dụng tốt nhất.

Kết luận

Chiến lược này giao dịch tại các điểm đảo ngược xu hướng trung hạn được xác định bởi sự chéo chéo MA đôi và sự khác biệt stochastic bò / gấu. So với việc sử dụng một chỉ số duy nhất, nó có thể cải thiện lợi nhuận giao dịch với các quy tắc rõ ràng. Nhưng nó cũng có những rủi ro đòi hỏi tối ưu hóa tham số và dừng lỗ, và nhiều bộ lọc và kiểm soát rủi ro hơn. Nhìn chung, nó là một chiến lược giao dịch ngắn hạn trung bình đáng tin cậy.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Intraday Stochiastic Strategy", shorttitle="Intraday Stochiastic Strategy", overlay=true, initial_capital = 1000)
//WORKS FOR BTCUSD M30
//OBVERVED GOOD PERFORMANCES FOR SELL MODE M15 : US30USD / UK100GBP / JP225USD / SPX500USD / BCOUSD / EURGBP
//Best Forex Hours are 7-21
//0 is Long Position
//1 is Short Position
//2 No position
mode=input(1, maxval=2, title="Mode")
lossLimit=input(10000, maxval=10000, title="Loss Limit")
hourStart=input(2, maxval=24, title="Hour Start")
hourStop=input(13, maxval=24, title="Hour Stop")

//Month selected for back testing. 0 is maximum number of months
monthSelected = input(0, maxval=12, title="Month Selected")

/////////////////////////////////////////////////

fast = 20, slow = 50, ultraSlow = 200
fastMA = sma(close, fast)
slowMA = sma(close, slow)
ultraSlowMA = sma(close, ultraSlow)

colorFast = red
colorSlow = black
colorUltraSlowMA = purple

if(timeframe.period == "1" or timeframe.period == "3" or timeframe.period == "5" or timeframe.period == "15" or timeframe.period == "30" or timeframe.period == "45" or timeframe.period == "60" or timeframe.period == "120" or timeframe.period == "180" or timeframe.period == "240")
    fastMA := ema(close, fast)
    slowMA := ema(close, slow)
    ultraSlowMA := ema(close, ultraSlow)
    colorFast := orange
    colorSlow := gray
    colorUltraSlowMA := blue

p1 = plot(fastMA, color=colorFast)
p2 = plot(slowMA, color=colorSlow, linewidth=2)  
p3 = plot(ultraSlowMA, color=colorUltraSlowMA, linewidth=3)

fill(p1, p2, color = fastMA > slowMA ? green : red)

////////////////////////////////////////////////

ema150 = 200
ema150MA = ema(close, ema150)

smooth = input(3, minval=1), K = input(14, minval=1), D=input(3,minval=1)
hh=highest(high,K)
ll=lowest(low,K)
k = sma((close-ll)/(hh-ll)*100, smooth)
d = sma(k, 3)
//plot(k, color=blue)
//plot(d, color=red)
//h0 = hline(80)
//h1 = hline(20)
//fill(h0, h1, color=purple, transp=95)


//plot(hour*100, color=red, linewidth=2)

stochiasticHigh = 80
stochiasticLow = 20

data = close < ema150MA and k>stochiasticHigh and d>stochiasticHigh and close>open
plotshape(data, style=shape.triangledown, location=location.belowbar, color=red)

data2 = close > ema150MA and k<stochiasticLow and d<stochiasticLow and close<open
plotshape(data2, style=shape.triangleup, location=location.abovebar, color=green)

isData = 0
isData := isData[1]

    
if(isData == 0)
    if(data)
        if(mode==1 and hour>hourStart and hour<hourStop and (monthSelected==0 or month==monthSelected)) //DOW hours : 2-13
            strategy.entry("SCALP SHORT", strategy.short)  
            isData := 1
else
    if(k<stochiasticLow and d<stochiasticLow)
        if(mode==1)
            strategy.close_all(when = true)
        isData := 0
        
isData2 = 0
isData2 := isData2[1]
    
if(isData2 == 0)
    if(data2)
        if(mode==0 and hour>hourStart and hour<hourStop and (monthSelected==0 or month==monthSelected))
            strategy.entry("SCALP LONG", strategy.long)  
            isData2 := 1
else
    if(k>stochiasticHigh and d>stochiasticHigh)
        if(mode==0)
            strategy.close_all(when = true)
        isData2 := 0

strategy.exit("STOP LOSS", "SCALP LONG", loss=lossLimit)
strategy.exit("STOP LOSS", "SCALP SHORT", loss=lossLimit) 

Thêm nữa