Podemos tentar resolver essa juntos, ainda não consegui chegar lá, mas acho que está perto, estou fazendo os acúmulos do Volume quando há novos topos e fundos, mas não parece bater com o indicador original, não sei exatamente o que é que eles estão acumulando:
Se alguém quiser contribuir, podemos fazer mais testes.

Parametro
  Periodo(3);
var
  tf, x, y, vol : Real;
  novaOnda : Booleano;
  cor : inteiro;
Inicio
  // Topo Fundo  
  tf := TopBottomDetector(Periodo);
  // Onda
  novaOnda := (tf <> tf[1]) e (tf = 0);
  Se (novaOnda) entao vol := quantidade
  Senao vol := vol[1] + quantidade;
  // Coloração
  Se (tf <> 0) entao 
    inicio
      Se (x = 0) entao x := tf
      Senao y := tf;
    fim;
  Se novaOnda  entao
    inicio
      Se x > y entao cor := 65280
      Senao Se x < y entao cor := 00255; 
        
      x := y;
      y := 0;            
    fim;   
  // Plotagem
  Plot(vol);
  SetPlotColor(1, cor);
Fim;