Chiến lược theo dõi xu hướng trung bình động Hall dựa trên TSI và CCI


Ngày tạo: 2023-11-28 15:53:03 sửa đổi lần cuối: 2023-11-28 15:53:03
sao chép: 0 Số nhấp chuột: 764
1
tập trung vào
1619
Người theo dõi

Chiến lược theo dõi xu hướng trung bình động Hall dựa trên TSI và CCI

Tổng quan

Chiến lược này kết hợp ba chỉ số là chỉ số cường độ tương đối (TSI), chỉ số đường hàng hóa (CCI) và trung bình di chuyển của Hall (Hull MA) để tạo thành một chiến lược giao dịch theo xu hướng. Nó có thể theo dõi các giao dịch dài trên bất kỳ loại giao dịch nào trong khung thời gian 1 giờ hoặc lâu hơn.

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

Chiến lược này chủ yếu dựa trên hai chỉ số của TSI và CCI để xác định xu hướng thị trường và tình trạng quá mua quá bán, và Hull MA để xác định xu hướng giá trung hạn, ba điều kiện cơ bản để xây dựng vị trí.

Cụ thể, khi đường nhanh của TSI đi qua đường chậm và chỉ số CCI đi qua +20&&n1 tăng, làm nhiều hơn; khi đường nhanh của TSI đi qua đường chậm và chỉ số CCI đi qua -20&n1 giảm, làm trống. Hull MA được sử dụng để lọc xu hướng trung bình, chỉ khi giá thấp hơn Hull MA thì làm nhiều hơn và khi giá cao hơn Hull MA thì làm trống.

Bằng cách xác nhận các chỉ số chu kỳ khác nhau, bạn có thể lọc hiệu quả các đột phá giả và theo dõi xu hướng đường dài trung bình.

Phân tích lợi thế

Đây là một chiến lược theo dõi xu hướng tương đối ổn định và hiệu quả, với một số ưu điểm:

  1. Sử dụng TSI để xác định hướng của xu hướng dài hạn một cách đáng tin cậy hơn, tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn;

  2. Việc bổ sung chỉ số CCI cho phép xác định hiện tượng quá mua quá bán và lọc ra một số tín hiệu giả;

  3. Hull MA đã đưa ra một quyết định chính xác hơn về điểm nhập cảnh, làm tăng đáng kể khả năng kiếm được lợi nhuận.

  4. Việc tích hợp các chỉ số tham số khác nhau có thể làm tăng độ tin cậy của tín hiệu và giảm khả năng nhiễu.

  5. Các tham số chiến lược được thiết lập linh hoạt, có thể được tối ưu hóa cho các chu kỳ thị trường khác nhau.

Phân tích rủi ro

Mặc dù chiến lược này có tính ổn định cao, nhưng vẫn có một số rủi ro cần lưu ý:

  1. Có thể xảy ra một sự đảo ngược mạnh mẽ, không thể dừng lại nhanh chóng và gây ra tổn thất lớn;

  2. Các chỉ số TSIDiff và CCI có thể xuất hiện các tín hiệu giả và bị trễ, và bị bỏ lỡ một số điểm vào.

  3. Thiết lập tham số không đúng cách cũng có thể dẫn đến tần số giao dịch quá cao hoặc chất lượng tín hiệu giảm.

Phản ứng:

  1. Điều chỉnh điểm dừng để kiểm soát tổn thất đơn lẻ;

  2. Cải thiện độ chính xác của tín hiệu, kết hợp với các chỉ số khác, nếu thích hợp;

  3. Theo các tham số điều chỉnh của thị trường, đảm bảo chiến lược ổn định.

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

Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:

  1. Cố gắng kết hợp các tham số khác nhau để tìm ra các tham số phù hợp nhất.

  2. Tham gia thuật toán học máy để thực hiện tối ưu hóa tự điều chỉnh các tham số;

  3. Thêm một mô-đun quản lý tài chính, giúp lợi nhuận ổn định hơn;

  4. Các chiến lược chiến thắng được tăng cường với nhiều bộ lọc hơn.

Đây sẽ là trọng tâm tối ưu hóa trong tương lai.

Tóm tắt

Chiến lược này sử dụng tổng hợp các chỉ số TSI, CCI và Hull MA, tạo thành một chiến lược theo dõi xu hướng ổn định và hiệu quả hơn. Nó đã sử dụng thành công các lợi thế của các chỉ số trong nhiều khoảng thời gian, cải thiện chất lượng tín hiệu. Bước tiếp theo sẽ tăng cường sự ổn định và khả năng lợi nhuận của chiến lược thông qua các phương tiện như tối ưu hóa tham số, tăng cường bộ lọc.

Mã nguồn chiến lược
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0)
long = input(title="Long Length", type=input.integer, defval=50)
short = input(title="Short Length", type=input.integer, defval=50)
signal = input(title="Signal Length", type=input.integer, defval=25)
price=input(title="Source",type=input.source,defval=open)
Period=input(25, minval=1)
lineupper = input(title="Upper Line", type=input.integer, defval=100)
linelower = input(title="Lower Line", type=input.integer, defval=-100)
p=price
length= Period
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
keh = tsi_value*5 > linelower ? color.red : color.lime
teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime
meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime
i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100)
i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100)
fill(i1,i2,color=meh,transp=85)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5)
n2ma = 2 * wma(p, round(length / 2))
nma = wma(p, length)
diff = n2ma - nma
sqn = round(sqrt(length))
n1 = wma(diff, sqn)
cci = (p - n1) / (0.015 * dev(p, length))
c = cci > 0 ? color.lime : color.red
c1 = cci > 20 ? color.lime : color.silver
c2 = cci < -20 ? color.red : color.silver
cc=plot(cci, color=c, title="CCI Line", linewidth=2)
cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100)
fill(cc,cc2,color=c,transp=85)
plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP",  color=c1, linewidth=2,transp=100,offset=-2)
plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down",  color=c2, linewidth=2,transp=100,offset=-2)

TSI1=ema(tsi_value*5, signal*5)
TSI2=ema(tsi_value*5, signal*5)[2]

hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period)))
//plot(hullma_smoothed*200)

longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0
if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1])
    strategy.entry("Buy Here", strategy.long)

shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0
if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1])
    strategy.entry("Sell Here", strategy.short)