Натолкните на мысль

 
Хочу узнать о восстановлении работы советника после неожиданной перегрузке компа или обрыве связи. Т е какие то параметры нужно куда то сохранять,хотелось бы узнать поподробней. Заранее благодарен.
 
На мой взгляд, лучше все пересчитать заново - наличие и направление открытых ордеров, состояние индикаторов и пр. Чтобы не делать этого при инициализации (всвязи с определенными ограничениями),  можно при инициализации создать некую статусную переменную и при первом пересчете в функции start() изменить ее. Таким образом первоначальные действия будут выполняться один раз до следующей перезагрузки советника.
int status_first;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
void init()
  {
//----
 
//----
   return;
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void deinit()
  {
//----
   
//----
   return;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
  {
//----
if(status_first==0)
{
//выполняем действия, необходимые при первом запуске после перезагрузки
status_first=1;
}
//выполняем обычные действия
//----
   return;
  }
 Или воспользуйтесь глобальными переменными. Нормальное описание в стандартном хелпе MetaEditor-a.
 
kostas:
На мой взгляд, лучше все пересчитать заново - наличие и направление открытых ордеров, состояние индикаторов и пр.
Или воспользуйтесь глобальными переменными. Нормальное описание в стандартном хелпе MetaEditor-a.
Не все можно пересчитать заново (например, движения индикатора на 0-м баре).
А в глобальные переменные записывать ничего не советую - при аварийном завершении работы он не сбрасываются на диск.

Пишите в файл ;)
 
komposter:
kostas:
На мой взгляд, лучше все пересчитать заново - наличие и направление открытых ордеров, состояние индикаторов и пр.
Или воспользуйтесь глобальными переменными. Нормальное описание в стандартном хелпе MetaEditor-a.
Не все можно пересчитать заново (например, движения индикатора на 0-м баре).
А в глобальные переменные записывать ничего не советую - при аварийном завершении работы он не сбрасываются на диск.

Пишите в файл ;)
А лучше всего, иметь открытые отложенные ордера, в поле примечания которых писать всю информацию необходимую для восстановления работы.
Разумеется, цены открытия таких отложенных ордеров должны быть запредельными.

Можно использовать для этих целей и поля примечания боевых ордеров. ..

С уважением - С.Д.
 
Sart:
А лучше всего, иметь открытые отложенные ордера, в поле примечания которых писать всю информацию необходимую для восстановления работы.
Разумеется, цены открытия таких отложенных ордеров должны быть запредельными.

Можно использовать для этих целей и поля примечания боевых ордеров. ..
Зачем? Это в MQL2 надо было извращаться, а тут-то зачем?
А комментарии ордеров может менять брокер, вариант не надежный.
 
komposter:
Зачем? Это в MQL2 надо было извращаться, а тут-то зачем?
А комментарии ордеров может менять брокер, вариант не надежный.
-----------------------------------------------------------------------------------
Можно ,конечно и в файл, учитывая, однако, что всякое обращение к внешнему устройству, сильно замедляет работу.
А что касается примечаний к ордерам, то я специально интересовался - первые 26 символов примечания торговый сервер не трогает.
Да оно вроде и логичнее использовать как внешнюю память примечания - тогда состояние наших торгов целиком хранится на торговом сервере.
В этом случае после "аварии" можно запускаться даже с другого компьютера.
А самое, главное - получим абсолютную синхронизацию состояний, чего можно не достичь при использовании файлов.
Да, еще, пользуясь случаем, хочу поблагодарить Вас за Вашу очень полезную функцию - AllOrdersInit(MagicNumber)
С уважением - С.Д.

 
Sart писал (а):
Можно ,конечно и в файл, учитывая, однако, что всякое обращение к внешнему устройству, сильно замедляет работу.
А установка ордера с комментарием не замедляет? ;)
Затраты на работу с файлом можно заметить только при тестировании/оптимизации, а там файлы ни к чему.
В реале эти доли секунд никак не повлияют на работу.

Sart писал (а):
Да оно вроде и логичнее использовать как внешнюю память примечания - тогда состояние наших торгов целиком хранится на торговом сервере. В этом случае после "аварии" можно запускаться даже с другого компьютера. А самое, главное - получим абсолютную синхронизацию состояний, чего можно не достичь при использовании файлов.
Это да. Единственная причина использовать ордера - хранение на сервере.
Но это далеко не всем надо.
 
Sart писал (а):
Можно ,конечно и в файл, учитывая, однако, что всякое обращение к внешнему устройству, сильно замедляет работу.
Кстати, как я понимаю работа с диском в ОС буферизована, то есть работа с файлом по идее должна быть работой главным образом с оперативной памятью.
 
Как мне кажеться, не мало еще зависит от логики работы самого эксперта.
Ведь если вы открываете только один ордер в одну сторону при выполнении некоторых условий, то ничего в принципе восстанавливать и не нужно. После включения терминала снова эксперт продолжит работу дальше.
В случае отработки некоторых видов вывода позиции из безубытка (типа локирование или усреднение), то здесь тоже можно организовать логику работы таковой, что просто контролируются точки открытия или сами отложенные ордера без восттановления начальных условий.

Поэтому запись в файл и постоянное сбрасывание его буферов - дело может и не нужное совсем.

Вариантов может быть много. Как я написал очень много зависит от логики самомго эксперта. Лучше всего, как мне кажется, чтоб вы говорили о конкретном варианте торговли, условия входа/выхода,  метод трейлинга и т.д. И тогда думаю ответ будет вам дан вполне определенный.  

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