Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1315

 
Aleksey Mavrin:

есть такая хрень в МТ4, не знаю толи когда  ОнИнит срабатывает после смены счёта, то в окружении ещё не успевает номер счета обновиться, то ли ещё какой косяк, я решил таймером

много, что не так работает если терминал с работающим ЕА перегрузить

имхо, если код не для тестера, то все инициализации лучше сделать по приходу первого тика - тогда 99.9% все будет правильно проинициализировано

 
Igor Makanu:

много, что не так работает если терминал с работающим ЕА перегрузить

имхо, если код не для тестера, то все инициализации лучше сделать по приходу первого тика - тогда 99.9% все будет правильно проинициализировано

согласен, но наверное есть этот 0,1% ))

 
Igor Makanu:

много, что не так работает если терминал с работающим ЕА перегрузить

имхо, если код не для тестера, то все инициализации лучше сделать по приходу первого тика - тогда 99.9% все будет правильно проинициализировано

все инициализации лучше сделать по приходу первого тика - тогда 99.9% все будет правильно проинициализировано... это как ??

 
ponochka:

все инициализации лучше сделать по приходу первого тика - тогда 99.9% все будет правильно проинициализировано... это как ??

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

Можно прямо делать, избегая прокладки в виде "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:

Можно прямо делать, избегая прокладки в виде "My"

это не прокладка, а структурированный код

Ваш же пример это пример того, как лень написать лишних пару букв и получить несистематизированный код - тут как минимум 2 раза будет вызываться OnInit() при запуске ЕА , не факт, что это будет необходимо, вернее не нарушит, что то что было написано ранее - уровень вопросов Вы же видели?  )))

 
Igor Makanu:

это не прокладка, а структурированный код

Ваш же пример это пример того, как лень написать лишних пару букв и получить несистематизированный код - тут как минимум 2 раза будет вызываться OnInit() при запуске ЕА , не факт, что это будет необходимо, вернее не нарушит, что то что было написано ранее - уровень вопросов Вы же видели?  )))

first_run = true;

Нужно также проверять в Ините при первой инициализации и возможно уже там "обнулять".

А так да. согласен.


P.S. Не согласен, 2 раза вызываться не будет, если успели подключиться к серверу и получить с него актуальные данные.

 
Igor Makanu:

 не работает, ведь в документации написано что OnTick() в индикаторах не работает!

 
ponochka:

 не работает, ведь в документации написано что OnTick() в индикаторах не работает!

Ну это предел всему :(

Замените ОnTick() на

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[])
  {
А Я пойду в другую ветку.
 
Vitaly Muzichenko:

Ну это предел всему :(

я ж писал выше, про уровень вопросов ;)

а Вы уж начали искать оптимальность инициализации в OnTick/OnInit - там все проще, нужна защита для найденного кода, чтобы поделиться с такими же друзьями )))

Причина обращения: