Estrategia estocástica de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-01-29 11:54:10
Las etiquetas:

img

Resumen general

La estrategia estocástica de media móvil doble intenta identificar oportunidades de negociación utilizando una combinación de indicadores de media móvil y el oscilador estocástico.

Estrategia lógica

La estrategia se basa principalmente en dos indicadores técnicos:

  1. Promedios móviles: Cálcula una EMA rápida, una SMA lenta y una VWMA lenta utilizando diferentes parámetros, y genera señales comerciales cuando la EMA rápida cruza la SMA lenta.

  2. Oscilador estocástico: Calcula el valor de %K y considera que el mercado está sobrecomprado o sobrevendido cuando %K cruza los niveles de umbral superior o inferior preestablecidos, utilizando esto para filtrar algunas de las señales de la media móvil.

Específicamente, la lógica para la generación de señales es:

  1. Cuando la EMA rápida cruce por encima de la SMA lenta, y el %K está por debajo del nivel de sobreventa, vaya largo.

  2. Para las posiciones largas existentes, cierre cuando %K vuelva a entrar en la zona de sobrecompra o el precio rompa el stop loss.

Al combinar las medias móviles y el oscilador estocástico, la estrategia intenta identificar puntos de señal de promedio móvil de alta probabilidad para ingresar a las operaciones, mientras usa la estocástica para filtrar algunas de las señales falsas.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. La combinación de múltiples indicadores técnicos proporciona un juicio más completo que el uso de un solo indicador.
  2. El filtrado con el oscilador estocástico evita algunas señales falsas.
  3. El uso de múltiples promedios móviles con parámetros mixtos permite señales más robustas.
  4. Incorpora un mecanismo de stop loss para controlar las pérdidas de operaciones individuales.

Análisis de riesgos

También hay algunos riesgos:

  1. Las medias móviles pueden generar muchas señales inciertas que resultan en más entradas falsas; capacidad de stop loss limitada.
  2. El oscilador estocástico también puede producir señales incorrectas por sí mismo.
  3. La configuración de los parámetros requiere una optimización (por ejemplo, niveles de sobrecompra/sobreventa, períodos de media móvil) de lo contrario, el impacto en el rendimiento.
  4. Falta de análisis fundamental.

Mitigantes:

  1. Optimizar los parámetros para encontrar la mejor combinación de ajustes de indicadores.
  2. Utiliza el tamaño de posición más pequeño, escala en.
  3. Incorpore análisis fundamental para evitar eventos.

Oportunidades de mejora

Las principales oportunidades de optimización son:

  1. Prueba y optimiza los parámetros de promedio móvil para encontrar el óptimo.
  2. Prueba los parámetros estocásticos como zonas de sobrecompra/sobreventa para obtener ajustes óptimos.
  3. Incorpore indicadores adicionales como volumen o volatilidad para una lógica de entrada más rica.
  4. Mejorar la metodología de stop loss, por ejemplo, los trailing stops para reducir el riesgo.
  5. Mejorar la gestión del dinero, como el dimensionamiento dinámico de las posiciones basado en ATR.
  6. Evitar los eventos de riesgo con VIX, etc.

Conclusión

La estrategia estocástica de media móvil doble utiliza una mezcla de medias móviles y el oscilador estocástico para diseñar un sistema de seguimiento de tendencia robusto, pero tiene algunas oportunidades de mejora en torno a parámetros, paradas, etc. Los refinamientos adicionales como indicadores adicionales y optimizaciones pueden ofrecer un alfa más consistente.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("TVIX MEAN REV V2 TREND", overlay=true)
length = input(16, minval=1)
OverBought = input(80)
OverSold = input(20)
TradeLong = input (true)
TradeShort = input (true)

OverBoughtClose = input(80)
OverSoldClose = input(20)

smoothK = 3
smoothD = 3
trail_points = input(50)

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
k2 = sma(stoch(close, high, low, length), smoothK)
d2 = sma(k, smoothD)


// === GENERAL INPUTS ===
// short Ema
maFastSource = input(defval=close, title="Fast EMA Source")
maFastLength = input(defval=1, title="Fast EMA Period", minval=1)
// long Sma
maSlowSource = input(defval=close, title="Slow SMA Source")
maSlowLength = input(defval=100, title="Slow SMA Period", minval=1)
// longer Sma
maSlowerSource = input(defval=close, title="Slower SMA Source")
maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1)

//ATR Stop Loss Indicator by Keith Larson
atrDays = input(7, "ATR Days Lookback")
theAtr = atr(atrDays)
atrModifier = input(5.0, "ATR Modifier")
//plot(atr * atrModifier, title="ATR")

LstopLoss = close - (theAtr * atrModifier)
SstopLoss = close + (theAtr * atrModifier)



// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
maSlower = vwma(maSlowerSource, maSlowerLength)
rsi = rsi(maSlowerSource, maSlowerLength)

// === PLOTTING ===
fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30)
slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30)
slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30)


// === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross
LongFilter = maFast > maSlow
ShortFilter = maSlow > maFast




BUY=crossover(k, d) and k < OverSold
SELL=crossunder(k, d) and k > OverBought

SELLCLOSE=crossover(k, d) and k < OverSoldClose
BUYCLOSE=crossunder(k, d) and k > OverBoughtClose

Open = open


if not na(k) and not na(d)
    if crossover(k, d) and k < OverSold and LongFilter and TradeLong
        strategy.entry("$", strategy.long, limit = Open, comment="Long")
    
    strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss  )
    ///strategy.close("$",when = open < LstopLoss  )
    
if not na(k) and not na(d)
    if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort
        strategy.entry("$1", strategy.short, limit = Open, comment="S")
        
    strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss  )
    ///strategy.close ("$1", when = open < SstopLoss) 
    
  
        





Más.