Sự đột phá và xu hướng sau chiến lược kết hợp

Tác giả:ChaoZhang, Ngày: 2023-12-13 16:41:25
Tags:

img

Tổng quan

Chiến lược này là một chiến lược kết hợp tích hợp các chỉ số động lực, các chỉ số theo xu hướng và các chỉ số trung bình động để nhận ra xu hướng theo xu hướng và đột phá nhập / ra. Nó chủ yếu sử dụng sự kết hợp của chỉ số Stochastic và chỉ số Supertrend để xác định thời gian nhập / ra, và sử dụng đường EMA để đánh giá xu hướng thị trường chính.

Nguyên tắc chiến lược

Chiến lược bao gồm các chỉ số sau:

  1. Đường EMA: Sử dụng EMA 25, 50, 100 và 200 để xác định xu hướng chính. Khi EMA25 vượt qua trên EMA50 và EMA100 vượt qua trên EMA200, đó là xu hướng tăng, nếu không thì đó là xu hướng giảm.

  2. Chỉ số theo xu hướng siêu xu hướng: Các thông số là yếu tố 3 và ATR 10 để đánh giá xem giá hiện tại có xu hướng tăng hay giảm không. Khi Supertrend màu xanh lá cây, đó là xu hướng tăng. Khi màu đỏ, đó là xu hướng giảm.

  3. Chỉ số động lượng Stochastic: %K 8 và %D 3 để xác định xem Stochastic tạo ra đường chéo vàng hay đường chéo chết. Khi đường %K băng qua đường chéo %D từ dưới, đó là tín hiệu đường chéo vàng, và ngược lại đối với đường chéo chết.

Chiến lược mua là: EMA cho thấy xu hướng tăng + Supertrend cho thấy xu hướng tăng + Stochastic Golden Cross.
Chiến lược bán là: EMA cho thấy xu hướng giảm + Supertrend cho thấy xu hướng giảm + Stochastic cross.

Chiến lược này tích hợp các chỉ số xu hướng, động lực và đột phá để xác định đáng tin cậy các chuyển động của thị trường và các điểm giao dịch.

Phân tích lợi thế

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

  1. Kết hợp nhiều chỉ số giúp cải thiện độ bền và lọc ra các sự đột phá giả hiệu quả.

  2. Thêm chỉ số động lực có thể phát hiện sớm những bước ngoặt.

  3. Các tham số có thể tùy chỉnh phù hợp với môi trường thị trường khác nhau.

  4. Nhận ra tương đối hiệu quả dừng lỗ và lấy lợi nhuận thiết lập.

  5. Nó hoạt động tốt khi được kiểm tra lại trong khoảng thời gian dài như hàng ngày.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Cài đặt tham số không chính xác có thể gây ra giao dịch quá thường xuyên hoặc tín hiệu không ổn định.

  2. Có thể vẫn có những đánh giá sai về thời gian.

  3. Đặt dừng lỗ trên Stochastic cực có thể quá gần.

  4. Dữ liệu backtest không đủ có thể gây ra sự thiên vị trong điều chỉnh tham số.

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

Chiến lược có thể được tối ưu hóa theo những cách sau:

  1. Kiểm tra nhiều bộ tham số hơn để tìm tối ưu. ví dụ: điều chỉnh Supertrend Factor.

  2. Thêm nhiều chỉ số lọc như năng lượng hoặc biến động để giảm đánh giá sai.

  3. Kiểm tra các phương thức dừng lỗ khác nhau, ví dụ như dừng lỗ dựa trên tỷ lệ phần trăm.

  4. Tối ưu hóa lợi nhuận, giống như dừng lại để khóa thêm lợi nhuận.

  5. Mở rộng phạm vi, thích nghi với nhiều sản phẩm hơn hoặc khung thời gian dài hơn.

Kết luận

Chiến lược này có logic rõ ràng và lựa chọn chỉ số hợp lý. Nó thực hiện theo xu hướng và giao dịch đột phá đà với kết quả backtest tốt. Nhưng vẫn còn chỗ cho tối ưu hóa, ví dụ như điều chỉnh tham số, thêm bộ lọc, cải thiện dừng và lấy lợi nhuận.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 07:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Supertrend + Stoch Strategy", overlay=true)

// ---inputs---
pl = input(1.5, title="P/L", minval=0.1)
lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100)
atrPeriod = input(10, "ATR Length")
factor = input(3, "Supertrend Factor")
periodK = input(8, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
ema1l = input(25, title="EMA 1 Length", minval=1)
ema2l = input(50, title="EMA 2 Length", minval=1)
ema3l = input(100, title="EMA 3 Length", minval=1)
ema4l = input(200, title="EMA 4 Length", minval=1)

// ---lines---
ema1 = ema(close, ema1l)
ema2 = ema(close, ema2l)
ema3 = ema(close, ema3l)
ema4 = ema(close, ema4l)
trendUpper = ema1 > ema2 and ema3 > ema4
trendLower = ema1 < ema2 and ema3 < ema4

[supertrend, direction] = supertrend(factor, atrPeriod)
supertrendUpper = direction < 0
supertrendLower = direction > 0

k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
stochCrossOver = crossover(k, d)
stochCrossUnder = crossunder(k, d)

// ---plot---
plot(ema1, color=color.green)
plot(ema2, color=color.orange)
plot(ema3, color=color.blue)
plot(ema4, color=color.purple)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false)

// ---stop place compute---
edge = 0.  // periodly high/low
edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1]

// plot(edge)

// ---trade condition---
// longCond = trendUpper and supertrendUpper and stochCrossOver
// shortCond = trendLower and supertrendLower and stochCrossUnder
longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0
shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0

// ---stop & take---
stop = 0.
stop := nz(stop[1], stop)
take = 0.
take := nz(take[1], take)

if longCond
    stop := edge[1]
    take := close + (close - stop) * pl
if shortCond
    stop := edge[1]
    take := close - (stop - close) * pl

// ---trade---
qty = strategy.equity / abs(stop - close) / 100 * lossPercentage

strategy.entry("Buy", strategy.long, when=longCond, qty=qty)
strategy.exit("Close Buy","Buy", limit=take, stop=stop)

strategy.entry("Sell", strategy.short, when=shortCond, qty=qty)
strategy.exit("Close Sell","Sell", limit=take, stop=stop)

stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr)
takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr)
entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr)
fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false)
fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)

Thêm nữa