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;