Chiến lược giao dịch hệ thống trung bình động đa thời gian


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

Chiến lược giao dịch hệ thống trung bình động đa thời gian

Tổng quan

Chiến lược này sử dụng hệ thống đường trung bình của nhiều axis thời gian, kết hợp với các chỉ số kỹ thuật khác như chỉ số RSI, để thực hiện chuyển đổi tự động nhiều khoảng. Chiến lược được gọi là Multi-Timeframe Moving Average System Trading Strategy.

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

Các chỉ số trung bình của chiến lược này là hệ thống đường trung bình. Chiến lược sử dụng nhiều chỉ số đường trung bình như JMA, TEMA, DEMA để tính toán xu hướng giá trong các chu kỳ khác nhau như 15 phút, 30 phút, 60 phút. Ví dụ, sử dụng đường trung bình được tính toán bởi JMA trong chu kỳ 15 để đánh giá xu hướng giá trong chu kỳ đó.

Cụ thể, các biến trend, trend2 và trend3 trong chiến lược đại diện cho xu hướng giá 15 phút, 30 phút và 60 phút. Nếu giá đảo ngược trong 15 phút và 30 phút và 60 phút chưa đảo ngược, thì tín hiệu giao dịch sẽ được tạo ra khi phân biệt giữa đường ngắn và đường dài. Nếu tất cả các xu hướng chu kỳ đều đồng nhất, tín hiệu giao dịch sẽ không được tạo ra.

Bằng cách so sánh mối quan hệ giữa nhiều chu kỳ, lọc ra một số tín hiệu giả tạo, tạo ra tín hiệu giao dịch đáng tin cậy hơn, đó là ý tưởng cốt lõi của chiến lược.

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

  1. Sử dụng phân tích đa trục thời gian để tăng độ tin cậy tín hiệu và lọc tín hiệu giả;
  2. Kết hợp nhiều chỉ số để đánh giá tổng hợp, tránh các vấn đề do chỉ số đơn lẻ gây ra;
  3. Tự động thực hiện chuyển đổi đa đầu không khí, không cần can thiệp của con người, giảm độ khó hoạt động.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Phân tích theo nhiều thời gian sẽ làm tăng sự không chắc chắn về thời điểm giao dịch, có thể bỏ lỡ thời điểm tốt nhất để tham gia;
  2. Đồng thời kết hợp với nhiều chỉ số, cài đặt tham số chỉ số không đúng có thể gây ra vấn đề về chất lượng tín hiệu giao dịch giảm xuống;
  3. Có nguy cơ tự động chuyển đổi đa đầu không được tối ưu hóa, hiệu quả của ổ cứng có thể yếu hơn so với phản hồi.

Đối với những rủi ro trên, chúng ta có thể làm những điều sau đây để giảm thiểu chúng:

  1. Điều chỉnh các tham số theo thời gian để đảm bảo nhận được tín hiệu đường ngắn trong thời gian;
  2. Các thông số chỉ số được tối ưu hóa liên tục thông qua việc thu thập nhiều dữ liệu.
  3. Cần có sự can thiệp thích hợp trong thị trường chứng khoán, tránh giao dịch mù quáng của hệ thống tự động.

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

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Có thể giới thiệu các thuật toán học máy để tự động tối ưu hóa các tham số đa chỉ số thông qua đào tạo mô hình;
  2. Có thể thêm các thiết lập trượt thích ứng, điều chỉnh kích thước trượt theo biến động của thị trường, tăng hiệu quả của đĩa cứng;
  3. Có thể đưa ra một cơ chế xác nhận giá cả để tránh thiệt hại do sự thay đổi nhanh chóng của xu hướng.

Tóm tắt

Chiến lược này thông qua việc so sánh xu hướng giá theo chiều dài và chiều ngắn, kết hợp với phân tích tổng hợp nhiều chỉ số để tạo tín hiệu giao dịch, thực hiện chuyển đổi tự động nhiều đầu trống, hiệu quả đo lường lại tốt hơn. Chúng tôi cũng thấy rằng có một số không gian cải tiến cho chiến lược này, và trong tương lai có thể tối ưu hóa bằng cách giới thiệu các phương pháp học máy, điểm trượt thích ứng, xác nhận giá và các phương pháp khác để nâng cao hiệu quả thực tế của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Drexel Strategy", overlay=true )
Length1=7
Length2=9
Multiplier=input(1.5,"Multiplier")
jma(src,length) =>
    beta = 0.45*(length-1)/(0.45*(length-1)+2)
    alpha = beta
    tmp0 = (1-alpha)*src + alpha*nz(tmp0[1])
    tmp1 = (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1])
    tmp2 = tmp0[0] + tmp1[0]
    tmp3 = (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1])
    tmp4 = nz(tmp4[1]) + tmp3[0]
    JMA = tmp4
    JMA
