Valor del tick anterior - página 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


este código hace que el gráfico de mt4 se bloquee. ¿qué tiene de malo?

diferencia, TotalDescent se declaran como doble, con un valor inicial de 0. descentarray se declara como un array 1d sin número máximo de elementos. hay una declaración if para filtrar previousTick = 0 caso, y la contraparte TotalAscent funciona bien.

se ejecuta hasta que llega el primer tick de decrecimiento, entonces se bloquea. ¿hay algo que me haya perdido?

 

Por favor, utilice el botón </> para insertar su código.


 
J.P.Satrio:


este código hace que el gráfico de mt4 se bloquee. ¿qué tiene de malo?

diferencia, TotalDescent se declaran como doble, con un valor inicial de 0. descentarray se declara como un array 1d sin número máximo de elementos. hay una declaración if para filtrar previousTick = 0 caso, y la contraparte TotalAscent funciona bien.

se ejecuta hasta que llega el primer tick de decrecimiento, entonces se bloquea. ¿hay algo que me haya perdido?

¿dimensiona el array?

 
Keith Watford:

¿Dimensiona la matriz?

No, ya que no estoy seguro de qué tamaño sería necesario. Como he dicho, el lado de la ascensión funciona bien con la matriz sin un tamaño fijo establecido.
 
J.P.Satrio:
No, ya que no estoy seguro del tamaño necesario. Como he dicho, el lado de la ascensión funciona bien con el array sin un tamaño fijo establecido.

Tienes que dimensionar el array. Si no estás seguro del tamaño necesario, cada vez que quieras darle un elemento extra, aumenta el tamaño en uno.

 
Keith Watford:

Tienes que dimensionar el array. Si no estás seguro del tamaño necesario, cada vez que quieras darle un elemento extra, aumenta el tamaño en uno.

Lo intentaré con seguridad, gracias. Sin embargo, he visto muchos casos en los que los codificadores no establecieron un tamaño para las matrices. Todavía no sé por qué este caso es diferente.
Si tuviera que comprobar si hay necesidad de aumentar y redimensionar mi array en cada tick eso lo haría mucho más complejo, así que creo que voy a establecer un tamaño lo suficientemente grande para gestionar la cantidad de datos. ¿Qué pasa si un array se llena? (Nunca me ha pasado) ¿se bloquea de nuevo?
 
J.P.Satrio:
Lo intentaré con seguridad, gracias. Sin embargo, he visto muchos casos en los que los codificadores no establecieron un tamaño para las matrices. Todavía no sé por qué este caso es diferente.
Si tuviera que comprobar si hay necesidad de aumentar y redimensionar mi matriz en cada tic, eso lo haría mucho más complejo, así que creo que voy a establecer un tamaño lo suficientemente grande como para gestionar la cantidad de datos. ¿Qué pasa si un array se llena? (Nunca me ha pasado) ¿se bloquea de nuevo?

No creo que se dé el caso de que un array no tenga tamaño. Si intentas poner un valor en un elemento que no existe, el código se bloqueará.

 
Keith Watford:

No creo que se vea nunca un caso en el que un array no tenga tamaño. Si tratas de poner un valor en un elemento que no existe, el código se bloqueará.

Eso es todo. Gracias.
 

Este hilo me ayudó a desarrollar un código que me dirá la diferencia entre el Ask anterior y el Ask actual. Si la diferencia es cero entonces imprime 0.0, pero si la diferencia no es cero entonces hay demasiados dígitos, como 1.000000000006551e-05. ¿Hay algo mal en mi código o hay una manera de corregir esto? El símbolo es EURUSD, si eso importa. Este es mi primer código mql así que disculpas de antemano por las deficiencias. Gracias.

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

Este hilo me ayudó a desarrollar un código que me dirá la diferencia entre el Ask anterior y el Ask actual. Si la diferencia es cero entonces imprime 0.0, pero si la diferencia no es cero entonces hay demasiados dígitos, como 1.000000000006551e-05. ¿Hay algo mal en mi código o hay una manera de corregir esto? El símbolo es EURUSD, si eso importa. Este es mi primer código mql así que disculpas de antemano por las deficiencias. Gracias.

Por qué no...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}