Indicadores: Better volume - página 2

oomeysh #:
Apliquei esse indicador no MT5, mas não está aparecendo nada...
Vá para as configurações de entrada do indicador e altere o - Type Of Volume Used (Tipo de volume usado) de Real Volume (Volume real) para Tick Volume (Volume de ticks).
obrigado pela explicaçao de plotar na tela apos a compilaçao, esta funcionando perfeitamente. grato

Eu inseri isso no Claude Sonnet 5.5 e ele exibiu o seguinte:

O que está bom

  • O layout dos buffers está correto: 3 buffers para 2 gráficos (dados do histograma + índice de cores, além da linha MA).
  • A lista de cores corresponde à paleta clássica do Better Volume. Os índices de 0 a 5 correspondem aos comentários.
  • As verificações de igualdade, como IntTimesRange == IntMaxTimesRange, são seguras aqui. O máximo da janela é calculado com a mesma expressão, de modo que os valores do tipo double coincidem exatamente quando a barra atual é a máxima.
  • O recálculo a partir de prev_calculated - 1 atualiza corretamente a barra em formação.

Bugs, começando pelos mais graves

1. Falha por valor fora do intervalo em históricos curtos (linhas 63–69). O limite de
é restrito apenas na primeira chamada. Digamos que um gráfico semanal ou mensal tenha 50 barras e minbars seja 100. A primeira chamada pula o loop e retorna `rates_total`. No tick seguinte, `prev_calculated` é 50, portanto o limite é 49. O loop da MA então lê `n = -1` e o indicador trava com a mensagem“matriz fora do intervalo”. Correção:

mql5

if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars);

2. O “Climax Churn” (magenta) é perdido em barras de baixa (linhas 116–121).
O bloco “Climax Sell” é executado após o “Climax Churn” e o sobrescreve. Portanto, uma barra que seja tanto um clímax de volume-intervalo quanto uma barra de churn só aparece em magenta se fechar acima do ponto médio. Se fechar abaixo, ela aparece em branco. A prioridade pretendida é que o Climax Churn tenha precedência sobre tudo o mais.

3. A “verificação adicional de churn” nunca pode ser acionada (linhas 123–125).
IntCandleRange > IntMiddlePrice * 2 se expande para alta - baixa > alta + baixa, o que só é verdadeiro se baixa < 0. Para qualquer instrumento normal, essa condição é código morto. A intenção provavelmente era uma comparação com uma faixa média ou algo semelhante, portanto, ela precisa ser redefinida, em vez de apenas corrigida.

4. O valor 20 codificado ignora o InpLookBack (linha 105).
Todo o restante usa InpLookBack, mas o teste de baixo volume usa i - 19, 20. Qualquer valor diferente de 20 torna as classes inconsistentes. Se InpLookBack for definido acima de 20, a detecção de baixo volume ainda analisa apenas 20 barras.

5. Dados de volume zero geram sinais falsos, e o padrão é uma armadilha.

  • O padrão é VOLUME_REAL, que é 0 na maioria dos símbolos de Forex e CFDs.
  • Com volume totalmente zero, IntTimesRange (0) == IntMaxTimesRange (0) e IntDividedRange (0) == IntMaxDividedRange (0) são ambas verdadeiras. O gráfico fica repleto de cores de clímax e agitação de clímax.
  • Proteja os indicadores com > 0 e defina o padrão como VOLUME_TICK.

6. Ausência de validação de entrada em OnInit.
InpMAPeriod <= 0 causa uma divisão por zero. InpLookBack <= 0 rompe a lógica da janela. Retorne INIT_PARAMETERS_INCORRECT para esses casos.

Pequenos detalhes

  • NormalizeDouble(..., 0) arredonda a MA para um número inteiro, o que distorce a linha em símbolos de baixo volume. Isso não é necessário.
  • As barras anteriores às minbars nunca são gravadas, e PLOT_DRAW_BEGIN não está definido. Defina-o e inicialize os buffers para que as primeiras barras não exibam dados incorretos.
  • A MA pode começar em MAPeriod - 1, e não em MAPeriod. Usar uma soma acumulada em vez de somar novamente 100 barras por barra também seria mais rápido.
  • As expressões ternárias repetidas do tipo `InpVolumeType == VOLUME_TICK ? ... : ...` ficariam mais claras se fossem reunidas em uma pequena função auxiliar.


    Versão corrigida pelo Claude e traduzida para o inglês em anexo. (Clique em “ir para a discussão” para ver o arquivo)
Arquivos anexados: