Estratégia da VB baseada em saldos de volume

Autora:ChaoZhang, Data: 2023-10-30 17:03:02
Tags:

img

Esta estratégia foi concebida com base no indicador de saldos de volume para determinar o poder de compra e de venda no mercado.

Estratégia lógica

O indicador de saldos de volume (VB) reflete a força motriz das variações de volume nos preços.

  1. Calcular a taxa de volatilidade intradiária do preço típico como a dinâmica do preço.

  2. Julgar o poder de compra e venda em perto pelo produto do volume e do ímpeto de preços.

  3. O indicador flutua acima e abaixo do eixo 0. Os critérios para medir o poder de compra e venda são a positividade e a negatividade do valor do indicador.

Esta estratégia constrói o indicador VB e define uma linha de sinal. Um sinal de compra é gerado quando o indicador VB cruza acima da linha de sinal. Um sinal de venda é gerado quando o indicador VB cruza abaixo da linha de sinal.

As principais etapas do código são:

  1. Calcular a taxa de volatilidade intradiária do preço típico como a dinâmica do preço.

  2. Defina o coeficiente do intervalo de corte para o momento. O excesso de momento acima do intervalo é tomado como coeficiente.

  3. Calcular o vcp de momento quantificado após o corte.

  4. Somar vcp para obter o indicador quantificado vfi.

  5. Definir o comprimento da linha de sinal sinalLength e obtê-lo vfima.

  6. Comparar o indicador VB vfi com a linha de sinal vfima para gerar sinais comerciais.

Vantagens

As vantagens desta estratégia são as seguintes:

  1. Use a relação volume-preço para julgar o poder de compra e venda, não afetado pelo preço em si.

  2. O intervalo de cálculo do momento quantificado pode ser controlado por parâmetros para evitar o impacto de flutuações anormais.

  3. A combinação da comparação entre o próprio indicador VB e a linha de sinal pode definir um calendário de entrada razoável.

  4. O método de cálculo do indicador é simples e claro, fácil de operar na negociação em tempo real.

  5. Parâmetros de indicadores e de linhas de sinal personalizáveis para otimizar o desempenho da estratégia.

Riscos

Esta estratégia apresenta também alguns riscos:

  1. O indicador VB é sensível a flutuações anormais de preços.

  2. A probabilidade de divergência dos preços em relação aos sinais dos indicadores é elevada.

  3. Os parâmetros do indicador e os parâmetros da linha de sinal necessitam de uma otimização adequada para evitar falsos sinais.

  4. Mais adequado para produtos com características de volume-preço óbvias, não adequado para produtos de baixa liquidez.

  5. Preste atenção à divergência do indicador, que pode indicar uma inversão do mercado.

Os riscos podem ser controlados ajustando a gama de parâmetros, utilizando outros filtros, permitindo uma perda de parada solta adequada, etc.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros de cálculo para o momento quantificado para equilibrar sensibilidade e estabilidade.

  2. Otimizar os parâmetros da linha de sinal para equilibrar atraso e ruído.

  3. Adicionar outros indicadores como a análise do volume de distribuição para verificação.

  4. Adicionar indicadores de tendência e de suporte/resistência para evitar operações desfavoráveis.

  5. Estabelecer um stop loss dinâmico com base na volatilidade do mercado.

  6. Use aprendizagem de máquina para encontrar a combinação de parâmetros ideal.

  7. Testes de retrocesso em vários produtos e prazos para avaliar a robustez.

  8. Comparar os parâmetros do indicador impacto na curva de lucro para encontrar o ideal.

Resumo

Esta estratégia julga o poder de compra/venda com base no indicador Volume Balances. Tem vantagens como design de indicador simples e parâmetros ajustáveis, e também riscos como sinais falsos.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("VB Strategy", overlay=true)

length = input(130, title="거래량 길이")
coef = input(0.2, title="계수")
vcoef = input(2.5, title="최대 계수")
signalLength=input(5)
smoothVFI=input(false, type=bool, title="부드럽게")
//볼밴
length2 = input(20, minval=1, title="볼밴 길이")

ma(x,y) => smoothVFI ? 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)
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 )
d=vfi-vfima

upper = vfima + stdev(vfi, length2)
lower = vfima - stdev(vfi, length2)

buysignal = cross(vfi, lower) and crossunder(vfi, lower) == 1 ? vfima : na

sellsignal = cross(vfi, upper) and crossover(vfi, upper) == 1 ? vfima : na

//times = timestamp("GMT+6", 2017, 12, 6, 00, 00)

//if (buysignal and times <= time)
if (buysignal)
    if(strategy.position_size < 0)
        strategy.close("SHORT")
        
    if(strategy.position_size > 0)
        strategy.order("LONG", true, 1, when = (low+high)/2)
        
    if(strategy.position_size == 0)
        strategy.entry("LONG", strategy.long, when = (low+high)/2)

//if (sellsignal and times <= time)
if (sellsignal)
    if(strategy.position_size > 0)
        strategy.close("LONG")
        
    if(strategy.position_size < 0)
        strategy.order("SHORT", false, 1, when = (low+high)/2)
        
    if(strategy.position_size == 0)
        strategy.entry("SHORT", strategy.short, when = (low+high)/2)


Mais.