이 전략은
전략은 먼저 가격 궤도에 맞는 입자를 정의합니다. 중력과 관성의 영향으로 입자의 궤도는 가격 주위를 흔들립니다. 그 다음 입자와 가격 사이의 평균 오차를 계산하고 상위 및 하위 대역을 구성하는 데 사용합니다. 가격이 상위 또는 하위 대역을 통과하면 거래 신호가 생성됩니다.
구체적으로, 전략에서 정의된 입자 위치 공식은 다음과 같습니다.
pos:=if pos<close
nz(pos[1])+grav+traj
else
nz(pos[1])-(grav)+traj
여기grav
입자를 가격에 가깝게 만드는 중력 항을 나타냅니다.traj
입자의 움직임 추세를 유지하는 관성 항을 나타냅니다. 이 두 항목의 조합은 입자가 가격 주위를 흔들게합니다.
그러면 평균편차를 계산합니다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)