Esta estrategia es un sistema de trading basado en el indicador VIDYA (Variable Index Dynamic Average). La estrategia se adapta a la volatilidad del mercado ajustando dinámicamente los pesos, combinando los métodos de cálculo de Momentum Oscillator (CMO) y Standard Deviation (StDev) de Chande para lograr una identificación de tendencia y generación de señales comerciales más precisas.
El núcleo de la estrategia es el indicador VIDYA, cuyo proceso de cálculo incluye estos pasos clave:
La estrategia permite a los usuarios elegir entre CMO o desviación estándar para el cálculo del coeficiente de volatilidad, aumentando la flexibilidad.
La estrategia VIDYA proporciona una tendencia relativamente confiable después de la solución a través de mecanismos de peso adaptativos innovadores. Al tiempo que mantiene la simplicidad y facilidad de uso, la estrategia mejora la adaptabilidad a los cambios del mercado a través de ajustes dinámicos. Aunque existen algunas limitaciones inherentes, las direcciones de optimización proporcionadas pueden mejorar aún más la estabilidad y la confiabilidad de la estrategia.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © GriffinJames //@version=5 strategy("VIDYA Strategy", overlay=true, initial_capital=25000) // Inputs src = input(close, title="Source") pds = input.int(21, title="Length") fixCMO = input.bool(true, title="Fixed CMO Length (9)?") select = input.bool(true, title="Calculation Method: CMO/StDev?") alpha = 2 / (pds + 1) momm = ta.change(src) // Functions to calculate MOM f1(m) => m >= 0.0 ? m : 0.0 f2(m) => m >= 0.0 ? 0.0 : -m m1 = f1(momm) m2 = f2(momm) sm1 = fixCMO ? math.sum(m1, 9) : math.sum(m1, pds) sm2 = fixCMO ? math.sum(m2, 9) : math.sum(m2, pds) percent(nom, div) => 100 * nom / div chandeMO = na(percent(sm1 - sm2, sm1 + sm2)) ? 0 : percent(sm1 - sm2, sm1 + sm2) // Select calculation method k = select ? math.abs(chandeMO) / 100 : ta.stdev(src, pds) // Calculate VIDYA var float VIDYA = na VIDYA := na(VIDYA[1]) ? src : alpha * k * src + (1 - alpha * k) * VIDYA[1] // Conditions for long and short col12 = VIDYA > VIDYA[1] col32 = VIDYA < VIDYA[1] // Plot VIDYA with dynamic colors color2 = col12 ? color.new(color.blue, 0) : col32 ? color.new(color.maroon, 0) : color.new(color.blue, 0) plot(VIDYA, "VAR", color=color2, linewidth=2) // Long and Short Strategy if (col12) strategy.entry("Go Long", strategy.long) if (col32) strategy.entry("Go Short", strategy.short) // Alert for VIDYA color change alertcondition(ta.cross(VIDYA, VIDYA[1]), title="Color ALARM!", message="VIDYA has changed color!")