La estrategia TradingVMA es una estrategia de negociación cuantitativa basada en líneas de promedio móvil variable. Utiliza promedios móviles cambiantes para capturar las tendencias del mercado y generar señales comerciales en consecuencia.
El núcleo de la estrategia TradingVMA es el cálculo de promedios móviles de longitud variable (Variable Moving Average, VMA).
Específicamente, la estrategia primero calcula una serie de cantidades intermedias, como el indicador de movimiento direccional de precios (PDM, MDIM), datos suavizados (PDM, MDM). Estos datos se utilizan finalmente para obtener la fuerza del indicador (iS). Este indicador refleja la intensidad de las fluctuaciones de precios.
Luego, la estrategia TradingVMA ajusta dinámicamente el período de promedio móvil en función de la fuerza del indicador. Cuando aumenta la volatilidad del mercado, el período de promedio móvil se vuelve más corto, y viceversa. Esto permite una respuesta más rápida a los cambios del mercado.
Por último, la estrategia compara el precio actual con el VMA para generar señales de negociación.
La estrategia de TradingVMA tiene las siguientes ventajas principales:
Los periodos variables filtran el ruido con mayor estabilidad
Una respuesta más rápida a los cambios de precios mejora la capacidad de respuesta
Reducción de la frecuencia de las operaciones y reducción de las operaciones excesivas - En comparación con los indicadores de período fijo, TradingVMA puede reducir las operaciones innecesarias.
Flexibilidad de parámetros personalizables: la estrategia permite a los usuarios seleccionar parámetros basados en sus preferencias para adaptarse a diferentes entornos de mercado.
La estrategia de TradingVMA también presenta los siguientes riesgos principales:
Cuando las tendencias se invierten rápidamente, la media móvil de ajuste continuo puede retrasarse en responder.
Bias de retraso
Las señales incorrectas
Difícil optimización de parámetros
Estos riesgos pueden controlarse mediante métodos como las pérdidas de parada, el ajuste de combinaciones de parámetros, etc.
La estrategia de TradingVMA también puede mejorarse en los siguientes aspectos:
Combinar otros indicadores
Optimización de parámetros
Reglas de negociación adaptativas
Sistemización
TradingVMA es una estrategia cuantitativa adaptativa. Captura las tendencias del mercado utilizando un indicador VMA especialmente diseñado, con la ventaja de ser sensible y filtrar el ruido. La estrategia se puede actualizar de múltiples maneras para un mejor rendimiento.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © laptevmaxim92 //@version=4 strategy("Variable Moving Average Strategy", overlay=true) src=close l =input(5, title="VMA Length") std=input(true, title="Show Trend Direction Colors") utp = input(false, "Use take profit?") pr = input(100, "Take profit pips") usl = input(false, "Use stop loss?") sl = input(100, "Stop loss pips") fromday = input(01, defval=01, minval=01, maxval=31, title="From Day") frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month") fromyear = input(2000, minval=1900, maxval=2100, title="From Year") today = input(31, defval=01, minval=01, maxval=31, title="To Day") tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month") toyear = input(2019, minval=1900, maxval=2100, title="To Year") use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)) k = 1.0/l pdm = 0.0 pdm := max((src - src[1]), 0) mdm = 0.0 mdm := max((src[1] - src), 0) pdmS = 0.0 pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm) mdmS = 0.0 mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm) s = pdmS + mdmS pdi = pdmS/s mdi = mdmS/s pdiS = 0.0 pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi) mdiS = 0.0 mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi) d = abs(pdiS - mdiS) s1 = pdiS + mdiS iS = 0.0 iS := ((1 - k)*nz(iS[1]) + k*d/s1) hhv = highest(iS, l) llv = lowest(iS, l) d1 = hhv - llv vI = (iS - llv)/d1 vma = 0.0 vma := (1 - k*vI)*nz(vma[1]) + k*vI*src vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA") longCondition = vma > vma[1] if (longCondition) strategy.entry("BUY", strategy.long and use_date) shortCondition = vma < vma[1] if (shortCondition) strategy.entry("SELL", strategy.short and use_date) if (utp and not usl) strategy.exit("TP", "BUY", profit = pr) strategy.exit("TP", "SELL", profit = pr) if (usl and not utp) strategy.exit("SL", "BUY", loss = sl) strategy.exit("SL", "SELL", loss = sl) if (usl and utp) strategy.exit("TP/SL", "BUY", loss = sl, profit = pr) strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)