Esta estrategia combina las métricas de seguimiento de tendencias VFI y las medias móviles con el indicador de reversión Bollinger Bands para captar de manera adaptativa las tendencias y las reversiones en el mercado.
Los principales componentes de esta estrategia son:
Indicador de VFI para determinar la tendencia. Utiliza la tasa logarítmica de cambio del precio típico y el volumen de negociación para igualar razonablemente el precio y el volumen.
Indicador de diferencia de EMA para determinar la tendencia: calcula la diferencia porcentual entre la EMA de 20 días y la EMA de 50 días para juzgar la dirección de la tendencia a medio y largo plazo.
Las bandas de Bollinger para detectar reversiones. La banda media es la SMA de 20 días, y el ancho de las bandas es de 1.5 desviación estándar de la banda media. Las señales comerciales se generan cuando el precio rompe la banda superior o inferior.
Cuando el VFI se acerca a sus límites (0, 20), se considera que la probabilidad de reversión de tendencia es mayor.
Cuando el precio se rompe por encima de la banda superior de Bollinger y la diferencia entre VFI y EMA indica una tendencia al alza, vaya largo.
La introducción de la FPI hace que la relación precio-volumen sea más razonable y evita seguir ciegamente los precios.
La combinación de la diferencia de la EMA y el VFI hace que la determinación de la tendencia sea más fiable.
La combinación de bandas de Bollinger y VFI hace que la estrategia sea más adaptable a las fluctuaciones bidireccionales del mercado.
Los indicadores de precios de volumen no pueden evitar por completo el riesgo de fallas.
La diferencia EMA tiene cierto retraso y no puede reaccionar oportunamente a los giros a corto plazo.
Los parámetros inadecuados de las bandas de Bollinger pueden llevar a una sobreventa o captura del mercado.
Soluciones:
Combine varios indicadores para determinar la tendencia para evitar depender de uno solo.
Ajuste los parámetros de la EMA a los valores adecuados.
Prueba los impactos de los parámetros de Bollinger en la estrategia en diferentes condiciones de mercado.
Continúe optimizando los parámetros de VFI para hacerlo más sensible.
Añadir el juicio de ruptura basado en los canales de precios o el indicador de sobres.
Prueba la introducción de más indicadores de precios de volumen como OBV, PVT, etc.
Introducir técnicas de aprendizaje automático y IA para realizar la optimización de parámetros dinámicos.
Esta estrategia considera de manera integral el seguimiento de tendencias y la detección de reversión con VFI, diferencia EMA y bandas de Bollinger para capturar las fluctuaciones bidireccionales del mercado.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 00:00:00 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/ // © beststockalert //@version=4 strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true) source = close length = input(130, title="VFI length") coef = input(0.2) vcoef = input(2.5, title="Max. vol. cutoff") signalLength=input(5) // session pre = input( type=input.session, defval="0400-0935") trade_session = input( type=input.session, defval="0945-1700") use_trade_session = true isinsession = use_trade_session ? not na(time('1', trade_session)) : true is_newbar(sess) => t = time("D", sess) not na(t) and (na(t[1]) or t > t[1]) is_session(sess) => not na(time(timeframe.period, sess)) preNew = is_newbar(pre) preSession = is_session(pre) float preLow = na preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1] float preHigh = na preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1] // vfi 9lazybear ma(x,y) => 0 ? sma(x,y) : x typical=hlc3 inter = log( typical ) - log( typical[1] ) vinter = stdev(inter, 30 ) cutoff = coef * vinter * close vave = sma( volume, length )[1] vmax = vave * vcoef vc = iff(volume < vmax, volume, vmax) //min( volume, vmax ) mf = typical - typical[1] vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) ) vfi = ma(sum( vcp , length )/vave, 3) vfima=ema( vfi, signalLength ) //ema diff ema20 = ema(close,20) ema50 = ema(close,50) diff = (ema20-ema50)*100/ema20 ediff = ema(diff,20) // basis = sma(source, 20) dev = 1.5 * stdev(source, 20) upper = basis + dev lower = basis - dev ema9 = ema(source, 9) if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) )) strategy.entry("Long", strategy.long) if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) ) strategy.close("Long")