rsx(src,length) =>
    f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
    f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
    f8 =  100.0*(src) 
    f18 = 3.0 / (length + 2.0) 
    f20 = 1.0 - f18 
    f10 = nz(f8[1])
    v8 = f8 - f10 
    f28 = f20 * nz(f28[1]) + f18 * v8 
    f30 = f18 * f28 + f20 * nz(f30[1])
    vC = f28 * 1.5 - f30 * 0.5 
    f38 = f20 * nz(f38[1]) + f18 * vC 
    f40 = f18 * f38 + f20 * nz(f40[1])
    v10 = f38 * 1.5 - f40 * 0.5 
    f48 = f20 * nz(f48[1]) + f18 * v10 
    f50 = f18 * f48 + f20 * nz(f50[1])
    v14 = f48 * 1.5 - f50 * 0.5 
    f58 = f20 * nz(f58[1]) + f18 * abs(v8) 
    f60 = f18 * f58 + f20 * nz(f60[1])
    v18 = f58 * 1.5 - f60 * 0.5
    f68 = f20 * nz(f68[1]) + f18 * v18 
    f70 = f18 * f68 + f20 * nz(f70[1])
    v1C = f68 * 1.5 - f70 * 0.5 
    f78 = f20 * nz(f78[1]) + f18 * v1C 
    f80 = f18 * f78 + f20 * nz(f80[1])
    v20 = f78 * 1.5 - f80 * 0.5
    f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0  : 0.0
    f90 = ((f88 == f90_) and (f0 == 0.0))  ? 0.0  : f90_
    v4_ = ((f88 < f90) and (v20 > 0.0000000001)) ? (v14 / v20 + 1.0) * 50.0 : 50.0
    rsx = ((v4_ > 100.0) ? 100.0 : (v4_ < 0.0) ? 0.0 : v4_)-50
    rsx
xPrice=open
emaA = ema(xPrice, Length2)  
Xprice = rsx(open,14)
XPrice = high, xprice = low
xe1 = jma(xPrice, Length1)
xe11 = jma(Xprice[1],Length1)
xe111 = jma(XPrice[1],Length1)
xe1111=jma(xprice[1],Length1)
xe2 = jma(xe1, Length1)
xe21 = jma(xe111, Length1)
xe3 = jma(xe2, Length1)
xe31 = jma(xe1111,Length2)
xe3a = jma(xe2,Length1)
xe4 = jma(xe3, Length1)
xe5 = jma(xe4, Length1)
xe6 = jma(xe5, Length1)
b = 0.7
c1 = -b*b*b
c2 = 3*b*b+3*b*b*b
c3 = -6*b*b-3*b-3*b*b*b
c3a = nz(c3a[1])
c4 = 1+3*b+b*b*b+3*b*b
TEMA = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
DEMA = 2 * emaA - ema(emaA, Length2)
Length(mod)=>(mod*c3a)+Length2
Trend1=TEMA/DEMA
a=rsx(open,Length(2))
b1=rsx(open,Length(3))
c=rsx(open,Length(5))
d=rsx(open,Length(8))
e=rsx(open,Length(13))
f=rsx(open,Length(21))
g=rsx(open,Length(34))
h=rsx(open,Length(55))
i=rsx(open,Length(89))
j=rsx(open,Length(144))
trend1 = (((a-b1)+(c-d)+(e-f)+(g-h)+(i-j))/10)
trend = trend1>0?avg(a,b,c4,c2):trend1==0?XPrice:avg(rsx(open,24),jma(open,24),rsx(jma(open,24),24))
trend2 = trend1>0?avg(d,e,c2,c1):trend1==0?XPrice:avg(rsx(open,48),jma(open,48),rsx(jma(open,48),48))
trend3 = trend1>0?avg(d,e,c2,c1):trend1==0?xprice:avg(rsx(open,96),jma(open,96),rsx(jma(open,96),96))
bc=request.security(syminfo.tickerid,'15',trend)
bc1=request.security(syminfo.tickerid,'15',trend2)
bc2=request.security(syminfo.tickerid,'15',trend3)
bd=request.security(syminfo.tickerid,'30',trend)
bd1=request.security(syminfo.tickerid,'30',trend2)
bd2=request.security(syminfo.tickerid,'30',trend3)
be=request.security(syminfo.tickerid,'60',trend)
be1=request.security(syminfo.tickerid,'60',trend2)
be2=request.security(syminfo.tickerid,'60',trend3)
bf=request.security(syminfo.tickerid,'120',trend)
bf1=request.security(syminfo.tickerid,'120',trend2)
bf2=request.security(syminfo.tickerid,'120',trend3)
bg=request.security(syminfo.tickerid,'240',trend)
bg1=request.security(syminfo.tickerid,'240',trend2)
bg2=request.security(syminfo.tickerid,'240',trend3)
bh=request.security(syminfo.tickerid,'D',trend)
bh1=request.security(syminfo.tickerid,'D',trend2)
bh2=request.security(syminfo.tickerid,'D',trend3)
Trend=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh))
Trend11=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh1))
Trend33 = max(min(min(min(bc2,bd2),min(be2,bf2)),bg2),bh2)
AverageTrend=sma(Trend1,1000)
StdDev=Multiplier*stdev(Trend1,1000)
TopBand=AverageTrend+StdDev
BotBand=AverageTrend-StdDev
ap=open
n1=10
n2=21
esa1 = jma(ap, n1)
d1 = jma(abs(ap - esa1), n1)
x1 = trend3==Trend33
y1 = trend2==Trend11 
ci = (ap - esa1) / (0.015 * d1)
tci = jma(ci, n2)
wt1=tci
wt2=sma(wt1,4)
fast=jma(open,5)
slow=jma(open,13)
macd=fast-slow
signal=sma(macd,4)
WaveTrend1=wt1-wt2
JMACD1=macd-signal
rsi = (((rsi(open,6))-50)*3)
g1=rsi>Trend1 and WaveTrend1>Trend1 and JMACD1>Trend1
h1=g1?tci*c3a:nz(h[1])
strategy.entry("Long",true,when=x1)
strategy.close("Long",y1)
strategy.entry("Short",false,when=y1)
strategy.close("Short",x1)