Estrategia de negociación del sistema de promedios móviles de varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-12-12 16:07:18
Las etiquetas:

img

Resumen general

Esta estrategia adopta un sistema de promedio móvil de múltiples plazos, combinado con el RSI y otros indicadores técnicos, para lograr el cambio automático entre posiciones largas y cortas.

Principios

Los indicadores centrales de esta estrategia son el sistema de promedios móviles. La estrategia utiliza múltiples indicadores de promedios móviles como JMA, TEMA, DEMA para calcular las tendencias de precios en diferentes períodos como 15min, 30min, 60min. Por ejemplo, la tendencia MA calculada por JMA en el marco de tiempo de 15min representa el juicio de la tendencia de precios dentro de ese marco de tiempo. Luego, la estrategia compara las tendencias de precios entre diferentes marcos de tiempo para identificar divergencias entre tendencias más largas y más cortas. Si se detectan divergencias significativas, se generarán señales comerciales. Además, la estrategia también incorpora otros indicadores como RSI y Tendencia de onda para garantizar la confiabilidad de las señales comerciales.

Específicamente, las variables tendencia, tendencia2 y tendencia3 en la estrategia representan tendencias de precios de los marcos de tiempo de 15 minutos, 30 minutos y 60 minutos respectivamente. Si hay una inversión de precios de 15 minutos, mientras que 30 minutos y 60 minutos aún no se han invertido, se juzga como una divergencia entre tendencias más cortas y más largas, lo que produce una señal comercial. No se generarán señales si las tendencias de todos los marcos de tiempo son consistentes.

Al comparar las relaciones entre múltiples marcos de tiempo y filtrar algunas señales falsas, se pueden generar señales comerciales más confiables esta es la idea central de la estrategia.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Mejora de la fiabilidad de la señal mediante análisis de marcos de tiempo múltiples y filtrado de señales falsas;
  2. Evitar problemas con indicadores únicos mediante la combinación de múltiples indicadores para juicios integrales;
  3. Cambio automático entre posiciones largas y cortas sin intervenciones manuales, reduciendo la dificultad de operación.

Análisis de riesgos

También existen algunos riesgos con esta estrategia:

  1. El análisis de marcos de tiempo múltiples introduce incertidumbre sobre el momento de entrada en el comercio, lo que puede provocar la falta de los mejores precios de entrada;
  2. La configuración inadecuada de los parámetros al combinar múltiples indicadores podría provocar un deterioro de la calidad de las señales de negociación;
  3. El cambio automático de posición conlleva riesgos de sobreoptimización y un rendimiento comercial real más débil en comparación con las pruebas de retroceso.

Podemos tomar las siguientes medidas para mitigar los riesgos anteriores:

  1. Ajuste fino de los parámetros de los marcos de tiempo para garantizar la captura de señales a corto plazo para su entrada oportuna;
  2. Proceso de prueba posterior extenso para optimizar continuamente los parámetros de los indicadores;
  3. Intervenciones razonables en el comercio real para evitar el comercio a ciegas por sistemas automatizados.

Direcciones de optimización

Hay margen para una mayor optimización de esta estrategia:

  1. Introducir algoritmos de aprendizaje automático para optimizar automáticamente los parámetros de múltiples indicadores mediante el entrenamiento de modelos;
  2. Añadir ajustes de deslizamiento adaptativos basados en los niveles de volatilidad del mercado para mejorar el rendimiento de las operaciones reales;
  3. Incorporar mecanismos de confirmación del volumen de precios para evitar pérdidas por inversiones rápidas de tendencia.

Conclusión

Esta estrategia compara las tendencias de precios de varios marcos de tiempo para identificar relaciones a más largo plazo y a más corto plazo, y genera señales de negociación mediante el análisis de múltiples indicadores logrando el cambio automático entre los largos y los cortos con buenos resultados de pruebas de retroceso. También identificamos algunas áreas de mejora a través de métodos como el aprendizaje automático, el deslizamiento adaptativo y la confirmación de volumen para mejorar aún más el rendimiento comercial real.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Drexel Strategy", overlay=true )
Length1=7
Length2=9
Multiplier=input(1.5,"Multiplier")
jma(src,length) =>
    beta = 0.45*(length-1)/(0.45*(length-1)+2)
    alpha = beta
    tmp0 = (1-alpha)*src + alpha*nz(tmp0[1])
    tmp1 = (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1])
    tmp2 = tmp0[0] + tmp1[0]
    tmp3 = (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1])
    tmp4 = nz(tmp4[1]) + tmp3[0]
    JMA = tmp4
    JMA
