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


Ngày tạo: 2023-12-01 16:40:27 sửa đổi lần cuối: 2023-12-01 16:40:27
sao chép: 0 Số nhấp chuột: 1074
1
tập trung vào
1619
Người theo dõi

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

Tổng quan

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.

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

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:

  1. Tính toán ATR. ATR phản ánh mức độ biến động trung bình trong một khoảng thời gian.
  2. Đường trung bình của kênh được tính dựa trên giá cao nhất và giá thấp nhất. Công thức tính của đường trung bình của kênh là: ((giá cao nhất + giá thấp nhất) / 2
  3. Tính toán giới hạn trên và dưới của kênh dựa trên ATR và số ATR được thiết lập bởi người dùng. Công thức tính toán cho giới hạn trên của kênh là: đường trung bình + ((ATR × ATR lần); công thức tính toán cho giới hạn dưới của kênh là: đường trung bình - ((ATR × ATR lần)
  4. So sánh mối quan hệ giữa giá đóng cửa và giới hạn trên và dưới của kênh, để xác định hướng xu hướng. Giá đóng cửa cao hơn giới hạn trên của kênh là xu hướng lên, giá đóng cửa thấp hơn giới hạn dưới của kênh là xu hướng xuống.
  5. Khi giá phá vỡ kênh xu hướng, thực hiện giao dịch ngược. Ví dụ: giá từ dưới lên phá vỡ giới hạn trên của kênh, tạo ra tín hiệu mua; giá từ trên xuống phá vỡ giới hạn dưới của kênh, tạo ra tín hiệu bán.

Ư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.

Phân tích lợi thế

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.

Phân tích rủi ro

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.

Hướng tối ưu hóa

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.

Tóm tắt

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.

Mã nguồn chiến lược
/*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)