Esta estratégia é chamada
A estratégia define primeiro uma partícula que se encaixa na trajetória do preço. Sob a influência da gravidade e da inércia, a trajetória da partícula oscilará em torno do preço. Em seguida, calcula-se o desvio médio entre a partícula e o preço e é usado para construir bandas superiores e inferiores. Quando o preço atravessa a faixa superior ou inferior, são gerados sinais de negociação.
Especificamente, a fórmula de posição das partículas definida na estratégia é:
pos:=if pos<close
nz(pos[1])+grav+traj
else
nz(pos[1])-(grav)+traj
Aqui.grav
Representa o termo de gravidade que aproxima a partícula do preço;traj
representa o termo de inércia que mantém a tendência de movimento da partícula.
Então nós calcular o desvio médioavgdist
entre o preço e a partícula, e usá-lo para construir as faixas superior e inferior:
bbl=pos-sma(avgdist,varb)
bbh=pos+sma(avgdist,varb)
Por fim, vá longo quando o preço for maior que a faixa superior e vá curto quando for menor que a faixa inferior.
Em comparação com as estratégias tradicionais de média móvel, esta estratégia tem as seguintes vantagens:
Esta estratégia tem também alguns riscos:
As medidas de gestão de risco correspondentes incluem: a otimização dos parâmetros para reduzir os falsos sinais, a definição de regras claras de calendário, o estabelecimento de posições de stop loss adequadas, etc.
Esta estratégia pode ser otimizada nos seguintes aspectos:
Esta estratégia melhora a estratégia de média móvel através da introdução de ajuste de trajetória de preço. Tem características como parâmetros adaptativos, quadros de tempo múltiplos, otimização de stop loss, etc. A chave é encontrar uma equação de movimento de partícula adequada para simular o preço. Embora sejam necessários mais testes e otimização, a ideia básica é viável e vale a pena mais pesquisa.
/*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)