Esta estrategia emplea dos promedios móviles, específicamente de 8 períodos y 21 períodos.
La estrategia también incorpora la pendiente de la línea de promedio móvil para filtrar algunos períodos que no son tendencias y solo produce señales cuando una tendencia es más evidente.
El núcleo de esta estrategia radica en el cruce de los promedios móviles a corto y largo plazo. El MA más corto puede capturar los cambios de tendencia más rápido, mientras que el MA más largo tiene mejores efectos de filtrado de ruido. Se sugiere el establecimiento de una tendencia alcista cuando el MA más corto cruza el MA más largo, lo que conduce a una señal larga; se sugiere el establecimiento de una tendencia bajista cuando el MA más corto cruza por debajo del MA más largo, lo que conduce a una señal corta.
La estrategia también establece un umbral de pendiente. Solo cuando la pendiente es mayor que el valor de umbral positivo se generará una señal larga. Solo cuando la pendiente es menor que el valor de umbral negativo se generará una señal corta. Esto ayuda a filtrar zonas donde no existe una tendencia pronunciada, lo que resulta en señales comerciales de mayor calidad.
Específicamente, la lógica para generar señales comerciales es:
Las ventajas de esta estrategia incluyen:
También existen algunos riesgos con esta estrategia:
Algunas formas de optimizar basado en estos riesgos:
Algunas direcciones para optimizar la estrategia:
En resumen, esta estrategia de doble MA es simple y práctica. Al capturar diferentes características de tendencia a través de los dos parámetros de período y combinarlas para generar señales comerciales. Mientras tanto, incorporar el umbral de pendiente mejora la calidad de la señal. Esta estrategia puede servir como una base para extensiones, con un amplio espacio y potencial de optimización.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //written by sixpathssenin //@version=4 strategy(title="Dual Moving Average",initial_capital=10000,overlay=true) ma1= sma(close,8) ma2= sma(close,21) angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13) i_lookback = input(2, "Angle Period", input.integer, minval = 1) i_atrPeriod = input(10, "ATR Period", input.integer, minval = 1) i_angleLevel = input(6, "Angle Level", input.integer, minval = 1) i_maSource = input(close, "MA Source", input.source) f_angle(_src, _lookback, _atrPeriod) => rad2degree = 180 / 3.141592653589793238462643 //pi ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback) ang _angle = f_angle(ma2, i_lookback, i_atrPeriod) plot(ma1,color=#FF0000) plot(ma2,color=#00FF00) crosso=crossover(ma1,ma2) crossu=crossunder(ma1,ma2) _lookback = 15 f_somethingHappened(_cond, _lookback) => bool _crossed = false for i = 1 to _lookback if _cond[i] _crossed := true _crossed longcrossed = f_somethingHappened(crosso,_lookback) shortcrossed = f_somethingHappened(crossu,_lookback) long = longcrossed and _angle > angleCriteria short= shortcrossed and _angle < -(angleCriteria) if(long) strategy.entry("Long",strategy.long) if(short) strategy.entry("short",strategy.short)