
Chiến lược này là một chiến lược kết hợp, kết hợp với chỉ số động lực, chỉ số theo dõi xu hướng và chỉ số đường trung bình, để thực hiện theo dõi xu hướng và phá vỡ mua / bán. Chủ yếu bằng cách kết hợp chỉ số Stochastic và chỉ số Supertrend để đánh giá thời gian mua / bán, hỗ trợ EMA để đánh giá xu hướng chính của thị trường.
Chiến lược này bao gồm một số chỉ số:
Đường trung bình EMA: Sử dụng EMA 25, 50, 100 và 200 để xác định xu hướng chính của bốn đường trung bình. Nếu EMA25 vượt qua EMA50 và EMA100 vượt qua EMA200 thì xu hướng tăng, nếu không thì xu hướng giảm.
Chỉ số theo dõi xu hướng Supertrend: Các tham số là Factor 3 và ATR 10, để xác định liệu giá hiện tại có đang trong xu hướng tăng hay giảm. Khi Supertrend màu xanh là xu hướng tăng và màu đỏ là xu hướng giảm.
Stochastic động lực chỉ số: %K 8 và %D 3, đánh giá xem Stochastic có tạo ra hiện tượng gai vàng hay gai chết không. Khi %K đường đi qua %D đường đi từ phía dưới là tín hiệu gai vàng, ngược lại là tín hiệu gai chết.
Chiến lược mua là: EMA hiển thị xu hướng tăng + Supertrend hiển thị xu hướng tăng + Stochastic Gold Forks. Chiến lược bán ra là: EMA hiển thị xu hướng giảm + Supertrend hiển thị xu hướng giảm + Stochastic dead fork time
Chiến lược này kết hợp 3 chỉ số: xu hướng, động lực và đột phá, để đánh giá một cách đáng tin cậy hơn về xu hướng và điểm mua và bán của thị trường.
Chiến lược này có những lợi thế chính như sau:
Kết hợp với nhiều chỉ số, sự phán đoán mạnh mẽ có thể lọc hiệu quả các đột phá giả.
Thêm vào đó, các chỉ số động lực có thể giúp đánh giá sớm điểm chuyển đổi.
Các tham số có thể tùy chỉnh, áp dụng cho các môi trường thị trường khác nhau.
Các thiết lập dừng và dừng tương đối hiệu quả.
Có thể đo lại ở các chu kỳ cao như mặt trời, hiệu quả tốt hơn.
Chiến lược này cũng có một số rủi ro:
Thiết lập tham số không đúng có thể dẫn đến giao dịch thường xuyên hoặc tín hiệu không ổn định. Cần điều chỉnh tham số.
Tuy nhiên, có thể xảy ra sự sai lầm khi lựa chọn. Bạn có thể xem xét thêm các chỉ số sóng khác.
Điểm dừng là điểm cực đoan của chỉ số Stochastic, có thể quá gần, có thể cân nhắc nới lỏng thích hợp.
Dữ liệu phản hồi không đầy đủ, có thể ảnh hưởng đến sự phù hợp của các tham số, nên mở rộng chu kỳ phản hồi.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Thử nghiệm nhiều hơn để tìm ra các tham số tối ưu. Ví dụ như điều chỉnh tham số Factor của Supertrend.
Thêm thêm các chỉ số vi sóng, chẳng hạn như chỉ số năng lượng, chỉ số tỷ lệ dao động, v.v., để giảm khả năng sai lầm.
Có thể thử nghiệm các phương pháp dừng khác nhau, chẳng hạn như thiết lập đường dừng ở một tỷ lệ nhất định tại các điểm cực đoan.
Tối ưu hóa các phương thức dừng, ví dụ như xem xét dừng động để khóa nhiều lợi nhuận hơn.
Chiến lược này có tư duy tổng thể rõ ràng, lựa chọn chỉ số hợp lý, thực hiện theo dõi xu hướng và phá vỡ giao dịch, phản hồi hiệu quả tốt hơn. Tuy nhiên, vẫn có không gian tối ưu hóa, tối ưu hóa đa phương thức bằng cách điều chỉnh tham số, thêm nhiều chỉ số đợt sóng, cải thiện phương thức dừng lỗ, có thể làm cho chiến lược ổn định và đáng tin cậy hơ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)