Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1315

 
Aleksey Mavrin:

Existe tal cosa en MT4, no sé si cuando se dispara el OnInit después de cambiar la cuenta, el entorno no ha tenido tiempo de actualizar el número de cuenta o algún otro fallo, he decidido temporizar

muchas cosas van mal si se recarga el terminal con el EA en funcionamiento

imho, si el código no es para tester, entonces toda la inicialización es mejor hacerla cuando llega el primer tick - entonces el 99,9% de todo será inicializado correctamente

 
Igor Makanu:

muchas cosas van mal si el terminal con un EA en funcionamiento está sobrecargado

imho, si el código no es para un tester, entonces toda la inicialización es mejor hacerla cuando llega el primer tick - entonces el 99,9% de todo será inicializado correctamente

Estoy de acuerdo, pero probablemente hay un 0,1% ))

 
Igor Makanu:

muchas cosas van mal si el terminal con un EA en funcionamiento está sobrecargado

En mi opinión, si el código no es para los probadores, entonces es mejor inicializar todo cuando llega el primer tick - entonces el 99,9% de todo será inicializado correctamente

mejor hacer toda la inicialización cuando llega el primer tick - entonces el 99,9% de las cosas se inicializarán correctamente... ¿Cómo es?

 
ponochka:

todas las inicializaciones se hacen mejor al llegar el primer tick - entonces el 99,9% de todo se inicializará correctamente... ¿Cómo es?

void OnTick()
{
   static bool first_run = true;
   if(first_run)
   {
      MyOnInit();
      first_run = false;
   }
 
Igor Makanu:

Puedes hacerlo directamente, evitando un espaciador tipo 'My'

int OnInit()
  {
   ...
    account=AccountNumber();
   ...
  }

void OnTick()
{
  static bool first_run = true;
   if(first_run)
   {
     if(account==0) { // Если терминал не успел получить данные с сервера
      OnInit(); // пробуем снова всё инициализировать
      return;
     }
      first_run = false;
   }
 
Vitaly Muzichenko:

Puede hacerlo directamente evitando el relleno en forma de "Mi"

no es relleno, es código estructurado.

Su ejemplo es un ejemplo de cómo perezoso para escribir un par de letras adicionales y obtener el código no sistemática - aquí por lo menos 2 veces se llamará OnInit() cuando se ejecuta EA, no el hecho de que será necesario, o más bien no violar lo que fue escrito antes - el nivel de preguntas que usted vio, ¿verdad? )))

 
Igor Makanu:

no es una almohadilla, es un código estructurado

Su ejemplo es un ejemplo de la pereza de escribir un par de letras adicionales y obtener código desestructurado - aquí por lo menos 2 veces se llamará OnInit() en el inicio EA, no el hecho de que será necesario, o más bien no romperá lo que fue escrito antes - el nivel de preguntas que viste, ¿verdad? )))

first_run = true;

También es necesario comprobar en Init en la primera inicialización y tal vez ya allí "cero".

Por lo demás, sí, estoy de acuerdo.


P.D. No estoy de acuerdo, no se llamará 2 veces si se logra conectar al servidor y obtener datos reales de él.

 
Igor Makanu:

¡no funciona, porque está escrito en la documentación queOnTick() no funciona en los indicadores!

 
ponochka:

no funciona, porque la documentación dice queOnTick() no funciona en los indicadores.

Bueno, este es el límite :(

Sustituir OnTick() por

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
Y yo iré a la otra sucursal.
 
Vitaly Muzichenko:

Bueno, ese es el límite :(

He escrito más arriba, sobre el nivel de las preguntas ;)

Y empezaste a buscar la optimización de la inicialización en OnTick/OnInit - todo es más simple allí, necesitas protección para el código encontrado para compartir con los mismos amigos ))))

Razón de la queja: