Esta estratégia combina as métricas de tendência VFI e Média Móvel com o indicador de reversão Bollinger Bands para captar as tendências e reversões no mercado de forma adaptativa.
Os principais componentes desta estratégia são:
Indicador VFI para determinar a tendência. Utiliza a taxa logarítmica de mudança do preço típico e do volume de negociação para combinar razoavelmente preço e volume.
Indicador de diferença EMA para determinar a tendência.
Bollinger Bands para detectar reversões. A faixa do meio é a SMA de 20 dias, e a largura das bandas é de 1,5 desvio padrão da faixa do meio. Os sinais de negociação são gerados quando o preço quebra a faixa superior ou inferior.
Quando o VFI se aproxima dos seus limites (0, 20), considera-se que a probabilidade de inversão da tendência é maior.
Quando o preço ultrapassar a faixa superior de Bollinger e a diferença entre VFI e EMA indicar uma tendência ascendente, vá longo.
A introdução da FIV torna a relação preço/volume mais razoável e evita seguir cegamente os preços.
A combinação da diferença da EMA e do VFI torna a determinação da tendência mais fiável.
A combinação das bandas de Bollinger e dos VFI torna a estratégia mais adaptável às flutuações bidirecionais do mercado.
Os indicadores de preços de volume não podem evitar completamente o risco de falhas.
A diferença da EMA tem algum atraso e não pode reagir em tempo útil a curvas de curto prazo.
Os parâmetros inadequados das Bandas de Bollinger podem levar a uma sobrecomercialização ou à captura do mercado.
Soluções:
Combinar vários indicadores para determinar a tendência para evitar depender de um único.
Ajustar os parâmetros da EMA aos valores adequados.
Teste os impactos dos parâmetros de Bollinger na estratégia em diferentes condições de mercado.
Continuar a otimizar os parâmetros VFI para torná-lo mais sensível.
Adicionar julgamento de ruptura com base em canais de preços ou indicador de envelopes.
Teste a introdução de mais indicadores de volume de preços, como OBV, PVT, etc.
Introduzir técnicas de aprendizagem de máquina e IA para realizar a otimização de parâmetros dinâmicos.
Esta estratégia considera de forma abrangente a detecção de tendências e inversões com VFI, diferença EMA e Bandas de Bollinger para capturar flutuações de mercado de duas vias.
/*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")