Chiến lược giao dịch siêu xu hướng dựa trên sự kết hợp của ATR và MA

Tác giả:ChaoZhang, Ngày: 2023-12-01 16:40:27
Tags:

img

Tổng quan

Chiến lược giao dịch Supertrend là một chiến lược theo xu hướng dựa trên Average True Range (ATR) và Moving Average (MA). Nó kết hợp các lợi thế của cả việc theo dõi xu hướng và giao dịch đột phá để xác định hướng xu hướng trung gian và tạo ra các tín hiệu giao dịch dựa trên những thay đổi xu hướng.

Ý tưởng chính đằng sau chiến lược này là đi dài hoặc ngắn khi giá vượt qua kênh Supertrend, cho thấy sự đảo ngược xu hướng. Nó cũng đặt mức dừng lỗ và lấy lợi nhuận để khóa lợi nhuận và kiểm soát rủi ro.

Chiến lược này hoạt động như thế nào

Tính toán Supertrend bao gồm một số bước:

  1. Tính toán ATR. ATR phản ánh sự biến động trung bình trong một khoảng thời gian.
  2. Tính toán đường trung bình dựa trên mức cao nhất và thấp nhất.
  3. Tính toán kênh trên và dưới dựa trên ATR và nhân ATR được thiết lập bởi nhà giao dịch. Kênh trên được tính như: Midline + (ATR × Multiplier). Kênh dưới được tính như: Midline - (ATR × Multiplier).
  4. So sánh giá đóng với kênh trên / dưới để xác định hướng xu hướng. Nếu đóng trên kênh trên, xu hướng tăng. Nếu đóng dưới kênh dưới, xu hướng giảm.
  5. Một sự đột phá trên hoặc dưới kênh tạo ra các tín hiệu giao dịch ngược. Ví dụ, một sự đột phá trên kênh trên báo hiệu bước vào dài trong khi một sự phá vỡ dưới kênh dưới báo hiệu bước vào ngắn.

Lợi thế của chiến lược này là nó kết hợp cả hai kỹ thuật theo xu hướng và đảo ngược xu hướng. Nó xác định xu hướng chính trong khi cũng có thể nắm bắt các cơ hội đảo ngược kịp thời. Ngoài ra, cơ chế dừng lỗ / lấy lợi nhuận giúp kiểm soát rủi ro.

Điểm mạnh

Chiến lược Supertrend có những điểm mạnh sau:

1. Theo dõi xu hướng trung gian

Kênh Supertrend được tính dựa trên ATR, phản ánh hiệu quả phạm vi biến động giá trung gian.

2. Bắt được sự đảo ngược kịp thời

Sự đột phá giá từ kênh nhanh chóng tạo ra các tín hiệu giao dịch để có thể nắm bắt sự đảo ngược xu hướng lớn kịp thời. Điều này cho phép định vị lại đúng cách để tránh bị phá vỡ.

3. Hãy dừng lỗ và lấy lợi nhuận

Chiến lược đặt mức dừng lỗ được xác định trước và lấy mức lợi nhuận để tự động thoát khỏi với kiểm soát rủi ro. Điều này làm giảm đáng kể nguy cơ dừng lỗ quá mức và cho phép theo xu hướng tốt hơn.

4. Dễ thực hiện

Chiến lược chủ yếu sử dụng các chỉ số cơ bản như MA và ATR. Điều này làm cho nó khá đơn giản để hiểu và thực hiện cho giao dịch trực tiếp.

**5. Hiệu quả đầu tư cao **

Bằng cách theo dõi các xu hướng trung gian và kiểm soát trượt cá nhân, chiến lược Supertrend cung cấp hiệu quả vốn tổng thể cao.

Phân tích rủi ro

Chiến lược Supertrend cũng có một số điểm yếu tiềm năng:

1. Chất lượng thấp hơn trên thị trường

Chiến lược tập trung vào giao dịch xu hướng trung bình đến dài hạn. Trong các thị trường dao động hoặc củng cố, nó có xu hướng hoạt động kém hơn với chi phí cơ hội cao hơn của các giao dịch ngắn bị bỏ lỡ.

2. Nhạy cảm đối với tối ưu hóa tham số

Các giá trị được chọn cho thời gian ATR và nhân có tác động tương đối lớn đến hiệu suất chiến lược.

3. Có thể có vấn đề chậm trễ

Có thể có một số vấn đề chậm với tính toán kênh Supertrend, gây ra việc tạo tín hiệu không kịp thời.

4. Cần quản lý dừng lỗ nghiêm ngặt

Trong các điều kiện thị trường cực đoan, khoản dừng lỗ lớn không phù hợp hoặc quản lý rủi ro không đầy đủ có thể dẫn đến tổn thất lớn.

Các lĩnh vực cải thiện

Có thêm không gian để tối ưu hóa chiến lược Supertrend này:

1. Kết hợp nhiều thời gian ATR

Kết hợp các phép đọc ATR trong các khoảng thời gian khác nhau như 10 ngày và 20 ngày tạo thành một chỉ số tổng hợp, giúp cải thiện độ nhạy và các vấn đề chậm trễ.

2. Thêm các mô-đun dừng lỗ

Thêm các cơ chế dừng lỗ phức tạp hơn như dừng lỗ ba lần, dừng lỗ biến động và dừng lỗ liên tục có thể tăng cường kiểm soát rủi ro và giảm rút tiền.

3. Parameter tối ưu hóa

Tối ưu hóa các giá trị cho thời gian ATR, nhân và các đầu vào khác thông qua các phương pháp định lượng sẽ nâng cao hiệu suất chiến lược hơn nữa. Các tham số cũng có thể được điều chỉnh năng động dựa trên các sản phẩm và chế độ thị trường khác nhau.

4. Kết hợp các mô hình học máy

Cuối cùng, tích hợp các mô hình học máy có thể nhận ra nhận dạng xu hướng tự động và tạo tín hiệu, giảm sự phụ thuộc vào các quyết định chủ quan và cải thiện sự ổn định của hệ thống.

Kết luận

Chiến lược giao dịch Supertrend xác định hướng xu hướng trung gian bằng cách sử dụng các chỉ số MA và ATR, và tạo ra các tín hiệu nhập và xuất thương xung quanh sự đảo ngược xu hướng với việc thực hiện tự động dừng lỗ / lấy lợi nhuận. Trong khi giữ các xu hướng chính, nó cũng nắm bắt một số cơ hội đảo ngược.

Tuy nhiên, một số thiếu sót cũng tồn tại liên quan đến việc nắm bắt thị trường không đủ phạm vi và các vấn đề chậm trễ. Các tối ưu hóa hơn nữa có thể được khám phá trên nhiều chiều, bao gồm sử dụng ATR tổng hợp, tăng cường các mô-đun dừng lỗ, các tham số điều chỉnh và tích hợp các mô hình học máy. Những cải tiến này có thể sẽ cải thiện sự ổn định và hiệu quả của chiến lược Supertrend.


/*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) 


Thêm nữa