Работа советника внутри эксперта

 

А подскажите, пожалуйста. Если я внутри эксперта вызываю один и тот же советник, то он каждый раз вызывается по новой или для него сохраняются какие-нибудь глобальные переменные и функция OnInit выполняется один раз, а не каждый?

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

Или всё-таки правильнее такие советники переносить в код эксперта непосредственно?

 
А ну понятно что кроме сдвига будет меняться и запрашиваемый буфер, что при этом происходит тоже интересно.
 

Может не советник а индикатор?

 
Vinin:

Может не советник а индикатор?

 

нет именно советник, который использует индикатор. Ладно, думал что кто-то просто знает. Но в итоге написал тестовый советник и тестовый индикатор. Если параметры не менять, то функция onInit реально запускается только один раз, а глобальные переменные сохраняют свои значения в пределах одних и тех же параметров.
 
naparam:
нет именно советник, который использует индикатор. Ладно, думал что кто-то просто знает. Но в итоге написал тестовый советник и тестовый индикатор. Если параметры не менять, то функция onInit реально запускается только один раз, а глобальные переменные сохраняют свои значения в пределах одних и тех же параметров.
Просто советник и эксперт - это синонимы
 
Для терминала можно написать (см. MetaEditor: Файл --> Создать) три вида программ:
- Скрипт (вместо скрипта можно использовать советник с командой ExpertRemove();)
- Индикатор = индюк
- Cоветник = Эксперт = сова = робот = механическая торговая система МТС = автоматическая торговая система АТС
а также Библиотеку, Включаемый файл, Класс.

Инициализация эксперта или индикатора = выполнение функции OnInit() или устаревшей init() производится в случаях:
- Запуск программы (индикатор, советник) или запуск терминала с установленными индикаторами и советниками
- Программа перекомпилирована
- Символ или период графика был изменен
- Входные параметры были изменены пользователем
- Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета
- Применен другой шаблон графика

При перезапуске программы сохраняются предыдущие значения глобальных переменных программы,
т.е. тех переменных, которые объявлены вне функций (обычно в самом начале).
Если при перезапуске некоторые переменные  должны принимать определенные начальные значения, то это делается в функции OnInit() или устаревшей init(). Значения, которые должны сохраниться при перезапуске, должны содержаться в глобальных переменных программы.  Кроме глобальных переменных программы есть глобальные переменные терминала (см. GlobalVariableSet), которые можно использовать для обмена данными между программами одного терминала или сохранения значений при закрытии терминала.
Для обмена данными между программами разных терминалов можно использовать файлы в общей папке терминалов (см. FILE_COMMON).