rsx(src,length) =>
    f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
    f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
    f8 =  100.0*(src) 
    f18 = 3.0 / (length + 2.0) 
    f20 = 1.0 - f18 
    f10 = nz(f8[1])
    v8 = f8 - f10 
    f28 = f20 * nz(f28[1]) + f18 * v8 
    f30 = f18 * f28 + f20 * nz(f30[1])
    vC = f28 * 1.5 - f30 * 0.5 
    f38 = f20 * nz(f38[1]) + f18 * vC 
    f40 = f18 * f38 + f20 * nz(f40[1])
    v10 = f38 * 1.5 - f40 * 0.5 
    f48 = f20 * nz(f48[1]) + f18 * v10 
    f50 = f18 * f48 + f20 * nz(f50[1])
    v14 = f48 * 1.5 - f50 * 0.5 
    f58 = f20 * nz(f58[1]) + f18 * abs(v8) 
    f60 = f18 * f58 + f20 * nz(f60[1])
    v18 = f58 * 1.5 - f60 * 0.5
    f68 = f20 * nz(f68[1]) + f18 * v18 
    f70 = f18 * f68 + f20 * nz(f70[1])
    v1C = f68 * 1.5 - f70 * 0.5 
    f78 = f20 * nz(f78[1]) + f18 * v1C 
    f80 = f18 * f78 + f20 * nz(f80[1])
    v20 = f78 * 1.5 - f80 * 0.5
    f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0  : 0.0
    f90 = ((f88 == f90_) and (f0 == 0.0))  ? 0.0  : f90_
    v4_ = ((f88 < f90) and (v20 > 0.0000000001)) ? (v14 / v20 + 1.0) * 50.0 : 50.0
    rsx = ((v4_ > 100.0) ? 100.0 : (v4_ < 0.0) ? 0.0 : v4_)-50
    rsx
xPrice=open
emaA = ema(xPrice, Length2)  
Xprice = rsx(open,14)
XPrice = high, xprice = low
xe1 = jma(xPrice, Length1)
xe11 = jma(Xprice[1],Length1)
xe111 = jma(XPrice[1],Length1)
xe1111=jma(xprice[1],Length1)
xe2 = jma(xe1, Length1)
xe21 = jma(xe111, Length1)
xe3 = jma(xe2, Length1)
xe31 = jma(xe1111,Length2)
xe3a = jma(xe2,Length1)
xe4 = jma(xe3, Length1)
xe5 = jma(xe4, Length1)
xe6 = jma(xe5, Length1)
b = 0.7
c1 = -b*b*b
c2 = 3*b*b+3*b*b*b
c3 = -6*b*b-3*b-3*b*b*b
c3a = nz(c3a[1])
c4 = 1+3*b+b*b*b+3*b*b
TEMA = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
DEMA = 2 * emaA - ema(emaA, Length2)
Length(mod)=>(mod*c3a)+Length2
Trend1=TEMA/DEMA
a=rsx(open,Length(2))
b1=rsx(open,Length(3))
c=rsx(open,Length(5))
d=rsx(open,Length(8))
e=rsx(open,Length(13))
f=rsx(open,Length(21))
g=rsx(open,Length(34))
h=rsx(open,Length(55))
i=rsx(open,Length(89))
j=rsx(open,Length(144))
trend1 = (((a-b1)+(c-d)+(e-f)+(g-h)+(i-j))/10)
trend = trend1>0?avg(a,b,c4,c2):trend1==0?XPrice:avg(rsx(open,24),jma(open,24),rsx(jma(open,24),24))
trend2 = trend1>0?avg(d,e,c2,c1):trend1==0?XPrice:avg(rsx(open,48),jma(open,48),rsx(jma(open,48),48))
trend3 = trend1>0?avg(d,e,c2,c1):trend1==0?xprice:avg(rsx(open,96),jma(open,96),rsx(jma(open,96),96))
bc=request.security(syminfo.tickerid,'15',trend)
bc1=request.security(syminfo.tickerid,'15',trend2)
bc2=request.security(syminfo.tickerid,'15',trend3)
bd=request.security(syminfo.tickerid,'30',trend)
bd1=request.security(syminfo.tickerid,'30',trend2)
bd2=request.security(syminfo.tickerid,'30',trend3)
be=request.security(syminfo.tickerid,'60',trend)
be1=request.security(syminfo.tickerid,'60',trend2)
be2=request.security(syminfo.tickerid,'60',trend3)
bf=request.security(syminfo.tickerid,'120',trend)
bf1=request.security(syminfo.tickerid,'120',trend2)
bf2=request.security(syminfo.tickerid,'120',trend3)
bg=request.security(syminfo.tickerid,'240',trend)
bg1=request.security(syminfo.tickerid,'240',trend2)
bg2=request.security(syminfo.tickerid,'240',trend3)
bh=request.security(syminfo.tickerid,'D',trend)
bh1=request.security(syminfo.tickerid,'D',trend2)
bh2=request.security(syminfo.tickerid,'D',trend3)
Trend=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh))
Trend11=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh1))
Trend33 = max(min(min(min(bc2,bd2),min(be2,bf2)),bg2),bh2)
AverageTrend=sma(Trend1,1000)
StdDev=Multiplier*stdev(Trend1,1000)
TopBand=AverageTrend+StdDev
BotBand=AverageTrend-StdDev
ap=open
n1=10
n2=21
esa1 = jma(ap, n1)
d1 = jma(abs(ap - esa1), n1)
x1 = trend3==Trend33
y1 = trend2==Trend11 
ci = (ap - esa1) / (0.015 * d1)
tci = jma(ci, n2)
wt1=tci
wt2=sma(wt1,4)
fast=jma(open,5)
slow=jma(open,13)
macd=fast-slow
signal=sma(macd,4)
WaveTrend1=wt1-wt2
JMACD1=macd-signal
rsi = (((rsi(open,6))-50)*3)
g1=rsi>Trend1 and WaveTrend1>Trend1 and JMACD1>Trend1
h1=g1?tci*c3a:nz(h[1])
strategy.entry("Long",true,when=x1)
strategy.close("Long",y1)
strategy.entry("Short",false,when=y1)
strategy.close("Short",x1)

Más.