
Chiến lược giao dịch siêu xu hướng là một chiến lược theo dõi xu hướng dựa trên phạm vi trung bình thực tế (ATR) và đường trung bình di chuyển (MA). Nó kết hợp các ưu điểm của việc theo dõi xu hướng và giao dịch đột phá, nhằm xác định hướng xu hướng trung bình và tạo tín hiệu giao dịch dựa trên sự thay đổi xu hướng.
Ý tưởng chính của chiến lược này là khi giá phá vỡ kênh siêu xu hướng, cho thấy xu hướng đã đảo ngược, khi đó mua hoặc bán. Nó đồng thời đặt mức dừng và dừng để khóa lợi nhuận và kiểm soát rủi ro.
Quá trình tính toán của chiến lược siêu xu hướng bao gồm các bước sau:
Ưu điểm của chiến lược này là nó kết hợp cả phương thức giao dịch theo xu hướng và đảo ngược xu hướng. Nó có thể xác định hướng của xu hướng lớn và nắm bắt cơ hội đảo ngược kịp thời. Ngoài ra, nó cũng có một hệ thống ngăn chặn để kiểm soát rủi ro.
Chiến lược siêu xu hướng có những lợi thế sau:
1. Theo dõi xu hướng trung hạn
Kênh siêu xu hướng dựa trên tính toán ATR, có thể phản ánh hiệu quả phạm vi biến động giá trung bình. Nó có thể theo dõi xu hướng trung bình hơn so với trung bình di chuyển thông thường.
2. Ghi lại xu hướng đúng lúc
Khi giá phá vỡ kênh, tín hiệu giao dịch nhanh chóng có thể bắt kịp sự đảo ngược của xu hướng lớn. Điều này đảm bảo điều chỉnh vị trí thích hợp và giảm nắm giữ quá hạn.
3. Có hệ thống chống hỏng
Chiến lược này đặt cả điểm dừng lỗ và điểm dừng lỗ, có thể tự động dừng lỗ. Điều này làm giảm đáng kể nguy cơ dừng lỗ tràn lan, có lợi cho việc nắm bắt xu hướng.
4. Cách thực hiện đơn giản
Chiến lược này chủ yếu sử dụng đường trung bình và chỉ số ATR, thực hiện đơn giản và dễ nắm bắt. Điều này làm giảm độ khó của hoạt động trên ổ đĩa thực.
5. Tăng cường hiệu quả sử dụng vốn
Chiến lược siêu xu hướng theo dõi xu hướng trung hạn và kiểm soát các điểm trượt đơn lẻ, hiệu quả sử dụng vốn tổng thể cao hơn.
Các chiến lược siêu xu hướng cũng có một số rủi ro tiềm ẩn:
1. Chi phí cơ hội cao hơn của các biến động
Chiến lược siêu xu hướng tập trung vào việc theo dõi xu hướng trung và dài hạn, có chi phí cao hơn trong thị trường chấn động và có thể bỏ lỡ một số cơ hội làm空.
2. Ảnh hưởng của các tham số tối ưu hóa
Lựa chọn chu kỳ ATR và số nhân ATR sẽ có ảnh hưởng lớn đến hiệu quả của chiến lược giao dịch. Nếu tham số được đặt không đúng cách, sẽ làm giảm hiệu quả của tín hiệu giao dịch.
3. Có một sự chậm trễ
Tính toán kênh siêu xu hướng có một số độ trễ, có thể dẫn đến tín hiệu không được tạo kịp thời. Đây là vấn đề chính mà chiến lược này cần giải quyết.
4. Cần kiểm soát nghiêm ngặt
Nếu thiết lập vị trí dừng lỗ quá lớn hoặc tránh kiểm soát gió không hoàn hảo, trong trường hợp cực đoan có thể dẫn đến tổn thất lớn. Vì vậy, phải thực hiện chiến lược dừng lỗ nghiêm ngặt để có được lợi nhuận ổn định.
Chiến lược siêu xu hướng này cũng có thể được tối ưu hóa hơn nữa, bao gồm:
1. Kết hợp nhiều chu kỳ ATR
Có thể kết hợp nhiều chu kỳ ATR, chẳng hạn như 10 ngày, 20 ngày, để tạo ra chỉ số ATR kết hợp. Điều này có thể làm tăng độ nhạy của chỉ số và cải thiện vấn đề chậm trễ.
2. Thêm mô-đun chiến lược dừng lỗ
Ngoài ra, bằng cách thêm các mô-đun chiến lược như dừng ba lần, dừng dao động và dừng theo thứ tự, bạn có thể tăng cường kiểm soát dừng lỗ hơn nữa, do đó giảm nguy cơ thua lỗ.
3. Cài đặt tham số tối ưu hóa
Tối ưu hóa các thiết lập tham số như chu kỳ ATR, nhân ATR, tìm kiếm sự kết hợp tham số tối ưu, có thể nâng cao lợi nhuận chiến lược hơn nữa. Ngoài ra, tham số cũng có thể được tối ưu hóa động, tùy thuộc vào giá trị phù hợp cho các giống và giai đoạn thị trường khác nhau.
Tích hợp mô hình học máy
Cuối cùng, có thể thử nghiệm các mô hình học máy tích hợp để tự động hóa nhận định xu hướng và tín hiệu. Điều này có thể làm giảm sự can thiệp của các yếu tố chủ quan và có thể làm tăng thêm sự ổn định của hệ thống chiến lược.
Chiến lược giao dịch siêu xu hướng sử dụng chỉ số đường trung bình và chỉ số ATR để đánh giá xu hướng trung bình, và tạo ra tín hiệu giao dịch tại điểm đảo ngược xu hướng, để thực hiện dừng lỗ tự động. Chiến lược này có thể nắm bắt xu hướng lớn đồng thời cũng có thể kịp thời nắm bắt một số cơ hội đảo ngược. Ưu điểm của nó được thể hiện chủ yếu trong ba khía cạnh của theo dõi xu hướng trung bình, nhận diện xu hướng đảo ngược và kiểm soát dừng lỗ.
Tuy nhiên, chiến lược này cũng có một số thiếu sót, chủ yếu là thiếu hiểu biết và chậm trễ về tình trạng xung đột. Điều này đòi hỏi phải tối ưu hóa từ nhiều khía cạnh, chẳng hạn như kết hợp chu kỳ ATR, tăng cường mô-đun dừng lỗ, tối ưu hóa tham số và giới thiệu các phương pháp học máy. Điều này chắc chắn có thể tăng thêm sự ổn định và tỷ lệ vàng của chiến lược siêu xu hướng.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:", defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2039, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10))
Atr = atrValue
if(decimals == 5)
Atr := atrValue * 10000
if(decimals == 4)
Atr := atrValue * 1000
if(decimals == 3)
Atr := atrValue * 100
if(decimals == 2)
Atr := atrValue * 10
//VJ2 Supertrend
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown
linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")
plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")
plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)
//Strategy
Trend_buy = Trend == 1
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na
strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)
strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)
bought = strategy.position_size > strategy.position_size
sold = strategy.position_size < strategy.position_size
longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0)
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0)
longProfit = factor_profit * longStop
shortProfit = factor_profit * shortStop
if(decimals == 5)
longStop := longStop *100000
longProfit := longProfit *100000
if(decimals == 4)
longStop := longStop * 10000
longProfit := longProfit * 10000
if(decimals == 3)
longStop := longStop * 1000
longProfit := longProfit * 1000
if(decimals == 2)
longStop := longStop * 100
longProfit := longProfit *100
if(decimals == 5)
shortStop := shortStop * 100000
shortProfit := shortProfit * 100000
if(decimals == 4)
shortStop := shortStop * 10000
shortProfit := shortProfit * 10000
if(decimals == 3)
shortStop := shortStop * 1000
shortProfit := shortProfit * 1000
if(decimals == 2)
shortStop := shortStop * 100
shortProfit := shortProfit * 100
strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit)
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)