Непонятка с терминалом - страница 3

 
stringo:

Так глобальные переменные и переинициализирутся. Но только при перезагрузке эксперта. Если эксперт всё время оставался в памяти, то и значения переменных, объявленных на глобальном уровне, не трогаются. Эти переменные не принадлежат ни одной функции - они принадлежат эксперту. А init и deinit - это всего лишь функции.

На самом деле такое поведение является фичей, а не багом. Другой вопрос - некоторая неполнота документации. Вот такие дискуссии и позволяют нам уточнять пропущенные в документации детали.


А как перезапусить эксперта? Имееться ввиду прикрепить к чарту вновь его или перезагрузить терминал а вместе с ним и эксперт заново запустится и проинициализируется? Ну остаётся посоветовать разработчикам ознакомится с документацией на свой программный продукт ... :о)

Почитайте как-нибудь на досуге доки и сверте с реальным положением вещей.

 
getch:
Данный ньюанс особенно актуален, когда на работающем советнике меняешь (клавиша F7) входные параметры. По логике советник должен выгрузиться со старыми входными параметрами и загрузиться с новыми. Но на деле выполняется только deinit(), а затем init() с новыми входными параметрами. Остальные переменные, объявленные вне функций (static не проверял) сохраняют свои значения. По этой причине все подобные переменные сбрасываю в начальное состояние в функции init().


Это скорее удобно, чем не удобно. Для решения конкретных алгоритмов используйте Коды причины деинициализации.

Если Входные параметры были изменены пользователем, то можете обнулить (если это предусматривает ваш алгоритм) в ините или деините глобальные переменные.

Если Символ или период графика был изменен, то (в зависимости от реализованного алгоритма) глоб. пер. можно обнулить или оставить как есть или выборочно.

(разработчикам: наверное, имеет смысл разделить символ и период на два разных кода деинициализации)

 
elritmo:


А как перезапусить эксперта? Имееться ввиду прикрепить к чарту вновь его или перезагрузить терминал а вместе с ним и эксперт заново запустится и проинициализируется? Ну остаётся посоветовать разработчикам ознакомится с документацией на свой программный продукт ... :о)

Почитайте как-нибудь на досуге доки и сверте с реальным положением вещей.


Обязательно перечитаю. Полезно бывает, когда глаз не замылен. Вообще-то, процентов 70 документации написано лично мной. И я признаю, что некоторые вещи написал недостаточно подробно, в некоторых местах посчитал, что то-то и то-то любому программисту ясно (пресловутый принцип умолчания), некоторые вещи просто упустил. Некоторые вещи написал только в одном месте, хотя надо было писать в нескольких местах (так как документацию редко кто читает подряд от начала и до конца). Все эти недоработки выясняются в процессе конструктивного диалога (как сейчас, например).

Эксперт загружается:

  • при первоначальном прикреплении к графику
  • при старте терминала, если эксперт был до этого прикреплён к активному графику
  • при восстановлении удалённого графика, если эксперт был прикреплён к этому графику
  • при смене профиля, если на каком-либо графике нового профиля прикреплён эксперт
  • при применении шаблона, если в шаблоне предусмотрен эксперт
  • при перекомпиляции эксперта, прикреплённого к одному из графиков текущего профиля
 

Слава, именно к докуметации и обращается народ. Если спрашивать на форуме то многие товарищи посылают на документацию. Ну и думаешь раз серёзный продукт то и докуметация к нему такая же - соответвующая истинному положению вещей. Провере пожалуйста её снова и скоректируйте. Хотя некоторые положения в документации такие как в языке но как видим есть существенные отличия и догадаться интуитивно программистам сложно без эксперементов с кодом. К примеру что локальня переменанная в дейстивиетльностиявляется глобальной. Может имеет смысл сделать объявление типа

void func() {

static int iVar; // значение функции не меняется при вызове функции (является какбы глобальной для этой функции) иначе она является локальной для этой функции.

}

Вообще где релоцируется память под переменные у вас? В куче в стеке или ещё где-то?

Работа с локальными переменными в функции которые хранятсяв стеке думаю значительно быстрее чем с переменными объявленными на глобальном уровне

Хот конечно сделать все переменные глобальными тоже можно (думаю это просто проще) но об этом стоит написать в документации и привести пример для новичков в MQL кто ещё не хлебнул этого языка.