Esta estrategia implementa una estrategia mejorada de compra y retención mediante la adición de un filtro basado en la volatilidad histórica.
En comparación con la simple compra y retención sin filtro, esta estrategia mejoró los rendimientos anualizados durante el período de prueba posterior de 28 años (7,95% frente a 9,92%) y redujo significativamente el desembolso máximo (50,79% frente a 31,57%).
Los principales riesgos provienen de la precisión de la metodología de cálculo de volatilidad y el ajuste de parámetros del filtro. Si el cálculo de volatilidad es inexacto, el filtro fallará. Si los parámetros del filtro están mal ajustados (demasiado conservadores o agresivos), puede afectar negativamente los retornos de la estrategia. Además, el rendimiento pasado no garantiza resultados futuros.
Considere agregar otros indicadores de confirmación como filtros adicionales, como promedio móvil a largo plazo, índice ADX, etc. El ajuste de parámetros también es crítico, como probar diferentes períodos de retroceso, filtrar umbrales, etc. También se pueden usar técnicas de aprendizaje automático y análisis de series de tiempo para construir y optimizar el modelo de predicción de volatilidad.
Esta estrategia mejoró en gran medida los rendimientos y redujo la extracción máxima de una estrategia de compra y retención de SPY a través de un sencillo filtro de volatilidad. Muestra la importancia de la identificación del régimen de mercado y la asignación de activos. Podemos refinarlo aún más optimizando el modelo de volatilidad y agregando señales de confirmación.
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h 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/ // // @author Sunil Halai // // This script has been created to demonstrate the effectiveness of using market regime filters in your trading strategy, and how they can improve your returns and lower your drawdowns // // This strategy adds a simple filter (The historical volatility filter, which can be found on my trading profile) to a traditional buy and hold strategy of the index SPY. There are other filters // that could also be added included a long term moving average / percentile rank filter / ADX filter etc, to improve the returns further. // // The filter added closes our long position during periods of volatility that exceed the 95th percentile (or in the top 5% of volatile days) // // Have included the back test results since 1993 which is 28 years of data at the time of writing, Comparing buy and hold of the SPY (S&P 500), to improved by and hold offered here. // // Traditional buy and hold: // // Return per year: 7.95 % (ex Dividends) // Total return : 851.1 % // Max drawdown: 50.79 % // // 'Modified' buy and hold (this script): // // Return per year: 9.92 % (ex Dividends) // Total return: 1412.16 % // Max drawdown: 31.57 % // // Feel free to use some of the market filters in my trading profile to improve and refine your strategies further, or make a copy and play around with the code yourself. This is just // a simple example for demo purposes. // //@version=4 strategy(title = "Simple way to beat the market [STRATEGY]", shorttitle = "Beat The Market [STRATEGY]", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100) upperExtreme = input(title = "Upper percentile filter (Do not trade above this number)", type = input.integer, defval = 95) lookbackPeriod = input(title = "Lookback period", type = input.integer, defval = 100) annual = 365 per = timeframe.isintraday or timeframe.isdaily and timeframe.multiplier == 1 ? 1 : 7 hv = lookbackPeriod * stdev(log(close / close[1]), 10) * sqrt(annual / per) filtered = hv >= percentile_nearest_rank(hv, 100, upperExtreme) if(not(filtered)) strategy.entry("LONG", strategy.long) else strategy.close("LONG")