Vamos a ver; aunque espero no ser yo el que necesite ayuda con esto.
Lanzas tu mql4 cuando tienes 1000 barras en pantalla...la función
Bars devolverá 1000. Justo al lanzarse este mql4 dicha función
IndicatorCounted() te dará 0...aquí viene lo de contar:
Un mql4 que vaya a graficar en pantalla incorpora "búferes", los cuales siempre deben estar referidos a una barra en particular (su número dentro de corchetes)
buffer[número de la barra]. Recordemos que la última barra aparecida es la número 0, la penúltima 1,etc.
Para que el búfer "recorra" todas las barras que nos interesen el número de barra lo representará un valor o índice (shift) cambiante...
buffer[shift] el cual debe mudar por alguna función operador circular tipo
while o
for. Supongamos que nuestro
shift irá de 1000 a 0.
Nuestro búfer empezará trabajando en
buffer[shift] cuando shift=1000 i acabará cuando shift=0. Al principio
IndicatorCounted() dará 0 y al final dará 1000; pues la función se refiere al número de barras que el bufer a tenido en consideración; por lo menos así lo entiendo yo...aunque no case semánticamente con la definición que nos dan.
No tengo claro que ocurre cuando el buffer pega saltos; por ejemplo si solo lo haces pasar por las barras 1000, 900, 300 y 100...no se si te daría 4 (visitadas por el búfer) o 900=1000-100(contando todo el intervalo). Ahora no me viene en gana comprobarlo, pero apuesto por lo primero.
Los indicadores se vuelven a calcular con cada nuevo tik del precio. Usando
IndicatorCounted() puedes evitar el gasto de que se reescriba toda la pantalla, limitándo el cálculo del búfer a una nueva barra aparecida; para ello se requiere que trabaje solo con shift=0...Básicamente se consigue con
Bars-IndicatorCounted()-1.
Si al final tenemos Bars=1000 e IndicatorCounted()=1000, al sugir una nueva barra Bars=1001 y IndicatorCounted()=1000...Si queremos calcular únicamente el búfer para una nueva barra que acaba de completarse Bars-IndicatorCounted()=1 no nos vale, pues la última barra es la 0: debemos utilizar Bars-IndicatorCounted()-1=0.
Emplo:
Código: Seleccionar todo
//---- variables
int ExtCountedBars,Shift;
//---- shift
ExtCountedBars=IndicatorCounted();
if (ExtCountedBars>0) { ExtCountedBars--; }
Shift=Bars-ExtCountedBars-1;
Lo de
if (ExtCountedBars>0) { ExtCountedBars--; } creo que tiene que ver con el modo de contabilización...no lo sé...y son las 5:00, por el amor de Dios.