Obtengo un valor ridículo con iMA()

 

Tengo un problema para obtener los valores de una media móvil simple. Reduje todo el código a este script para aislarlo del resto del EA:

void OnStart()
  {
   double ValoresMA[];
   ArraySetAsSeries(ValoresMA,true);
   int ManejadorMA = iMA(_Symbol,_Period,34,0,MODE_SMA,PRICE_MEDIAN);
   CopyBuffer(ManejadorMA,0,0,3,ValoresMA);
   double valorMA0 = NormalizeDouble(ValoresMA[0],6);
   double valorMA1 = NormalizeDouble(ValoresMA[1],6);
   PrintFormat("Valor de la MA de 34 actual: %i, y del período anterior: %i",valorMA0,valorMA1);
   //Resultado:
   //valorMA0: 1602263320
   //valorMA1: -59923384
  }

valorMA0 debería darme un valor cercano a 0,884 pero obtengo 1602263320.

valorMA1, que casi no cambia, da un valor muy distinto: -59923384.

¿Alguien me puede decir qué es lo que no estoy viendo, por favor?

 
Daniel Eduardo San Martin:

Tengo un problema para obtener los valores de una media móvil simple. Reduje todo el código a este script para aislarlo del resto del EA:

valorMA0 debería darme un valor cercano a 0,884 pero obtengo 1602263320.

valorMA1, que casi no cambia, da un valor muy distinto: -59923384.

¿Alguien me puede decir qué es lo que no estoy viendo, por favor?

Hola Daniel.

Veo que estás normalizando el valor con 6 dígitos. El valor del símbolo tiene 6 digitos? Puedes usar SYMBOL_DIGITS, _Digits, y Digits()

valor MA0 y valorMA1 son valores double, pero al imprimirlos estás usando %i, que se usa para enteros, en lugar de %f que creo que sería lo más correcto.


El resto lo veo bien

 
Enrique Enguix #:

Veo que estás normalizando el valor con 6 dígitos. El valor del símbolo tiene 6 digitos? Puedes usar SYMBOL_DIGITS, _Digits, y Digits()

valor MA0 y valorMA1 son valores double, pero al imprimirlos estás usando %i, que se usa para enteros, en lugar de %f que creo que sería lo más correcto.

Enrique, muchas gracias, era justamente el tema de tratar de imprimir como enteros los valores double.

Con respecto a _Digits, acepto la sugerencia; aunque veo que lo que hace NormalizeDouble() con el segundo argumento solo cambia la precisión del resultado, no da una falla ni un resultado totalmente distinto.

Gracias otra vez por ver esa "i" ;-)

 
Daniel Eduardo San Martin #:

Enrique, muchas gracias, era justamente el tema de tratar de imprimir como enteros los valores double.

Con respecto a _Digits, acepto la sugerencia; aunque veo que lo que hace NormalizeDouble() con el segundo argumento solo cambia la precisión del resultado, no da una falla ni un resultado totalmente distinto.

Gracias otra vez por ver esa "i" ;-)

No hay de qué, para eso estamos, me alegra que lo solucionaras