Estratégia de bandas giroscópicas baseada em quadros de tempo múltiplos e amplitude média

Autora:ChaoZhang, Data: 2023-11-24 17:29:39
Tags:

img

Resumo

Esta estratégia é chamada Gyroscopic Bands Strategy Based on Multi Time Frame and Average Amplitude. Sua ideia principal é construir sinais comerciais com base na amplitude média entre o preço e uma partícula que se encaixa na trajetória do preço.

Estratégia lógica

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.gravRepresenta o termo de gravidade que aproxima a partícula do preço;trajrepresenta o termo de inércia que mantém a tendência de movimento da partícula.

Então nós calcular o desvio médioavgdistentre 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.

Vantagens

Em comparação com as estratégias tradicionais de média móvel, esta estratégia tem as seguintes vantagens:

  1. Usar trajetórias de partículas para simular melhor as flutuações de preços;
  2. As bandas superior e inferior podem ser ajustadas de forma adaptativa com base na amplitude média histórica, o que favorece a captura de avanços;
  3. O design de quadros de tempo múltiplos pode alternar entre quadros de tempo altos e baixos para capturar mais oportunidades comerciais.

Riscos

Esta estratégia tem também alguns riscos:

  1. A configuração inadequada dos parâmetros do movimento das partículas pode causar sinais falsos ou sinais errados;
  2. Podem ocorrer conflitos de sinais ao alternar entre vários intervalos de tempo;
  3. Os sinais de ruptura das bandas superior e inferior podem aumentar o risco de stop loss.

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.

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros relacionados com o movimento das partículas para se adequarem à trajetória dos preços;
  2. Aumentar o número de camadas de período de tempo para confirmar sinais em períodos de tempo mais longos;
  3. Adicionar indicadores de volatilidade para evitar sinais durante violentas flutuações de mercado;
  4. Otimizar as estratégias de stop loss para reduzir a perda de stop loss único.

Conclusão

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)

Mais.