この戦略は"マルチタイムフレームと平均幅に基づくジロスコピックバンド戦略"と呼ばれる.その主なアイデアは,価格と価格軌道に適合する粒子との間の平均幅に基づいて取引信号を構築することです.
戦略は,まず価格軌跡に合う粒子を定義する.重力と慣性の影響下で,粒子の軌跡は価格の周りに振動する.その後,粒子と価格の間の平均偏差を計算し,それを上下帯を構築するために使用する.価格が上下帯を突破すると,取引信号が生成される.
具体的には,戦略で定義された粒子位置式は,
pos:=if pos<close
nz(pos[1])+grav+traj
else
nz(pos[1])-(grav)+traj
ここにgrav
粒子を価格に近いものにする重力項を表す.traj
この2つの項目の組み合わせにより,粒子は価格の周りに振動する.
平均偏差を計算します.avgdist
価格と粒子の間で,それを上下帯を作るために使用します.
bbl=pos-sma(avgdist,varb)
bbh=pos+sma(avgdist,varb)
最後に,価格が上位帯より高ければロングで,下位帯より低い場合はショートします.
伝統的な移動平均戦略と比較して,この戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
適切なリスク管理措置には,誤った信号を減らすためのパラメータの最適化,明確なタイムフレームのタイミング規則の定義,適切なストップ損失ポジションの設定などが含まれます.
この戦略は,次の側面で最適化できます.
この戦略は,価格軌跡フィッティングを導入することで移動平均戦略を改善する.適応パラメータ,マルチタイムフレーム,ストップ損失最適化などのような機能があります.鍵は価格をシミュレートするための適切な粒子運動方程式を見つけることです.さらなるテストと最適化が必要ですが,基本的なアイデアは実行可能であり,さらなる研究に値します.
/*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)