Esta estrategia se llama
La estrategia primero define una partícula que se ajusta a la trayectoria del precio. Bajo la influencia de la gravedad y la inercia, la trayectoria de la partícula oscilará alrededor del precio. Luego calcula la desviación promedio entre la partícula y el precio, y lo utiliza para construir bandas superiores e inferiores. Cuando el precio rompe la banda superior o inferior, se generan señales comerciales.
Específicamente, la fórmula de posición de las partículas definida en la estrategia es:
pos:=if pos<close
nz(pos[1])+grav+traj
else
nz(pos[1])-(grav)+traj
Aquí tienes.grav
representa el término de gravedad que hace que la partícula se acerque al precio;traj
representa el término de inercia que mantiene la tendencia del movimiento de la partícula.
Entonces calculamos la desviación mediaavgdist
entre el precio y la partícula, y utilizarlo para construir bandas superiores e inferiores:
bbl=pos-sma(avgdist,varb)
bbh=pos+sma(avgdist,varb)
Por último, vaya largo cuando el precio es mayor que la banda superior, y vaya corto cuando sea menor que la banda inferior.
En comparación con las estrategias tradicionales de promedios móviles, esta estrategia tiene las siguientes ventajas:
Esta estrategia también tiene algunos riesgos:
Las medidas de gestión de riesgos correspondientes incluyen: la optimización de parámetros para reducir las señales falsas, la definición de reglas claras de calendario, el establecimiento de posiciones de stop loss adecuadas, etc.
Esta estrategia puede optimizarse en los siguientes aspectos:
Esta estrategia mejora la estrategia de promedio móvil mediante la introducción de ajuste de trayectoria de precios. Tiene características como parámetros adaptativos, marcos de tiempo múltiples, optimización de stop loss, etc. La clave es encontrar una ecuación de movimiento de partículas adecuada para simular el precio. Aunque se necesitan más pruebas y optimización, la idea básica es factible y vale la pena investigar más.
/*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)