Autora:ChaoZhang, Data: 2024-01-25 12:43:43
Tags:

img

Resumo

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.

Estratégia lógica

Os principais componentes desta estratégia são:

  1. 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.

  2. Indicador de diferença EMA para determinar a tendência.

  3. 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.

  4. 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.

Vantagens

  1. A introdução da FIV torna a relação preço/volume mais razoável e evita seguir cegamente os preços.

  2. A combinação da diferença da EMA e do VFI torna a determinação da tendência mais fiável.

  3. A combinação das bandas de Bollinger e dos VFI torna a estratégia mais adaptável às flutuações bidirecionais do mercado.

Riscos

  1. Os indicadores de preços de volume não podem evitar completamente o risco de falhas.

  2. A diferença da EMA tem algum atraso e não pode reagir em tempo útil a curvas de curto prazo.

  3. Os parâmetros inadequados das Bandas de Bollinger podem levar a uma sobrecomercialização ou à captura do mercado.

Soluções:

  1. Combinar vários indicadores para determinar a tendência para evitar depender de um único.

  2. Ajustar os parâmetros da EMA aos valores adequados.

  3. Teste os impactos dos parâmetros de Bollinger na estratégia em diferentes condições de mercado.

Orientações de otimização

  1. Continuar a otimizar os parâmetros VFI para torná-lo mais sensível.

  2. Adicionar julgamento de ruptura com base em canais de preços ou indicador de envelopes.

  3. Teste a introdução de mais indicadores de volume de preços, como OBV, PVT, etc.

  4. Introduzir técnicas de aprendizagem de máquina e IA para realizar a otimização de parâmetros dinâmicos.

Conclusão

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")



Mais.