Хранение переменных

 
Доброго времени суток.
Интересует такой вопрос:
В советнике используются переменные, много.
Они задаются по ходу алгоритма и направляют дальнейшие телодвижения советника.
Не потеряются ли они при перезапуске терминала/сервера?

И еще один вопрос, одна функция по выполнению советника запрашивается несколько раз, она пересчитывается при каждом запросе или 1 раз за проход кода?
 

1)потеряются, храните в глобальных переменных. или в файле

2) скока раз вызываете столько раз пересчитывается 

 
FAQ:

1)потеряются, храните в глобальных переменных. или в файле

Спасибо.
Можно попросить какую либо инструкцию по поводу хранения в файле?
 

Шесть символов не дописали ;) https://docs.mql4.com/ru/files

А можно еще и дополнить вот так 

 
Pecmop: Не потеряются ли переменные при перезапуске терминала/сервера?

Перезапуск терминала состоит из двух фаз: ВЫХОД и повторный ЗАПУСК

Переменные  при ВЫХОДЕ терминала потеряются, так как занятая под них память освобождается.

При ЗАПУСКЕ терминала память под переменные будет выделена заново. В советнике наверняка есть инициализация (функция OnInit) переменных начальными значениями, что и будет выполнено. Если нужны прежние значения, то можно в прошлом сеансе работы попытаться сохранить их в файл в функции OnDeinit. Однако при аварийном выключении компьютера (дядя Петя щелкнул в подъезде рубильником) функция OnDeinit бесполезна. Тогда нужно периодически (раз в час, раз в ...) производить сохранение накопленной информации в файл. В функции OnInit производить проверку наличия файла и загружать данные из него. При отсутствии файла инициализировать переменные стандартными значениями. Но тогда в случае изменения стандартных значений придется перекомпилировать советник. Чтобы избежать этого надо иметь два файла - стандартных значений и последних значений. Самая простая логика: Загружаем из первого файла стандартные значения. Открываем второй файл. В случае ошибки успокаиваемся. Иначе загружаем последние значения.

Насчет функции. Если функция сложная (долго выполняется) и все разы возвращает одно и то же значение - целесообразно вызвать один раз и запомнить результат.

 
LRA:
Pecmop: Не потеряются ли переменные при перезапуске терминала/сервера?

Перезапуск терминала состоит из двух фаз: ВЫХОД и повторный ЗАПУСК

Переменные  при ВЫХОДЕ терминала потеряются, так как занятая под них память освобождается.

При ЗАПУСКЕ терминала память под переменные будет выделена заново. В советнике наверняка есть инициализация (функция OnInit) переменных начальными значениями, что и будет выполнено. Если нужны прежние значения, то можно в прошлом сеансе работы попытаться сохранить их в файл в функции OnDeinit. Однако при аварийном выключении компьютера (дядя Петя щелкнул в подъезде рубильником) функция OnDeinit бесполезна. Тогда нужно периодически (раз в час, раз в ...) производить сохранение накопленной информации в файл. В функции OnInit производить проверку наличия файла и загружать данные из него. При отсутствии файла инициализировать переменные стандартными значениями. Но тогда в случае изменения стандартных значений придется перекомпилировать советник. Чтобы избежать этого надо иметь два файла - стандартных значений и последних значений. Самая простая логика: Загружаем из первого файла стандартные значения. Открываем второй файл. В случае ошибки успокаиваемся. Иначе загружаем последние значения.

Насчет функции. Если функция сложная (долго выполняется) и все разы возвращает одно и то же значение - целесообразно вызвать один раз и запомнить результат.

Спасибо, в особенности за последнюю строку, как же сам не догадался)
Причина обращения: