Esta estrategia primero calcula las medias móviles simples de 13 períodos y 26 períodos, y luego calcula el indicador FRAMA. Se hace largo cuando la línea rápida rompe la línea lenta de abajo hacia arriba, y sale de la posición cuando la línea rápida rompe la línea lenta de arriba hacia abajo o cuando el indicador FRAMA rompe el precio de cierre de arriba hacia abajo.
La estrategia utiliza principalmente el cruce de promedios móviles para generar señales comerciales. Cuando el promedio móvil a corto plazo rompe con el promedio móvil a largo plazo desde abajo hacia arriba, indica que la tendencia está cambiando de declive a alza, y va largo. Cuando el promedio móvil a corto plazo cruza por debajo del largo plazo, indica una reversión inminente y cierra la posición.
Mientras tanto, el indicador FRAMA se introduce como un juicio auxiliar. El indicador FRAMA es una línea de promedio móvil adaptativa mejorada sobre la base de la hipótesis del mercado fractal. Al calcular la tasa de cambio logarítmico de la amplitud de fluctuación de precios en diferentes períodos, estimó la dimensión fractal del mercado en tiempo real para ajustar dinámicamente la suavidad del promedio móvil. Cuando el indicador FRAMA cruza por debajo del precio de cierre, indica una señal de inversión de tendencia. Combinado con la señal de cruce de promedio móvil, mejora la precisión del juicio.
La estrategia combina el cruce de media móvil doble y el indicador FRAMA, que puede filtrar eficazmente las señales de ruptura falsas y mejorar la calidad de las señales de negociación.
En comparación con un solo indicador y modelo, esta estrategia puede mejorar significativamente la calidad de la señal y reducir la probabilidad de error de juicio.
Los principales riesgos de esta estrategia consisten en que las medias móviles duales pueden producir más señales falsas de ruptura, y las configuraciones de parámetros del indicador FRAMA también afectarán a la eficacia.
Para controlar los riesgos anteriores, los parámetros como los períodos promedio móvil pueden ajustarse en consecuencia o filtrarse con otros indicadores.
La estrategia se puede optimizar en los siguientes aspectos:
Prueba más combinaciones y períodos de medias móviles para encontrar el par de parámetros óptimo.
Añadir una estrategia de stop loss para controlar una sola pérdida.
Combinar los indicadores de volumen de operaciones para evitar una falsa ruptura bajo un volumen bajo.
Añadir modelos de aprendizaje automático para evaluar el estado del mercado en tiempo real y ajustar dinámicamente los parámetros.
Combinar indicadores de sentimiento, noticias y otros factores múltiples para mejorar la calidad de las decisiones.
Esta estrategia preliminar combina la aplicación de doble cruce de promedio móvil e indicador FRAMA. Sobre la base de mantener la simplicidad y la intuición, ha mejorado efectivamente la calidad de la señal y vale la pena probar y optimizar aún más.
/*backtest start: 2023-12-14 00:00:00 end: 2023-12-16 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Fractal Adaptive Moving Average",shorttitle="FRAMA",overlay=true) ma_fast = sma(close,13) ma_slow = sma(close,26) plot(ma_fast,color = green) plot(ma_slow, color = yellow) price = input(hl2) len = input(defval=16,minval=1) FC = input(defval=1,minval=1) SC = input(defval=198,minval=1) len1 = len/2 w = log(2/(SC+1)) H1 = highest(high,len1) L1 = lowest(low,len1) N1 = (H1-L1)/len1 H2 = highest(high,len)[len1] L2 = lowest(low,len)[len1] N2 = (H2-L2)/len1 H3 = highest(high,len) L3 = lowest(low,len) N3 = (H3-L3)/len dimen1 = (log(N1+N2)-log(N3))/log(2) dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1])) alpha1 = exp(w*(dimen-1)) oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1) oldN = (2-oldalpha)/oldalpha N = (((SC-FC)*(oldN-1))/(SC-1))+FC alpha_ = 2/(N+1) alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_) out = (1-alpha)*nz(out[1]) + alpha*price plot(out,title="FRAMA",color=purple,transp=0) entry() => crossover(ma_fast, ma_slow) and (out < close) exit() => crossover(ma_slow, ma_fast) or crossunder(out, close) strategy.entry(id= "MA cross", long = true, when = entry()) strategy.close(id= "MA cross", when = exit())