Estrategia de negociación con sistema de media móvil de múltiples líneas de tiempo


Fecha de creación: 2023-12-12 16:07:18 Última modificación: 2023-12-12 16:07:18
Copiar: 1 Número de Visitas: 648
1
Seguir
1621
Seguidores

Estrategia de negociación con sistema de media móvil de múltiples líneas de tiempo

Descripción general

Esta estrategia utiliza un sistema de línea uniforme de múltiples ejes temporales, combinado con varios indicadores técnicos, como el indicador RSI, para lograr una conmutación automática multi-espacio. La estrategia se llama Multi-Timeframe Moving Average System Trading Strategy. La idea principal es determinar la tendencia de los precios en diferentes períodos de tiempo para generar una señal de negociación más confiable.

Principio de estrategia

El indicador central de la estrategia es el sistema de línea media. La estrategia utiliza varios indicadores de línea media, como JMA, TEMA y DEMA, para calcular la tendencia de los precios en diferentes períodos, como 15 minutos, 30 minutos y 60 minutos. Por ejemplo, el movimiento de línea media calculado por JMA durante 15 períodos se utiliza como una tendencia de precios en ese período. La estrategia luego compara el movimiento de precios en diferentes períodos para determinar si existe una divergencia entre la línea larga y la línea corta.

En concreto, las variables trend, trend2 y trend3 de la estrategia representan tendencias de precios de 15 minutos, 30 minutos y 60 minutos, respectivamente. Si el precio se invierte durante 15 minutos y no se invierte durante 30 minutos y 60 minutos, se produce una señal de negociación si se determina que existe un desvío entre la línea corta y la larga. Si todas las tendencias de ciclo son consistentes, no se produce una señal de negociación.

La idea central de esta estrategia es que, al comparar las relaciones entre varios ciclos, se filtran algunas señales falsas y se producen señales de negociación más fiables.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de análisis de múltiples ejes de tiempo para mejorar la fiabilidad de la señal y filtrar las señales falsas;
  2. La combinación de varios indicadores para un juicio integrado, evitando los problemas de un solo indicador;
  3. El cambio automático de cabezas múltiples, sin necesidad de intervención manual, reduce la dificultad de operación.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. El análisis de múltiples ejes de tiempo aumentará la incertidumbre en el momento de la transacción, lo que podría hacer que se pierda el mejor momento de entrada;
  2. Al mismo tiempo, en combinación con varios indicadores, la configuración incorrecta de los parámetros de los indicadores puede generar problemas de calidad de la señal de negociación.
  3. Hay un riesgo de optimización de la multi-cabeza vacía de conmutación automática, y la eficacia del disco duro puede ser menor que la de la retroalimentación.

Para mitigar los riesgos mencionados, podemos tomar las siguientes medidas:

  1. Ajustar los parámetros de la línea de tiempo para asegurar que las señales de línea corta ingresen en vez en el momento oportuno;
  2. Optimizar continuamente los parámetros de los indicadores a través de una gran cantidad de datos;
  3. Intervención adecuada en el mercado real para evitar el comercio ciego de los sistemas automáticos.

Dirección de optimización

La estrategia tiene espacio para ser optimizada aún más:

  1. Puede introducir algoritmos de aprendizaje automático para optimizar los parámetros multi-indicadores a través del entrenamiento del modelo.
  2. Se puede agregar una configuración de punto de deslizamiento adaptable para ajustar el tamaño del punto de deslizamiento en función de la volatilidad del mercado y mejorar la efectividad del disco rígido;
  3. Se puede introducir un mecanismo de confirmación de los precios para evitar las pérdidas de una rápida reversión de la tendencia.

Resumir

Esta estrategia determina la relación entre largas y cortas líneas a través de la comparación de movimientos de precios en el eje temporal, genera señales de negociación en combinación con análisis integrado de varios indicadores, realiza un cambio automático de múltiples cabezas vacías y tiene un buen efecto de retroalimentación. También encontramos que hay cierto espacio para mejorar la estrategia, y en el futuro se optimizará mediante la introducción de métodos de aprendizaje automático, deslizamiento de adaptación y confirmación de precios.

Código Fuente de la Estrategia
/*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)