複数の時間枠と平均振幅に基づいたジロスコピー帯戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-24 17:29:39
タグ:

img

概要

この戦略は"マルチタイムフレームと平均幅に基づくジロスコピックバンド戦略"と呼ばれる.その主なアイデアは,価格と価格軌道に適合する粒子との間の平均幅に基づいて取引信号を構築することです.

戦略の論理

戦略は,まず価格軌跡に合う粒子を定義する.重力と慣性の影響下で,粒子の軌跡は価格の周りに振動する.その後,粒子と価格の間の平均偏差を計算し,それを上下帯を構築するために使用する.価格が上下帯を突破すると,取引信号が生成される.

具体的には,戦略で定義された粒子位置式は,

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)  

最後に,価格が上位帯より高ければロングで,下位帯より低い場合はショートします.

利点

伝統的な移動平均戦略と比較して,この戦略には以下の利点があります.

  1. 価格変動をより良くシミュレートするために粒子軌跡を使用する.
  2. 上部と下部帯は,過去平均振幅に基づいて適応的に調整可能で,突破を記録するのに便利です.
  3. マルチタイムフレーム設計では,より多くの取引機会を掴むために,高時枠と低時枠を切り替えることができます.

リスク

この戦略にはいくつかのリスクもあります:

  1. 粒子の動きのパラメータの設定が正しくない場合,誤った信号または誤った信号が発生する可能性があります.
  2. 複数のタイムフレームを切り替える際に信号衝突が発生する可能性があります.
  3. 上部と下部帯の突破信号はストップロスのリスクを増加させる可能性があります.

適切なリスク管理措置には,誤った信号を減らすためのパラメータの最適化,明確なタイムフレームのタイミング規則の定義,適切なストップ損失ポジションの設定などが含まれます.

オプティマイゼーションの方向性

この戦略は,次の側面で最適化できます.

  1. 粒子の動きに関するパラメータを最適化して価格軌道に合わせる
  2. タイムフレーム層の数を増やして,より高いタイムフレームで信号を確認する.
  3. 波動性指標を追加し,激しい市場変動の際に信号を避ける.
  4. ストップ・ロスの戦略を最適化して シングル・ストップ・ロスを減らす

結論

この戦略は,価格軌跡フィッティングを導入することで移動平均戦略を改善する.適応パラメータ,マルチタイムフレーム,ストップ損失最適化などのような機能があります.鍵は価格をシミュレートするための適切な粒子運動方程式を見つけることです.さらなるテストと最適化が必要ですが,基本的なアイデアは実行可能であり,さらなる研究に値します.


/*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)

もっと