Chiến lược này được gọi là
Chiến lược đầu tiên xác định một hạt phù hợp với quỹ đạo giá. Dưới ảnh hưởng của trọng lực và quán tính, quỹ đạo của hạt sẽ dao động xung quanh giá. Sau đó chúng tôi tính toán độ lệch trung bình giữa hạt và giá, và sử dụng nó để xây dựng các dải trên và dưới. Khi giá vượt qua dải trên hoặc dưới, các tín hiệu giao dịch được tạo ra.
Cụ thể, công thức vị trí hạt được xác định trong chiến lược là:
pos:=if pos<close
nz(pos[1])+grav+traj
else
nz(pos[1])-(grav)+traj
Ở đây.grav
đại diện cho thuật ngữ trọng lực làm cho hạt gần với giá;traj
đại diện cho thuật ngữ quán tính giữ xu hướng chuyển động của hạt. Sự kết hợp của hai mục này làm cho hạt dao động xung quanh giá.
Sau đó chúng ta tính toán độ lệch trung bìnhavgdist
giữa giá và hạt, và sử dụng nó để xây dựng dải trên và dưới:
bbl=pos-sma(avgdist,varb)
bbh=pos+sma(avgdist,varb)
Cuối cùng, đi dài khi giá lớn hơn dải trên, và đi ngắn khi thấp hơn dải dưới.
So với các chiến lược trung bình động truyền thống, chiến lược này có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Các biện pháp quản lý rủi ro tương ứng bao gồm: tối ưu hóa các tham số để giảm tín hiệu sai, xác định các quy tắc thời gian khung rõ ràng, thiết lập các vị trí dừng lỗ thích hợp, v.v.
Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này cải thiện chiến lược trung bình động bằng cách giới thiệu phù hợp quỹ đạo giá. Nó có các tính năng như các tham số thích nghi, khung thời gian đa, tối ưu hóa stop loss, vv. Chìa khóa là tìm ra phương trình chuyển động hạt phù hợp để mô phỏng giá. Mặc dù cần thử nghiệm và tối ưu hóa thêm, ý tưởng cơ bản là khả thi và đáng nghiên cứu thêm.
/*backtest start: 2022-11-17 00:00:00 end: 2023-11-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //2 revert strategy("Jomy's Gyroscopic Bands",precision=8,commission_value=.03,overlay=true,initial_capital =10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)//,calc_on_order_fills= true, calc_on_every_tick=false) leverage=input(1,"leverage") a=0 a:= if volume > -1 nz(a[1])+1 else nz(a) vara=input(4.0,"variable a (10 to the power of __ ",step=.5) vara:=pow(10,vara) varb=input(12,"variable b") pos=0.0 pos:=if a<=5 close else nz(pos[1]) grav=1/sqrt((close*close))*vara traj=0.0 traj:=(nz(close[1])-nz(close[2])+nz(traj[1])*varb)/(varb+1) pos:=if pos<close nz(pos[1])+grav+traj else nz(pos[1])-(grav)+traj plot(pos,color=color.white) plot(close) avgdist=abs(close-pos) bbl=pos-sma(avgdist,varb) bbh=pos+sma(avgdist,varb) plbbh=plot(bbh,color=color.red) plbbl=plot(bbl,color=color.red) long = close>pos short = close<pos fill(plbbh,plbbl,color=long?color.lime:color.red) //bgcolor(close>bbh?color.lime:close<bbl?color.red:na,transp=90) strategy.entry("Long1",strategy.long,when=long,qty=(strategy.equity*leverage/open)) strategy.close("Long1",when=not long) strategy.entry("Short1",strategy.short,when=short,qty=(strategy.equity*leverage/open)) strategy.close("Short1",when=not short) //plot(strategy.equity,color=color.lime,linewidth=4)