Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1417

 
antes de enviar una orden necesitamos comprobar cuando se abrió la última posición en un símbolo, ¿qué será más rápido mirar en el historial o en la variable global del terminal?
 
lynxntech global del terminal?

No puede ser más rápido que en la variable. Sólo una corrección: puedes usar la variable global del terminal para guardarla al reiniciar el terminal, y mirar en el historial en OnInit(). Pero cuando vayas a OnTick(), este valor debe estar en la variable global de nivel, pero no en la variable global del terminal.

 
Alexey Viktorov #:

No puede ser más rápido que en una variable. Sólo una corrección: puedes usar la variable global del terminal para guardarla al reiniciar el terminal, y rebuscar en el historial en OnInit(). Pero cuando vayas a OnTick(), este valor debe estar en la variable de nivel global, pero no en la variable global del terminal.

Es la variable global del Terminal tan lenta, porque debería estar almacenada en la misma memoria que una normal, no es una gran cantidad de información que se pide al disco cuando es necesario.

 
lynxntech #:

¿Es una variable global tan lenta, ya que debe ser almacenada en la misma memoria que una variable normal, no es una gran cantidad de información que se solicita desde el disco cuando sea necesario.

A grandes rasgos, una variable global de terminal es casi como un fichero. Si no, ¿dónde se almacena cuando se apaga el ordenador? Y una variable de nivel global accesible desde cualquier lugar del programa es una variable en memoria. Naturalmente, es más rápida.

Resulta que en una nueva apertura es mejor escribir tanto en la variable de nivel global como en la variable global del terminal para restaurarla tras el reinicio del terminal. Pero mientras el terminal está funcionando, se debe comprobar la variable de nivel global.

 
Alexey Viktorov #:

A grandes rasgos, una variable global de terminal es casi como un fichero. Si no, ¿dónde se guarda cuando se apaga el ordenador? Y una variable de nivel global accesible desde cualquier lugar del programa es una variable en memoria. Naturalmente, es más rápida.

Resulta que en una nueva apertura es mejor escribir tanto en la variable de nivel global como en la variable global del terminal para restaurarla tras el reinicio del terminal. Pero mientras el terminal está funcionando, se debe comprobar la variable de nivel global.

Es decir, ¿comprobar el historial en OnDeinit y escribirlo en la variable global del terminal?

Idealmente, sólo hay un par de bytes de información en forma de texto, ¿no está contenida en la disponibilidad como variables habituales, es decir, en la RAM?

En OnInit lo leemos, lo escribimos en RAM, y luego cuando se actualiza la variable se sobrescribe.

¿Alguien ha medido esto realmente? O quizás los desarrolladores puedan ayudarnos a averiguarlo.

 
lynxntech #:

Es decir, ¿comprobar el historial en OnDeinit y escribir en el Terminal global?

Idealmente, sólo hay un par de bytes de información en forma de texto, ¿no está contenida en la disponibilidad como variables normales, es decir, en la RAM?

En OnInit lo leemos, lo escribimos en RAM, y luego cuando se actualiza la variable se sobreescribe.

¿Alguien ha medido esto realmente? O quizás los desarrolladores puedan ayudarnos a averiguarlo.

¿Quién habló de recoger la historia en OnDeinit()?

Hablaba de la necesidad de duplicar la variable en la variable terminal en la siguiente posición de apertura...

 
Alexey Viktorov #:

¿Quién ha dicho nada de recoger la historia en OnDeinit()?

Hablaba de la necesidad de duplicar la variable en la variable terminal en la siguiente posición de apertura...

todo se puede hacer, la pregunta era a los que midieron el trabajo real, y mejor a los desarrolladores, que sabe lo que tienen en sus planes.

No quiero experimentar, hay muchas otras tareas.

 

Buenas noches, queridos programadores.

Ayúdenme a resolver un problema simple. Hay un código de MQL4. Quiero adaptarlo a 5. Es decir, para trabajar de manera similar en MQL5.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Mi variante, obviamente, no pasa, por alguna razón hay un montón de errores):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

Buenas noches, queridos programadores.

Ayúdenme a resolver un problema simple. Hay un código de MQL4. Quiero adaptarlo a 5. Es decir, debe funcionar de manera similar en MQL5.


Mira en la ayuda

iHigh

y funciones similares

Si no funciona, hay un error en el bucle.

y no puedes ver a qué variable estás añadiendo datos

 
lynxntech #:

buscar en la ayuda

y funciones similares

si no funciona, hay un error en el bucle

y no puedes ver a qué variable estás añadiendo datos

Se supone que se muestra Highest / Lowest.

Mirado esto :

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

Muy cerca, pero no todavía.

Bien, muestra el NÚMERO de las últimas 10 (empezando por la primera "1") velas con el más bajo. Pero necesito el valor del precio, no el número de la vela.

Razón de la queja: