
Chiến lược này sử dụng chỉ số siêu xu hướng để đánh giá xu hướng giá và vào lệnh mua hoặc bán khi xu hướng chuyển đổi. Chiến lược này cho phép điều chỉnh chu kỳ ATR và nhân ATR để tối ưu hóa các tham số. Ngoài ra, chiến lược này cũng cung cấp tùy chọn để thay đổi phương pháp tính toán ATR để tạo ra kết quả hơi khác.
Các chiến lược cũng được xây dựng trong thiết lập phạm vi ngày theo dõi và chỉ giao dịch trong một khoảng thời gian nhất định. Điều này đặc biệt hữu ích đối với các cổ phiếu giao dịch trong ngày. Khi kích hoạt tùy chọn phạm vi thời gian, bạn có thể chọn vào vị trí hiện tại ngay lập tức khi khoảng thời gian bắt đầu hoặc chờ đợi chuyển đổi xu hướng và sau đó vào lệnh đầu tiên.
Chiến lược này cũng có thể thiết lập điểm dừng và điểm dừng dựa trên tỷ lệ phần trăm. Trong hầu hết các trường hợp, không cần thiết lập điểm dừng bổ sung vì điểm dừng dựa trên ATR được cung cấp bởi bản thân xu hướng siêu. Do đó, chỉ có thể kích hoạt điểm dừng để tối ưu hóa cơ chế thoát ra.
Cuối cùng, chiến lược này có chức năng thông tin cảnh báo giao dịch nhập và thoát tùy chỉnh, có thể được sử dụng cho dịch vụ giao dịch tự động.
Chiến lược siêu xu hướng hoạt động dựa trên các nguyên tắc chính sau:
atr2 = sma(tr, Periods)
up = close - (Multiplier * atr)
dn = close + (Multiplier * atr)
trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend
sellSignal = trend == -1 and trend[1] == 1
Lựa chọn tham gia dựa trên các tín hiệu giao dịch và các điều kiện khác.
Thiết lập các lệnh dừng lỗ và chặn để khóa lợi nhuận hoặc tránh rủi ro.
Đây là những điểm quan trọng của chiến lược siêu xu hướng, kết hợp với tối ưu hóa tham số, có thể đạt được kết quả giao dịch tốt hơn.
Chiến lược này có một số lợi thế:
Chỉ số siêu xu hướng tự nó có thể xác định xu hướng giá một cách hiệu quả và là một công cụ thường được sử dụng để theo dõi dừng lỗ.
Các tham số ATR có thể được điều chỉnh và có thể được tối ưu hóa để có được sự kết hợp tham số tốt nhất cho các giống khác nhau. Cách tính toán SMA cũng cung cấp một lựa chọn khác.
Có thể thiết lập phạm vi thời gian cho giao dịch phản hồi và giao dịch thực để phù hợp với nhu cầu của các thời điểm giao dịch khác nhau.
Cung cấp tùy chọn để truy cập ngay vào danh sách đầu tiên hoặc chờ tín hiệu, tùy thuộc vào đặc điểm của giống.
Cài đặt dừng lỗ tích hợp có thể cải thiện khả năng chống rủi ro của chiến lược hoặc khóa nhiều lợi nhuận hơn.
Thông tin gợi ý giao dịch tùy chỉnh, có thể được tích hợp vào hệ thống giao dịch tự động hoặc robot, thực hiện không người canh gác.
Chiến lược này cũng có một số rủi ro:
Chỉ số siêu xu hướng có thể tạo ra nhiều tín hiệu giả và cần được lọc kết hợp với các chỉ số khác.
Các tham số ATR không chính xác có thể dẫn đến giao dịch thường xuyên hoặc bỏ lỡ xu hướng. Các tham số cần được tối ưu hóa để có được sự cân bằng tối ưu.
Đi quá gần điểm dừng lỗ có thể rút khỏi vị trí có lợi sớm, đi quá xa điểm dừng có thể không khóa đủ lợi nhuận.
Không đúng khung thời gian, bạn có thể bỏ lỡ thời gian giao dịch chính hoặc không sử dụng bảo lãnh.
Đối với các rủi ro trên, bạn có thể giải quyết bằng cách điều chỉnh các tham số thích hợp hoặc thêm các điều kiện lọc để tăng sự ổn định của chiến lược.
Chính sách này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Thử các tham số chu kỳ ATR khác nhau để tìm điểm cân bằng phù hợp.
Thử nghiệm các tham số nhân ATR khác nhau, thường là 2-5 phù hợp hơn, có thể điều chỉnh từng bước để tìm ra giá trị tối ưu.
Cố gắng thêm các chỉ số khác để xác định đa hướng, như MACD, KD, v.v., để lọc tín hiệu giả.
Tối ưu hóa các tham số dừng lỗ để tìm ra sự kết hợp tham số tối ưu. Có thể giới thiệu dừng lỗ động.
Kiểm tra các thiết lập thời gian giao dịch khác nhau. Các giống đường ngắn trong ngày phù hợp với khoảng thời gian ngắn hơn.
Cố gắng tự động chọn hợp đồng, theo dõi các chỉ số có tính thanh khoản cao hoặc có tỷ lệ biến động cao.
Chiến lược siêu xu hướng này là một chiến lược theo dõi xu hướng phổ biến và thực tế hơn. Nó có các đặc điểm của xu hướng theo dõi có thể điều chỉnh theo tham số và hiệu quả, cũng có một số rủi ro cần tránh. Bằng cách tối ưu hóa tham số và thêm CONDITIONS, bạn có thể tối ưu hóa chiến lược thành một hệ thống giao dịch định lượng đáng tin cậy, có được Alpha ổn định.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N
//@version=4
// Strategy
strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
enableentry = input(true, title="Enter First Trade ASAP")
waitentry = input(false, title="Wait To Enter First Trade")
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
Long = (trend == 1 ? up : na)
buySignal = trend == 1 and trend[1] == -1
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
Short = (trend == 1 ? na : dn)
sellSignal = trend == -1 and trend[1] == 1
// Strategy Backtesting
startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')
time_cond = true
//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))
// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100
longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)
plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")
// Alert messages
message_enterlong = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
// Strategy Execution
if Long and time_cond and timetobuy and enableentry
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if Short and time_cond and timetobuy and enableentry
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if buySignal and time_cond and timetobuy and waitentry
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if sellSignal and time_cond and timetobuy and waitentry
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if strategy.position_size > 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closeshort)
if strategy.position_size > 0 and enablesl and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
if strategy.position_size > 0 and enabletp and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)