Особенности языка mql5, тонкости и приёмы работы - страница 175

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.11.30 09:48

Памятка

Действие/тип программы Смена ТФ или символа Смена счета
Индикатор Запуск OnDeinit и OnInit, объект глобального класса меняется (полная перезагрузка). Ничего не происходит, кроме обнуления prev_calculated.
Советник Запуск OnDeinit и OnInit, объект глобального класса не меняется. Запуск OnDeinit и OnInit, объект глобального класса меняется (полная перезагрузка).

Подскажите, как при релогине (например, вручную) избежать полного перезапуска советника?

Не понимаю, зачем все обнуляется при релогине. Это недоработка?

 
fxsaber:

Работает, но можете предложить правильный макрос.

если вас не сильно волнует качество своих поделок, то меня тем более.

 
Vict:

если вас не сильно волнует качество своих поделок, то меня тем более.

Здесь пишут об особенностях MQL5.

 
fxsaber:

Здесь пишут об особенностях MQL5.

А кто сказал, что это особенность, а не ЮБ? В доках информация есть? В большинстве случаев ЮБ нужно для предоставления свободы компилятору делать всякие оптимизации, что там будет в различных кейсах в реальном коде в результате - хз, зависит от настроения оптимизатора. Я и в крестах могу прогнать этот код и получить некоторый результат, мне потом начать говорить: "смотрите какая особенность"?

У мкл вообще нет исчерпывающих доков, тут только на кресты ориентироваться если явно не указано иное.

 
Vict:

А кто сказал, что это особенность, а не ЮБ? В доках информация есть?

Здесь и пишут о том, чего нет в доках. Иначе смысла нет в ветке.

 
fxsaber:

Здесь и пишут о том, чего нет в доках. Иначе смысла нет в ветке.

Смысл в ветке бы был, если бы были комментарии разработчиков, а так...

Так-то да, в доках написано: порядок выполнения/execution order, - следовательно, вроде бы все у Вас и законно. Но, все таки, учитывая, что в плюсах - это действительно лютое ub, хотелось бы убедиться, что в справке действительно имеется ввиду именно execution order, а не associativity of operators.

 
fxsaber:

Подскажите, как при релогине (например, вручную) избежать полного перезапуска советника?

Не понимаю, зачем все обнуляется при релогине. Это недоработка?

Стояла задача при релогине упускать некоторые расчеты, а при смене счета удалять советник. Решилось через одно место.

Вот так выглядит оно, если нужно просто удалять советник при смене счета.

string GetGlobalNameAccount( void )
{
  return(::MQLInfoString(MQL_PROGRAM_NAME) + (string)::ChartID() + "_Account");
}

void SaveAccount( void )
{  
  if (!::GlobalVariableSet(GetGlobalNameAccount(), CurrentAccount))
    ::Alert("GlobalVariableSet - ERROR!");
  
  return;
}

int LoadAccount( void )
{
  int Res = 0;
  
  const string Name = GetGlobalNameAccount();
    
  if (::GlobalVariableCheck(Name))
  {
    Res = (int)::GlobalVariableGet(Name);
    
    ::GlobalVariableDel(Name);      
  }
  
  return(Res);
}

const int CurrentAccount = (int)AccountInfoInteger(ACCOUNT_LOGIN);
int PrevAccount = 0;

int OnInit( void )
{
  PrevAccount = LoadAccount();
  
  bool Res = !PrevAccount || (PrevAccount == CurrentAccount);
  
  if (Res)
  {
    // .....
  }
  else
    Alert("Account is changed! " + (string)PrevAccount + " -> " + (string)CurrentAccount);
    
  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
    SaveAccount();
}


Простейшая задача в MQL5 заставляет пританцовывать с подвывертом.

 
Vladimir Simakov:

Смысл в ветке бы был, если бы были комментарии разработчиков, а так...

Так-то да, в доках написано: порядок выполнения/execution order, - следовательно, вроде бы все у Вас и законно. Но, все таки, учитывая, что в плюсах - это действительно лютое ub, хотелось бы убедиться, что в справке действительно имеется ввиду именно execution order, а не associativity of operators.

Попрошу не засорять эту ветку. Ветка про особенности MQL5, а не C++

 
Artyom Trishkin:

Попрошу не засорять эту ветку. Ветка про особенности MQL5, а не C++

Жесть какая-то, один на UB пишет, другой ему слепо вторит. А ничего, что в МКЛ справке

Внимание: Приоритет выполнения операций в языке MQL5 соответствует приоритету, принятому в языке С++, и отличается от приоритета, заданного в языке MQL4.

А то, что в таблице названо "Порядок выполнения" на самом деле называется "ассоциативность" и никак не влияет на порядок вычисления, который в общем случае не определён.

Ну да ладно, дело неблагодарное, тут все пипец спецы какие, чего я лезу.

 
Vict:
Внимание: Приоритет выполнения операций в языке MQL5 соответствует приоритету, принятому в языке  С++, и отличается от приоритета, заданного в языке MQL4.

Скорее всего, это относится только к non-strict режиму.

Сотни людей годами пишут кроссплатформенные вещи здесь.