Как еще проверить, что запущена 1 копия эксперта. - страница 2

 
Dmitiry Ananiev:

а как узнать если запущен советник на другом компьютере. 
Допустим торгует советник по времени 3 часа в день сделок открытых нет. 
я ставлю совтеника на другой комп (ВПС) и не знаю,, что друга копия запущена на старом ВПС. Как узнать ? 

Что то записать в историю видимо и анализировать ее. Предложенная выше отложка как вариант.

 

Сохраняйте не 1 и 0, а текущее время. И периодически его обновляйте (например, раз в 10 секунд).

Если при запуске советника сохраненное время устарело больше, чем на 10 секунд, значит он отвалился аварийно (или вообще не запущен). Иначе — советник активен.

Куда сохранять — зависит от задачи. Если в рамках одного терминала, подойдут гл. переменные. Если в рамках компьютера — файл. Если в рамках счета — отложенный ордер (кодировать в СЛ/ТП/цене входа).

 
Andrey Khatimlianskii:

Сохраняйте не 1 и 0, а текущее время. И периодически его обновляйте (например, раз в 10 секунд).

Если при запуске советника сохраненное время устарело больше, чем на 10 секунд, значит он отвалился аварийно (или вообще не запущен). Иначе — советник активен.

Куда сохранять — зависит от задачи. Если в рамках одного терминала, подойдут гл. переменные. Если в рамках компьютера — файл. Если в рамках счета — отложенный ордер (кодировать в СЛ/ТП/цене входа).

Спасибо вам
 

Самый надежный способ через лок файл (подобные технологии используются в nix системах). Эксперт при запуске открывает/создает файл с именем символа и правами на запись. Если открытие не удалось потому что файл заблокирован - значит другой такой же эксперт запущен и держит его в открытом состоянии. 

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

 
Вадим Калашнков:

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


Если это на Windows, то возможны варианты.

 
PapaYozh:


Если это на Windows, то возможны варианты.

Какие варианты? Все дескрипторы держит не советник, а терминал. В случае любого вылета эксперта - терминал закрывает все дескрипторы. Если вылетает терминал целиком - Windows автоматически закрывает все дескрипторы. Пример вылета терминала и 100% работы лок файлов. В течении 10 секунд, до вылета эксперта вы не можете запустить эксперт в другом окне этого же символа. При этом, вариант с локом значительно проще и надежнее всех остальных велосипедов.

int lock_file = INVALID_HANDLE;

int OnInit()
{ 
  lock_file = FileOpen(_Symbol, FILE_WRITE | FILE_COMMON);

  if (lock_file == INVALID_HANDLE)   
    return INIT_FAILED;

  return INIT_SUCCEEDED;
}

void OnTick()

{

  Sleep(10000);

  int zero = 0;
  int terminate = 1 / zero;  // Вызов деления на ноль через 10 секунд
}

На реальном эксперте, через OnInit делать нельзя, по скольку в случае перезапуска эксперта или смены сета он не запустится. Инициализация эксперта происходит перед выгрузкой старой копии, которая не успевает освободить дескриптор. По этому на реальном эксперте нужно делать так:

void init()
{
  static bool first_start = true;
  
  if (!first_start)
    return;
    
  static lock_file = FileOpen(_Symbol, FILE_WRITE | FILE_COMMON);

  if (lock_file == INVALID_HANDLE) 
  {
    Alert("Duplicate start");
    int zero = 0;
    int terminate = 1 / zero; // На критически важных местах лучше не использовать ExpertRemove по скольку он не вызывает мнгновенное прекращение работы эксперта. 
                              // Т.е. функция OnTick доработает до конца. При делении на 0 производится мнгновенный вылет эксперта. 
  }

  first_start = false;
}

int OnInit()
{ 
  return INIT_SUCCEEDED;
}

void OnTick()

{
  init();
  
  Sleep(10000);

  int zero = 0;
  int terminate = 1 / zero;  // Вызов деления на ноль через 10 секунд
}
 
Вадим Калашнков:

Какие варианты? Все дескрипторы держит не советник, а терминал. В случае любого вылета эксперта - терминал закрывает все дескрипторы. Если вылетает терминал целиком - Windows автоматически закрывает все дескрипторы. Пример вылета терминала и 100% работы лок файлов. В течении 10 секунд, до вылета эксперта вы не можете запустить эксперт в другом окне этого же символа. При этом, вариант с локом значительно проще и надежнее всех остальных велосипедов.

Неоднократно нарывался на залоченый файл после вылета советника. До перезагрузки терминала открыть его не получалось.

 
Andrey Khatimlianskii:

Неоднократно нарывался на залоченый файл после вылета советника. До перезагрузки терминала открыть его не получалось.

Скорее всего, вы нарывались на это в тестере. Тестер не то же самое что реальный терминал. Тестер в MT5 от версии к версии изрядно глючит и после вылета может зависнуть не закрыв дескрипторы. К реальному эксперту это не относится. Там все работает стабильно.

Но стоит сделать замечание, что на Linux или Mac нужно проверять по скольку там все работает не нативно, через вино. Как там осуществляется проброс локов - не тестировал.
 
Вадим Калашнков:

Какие варианты? Все дескрипторы держит не советник, а терминал. В случае любого вылета эксперта - терминал закрывает все дескрипторы. Если вылетает терминал целиком - Windows автоматически закрывает все дескрипторы. Пример вылета терминала и 100% работы лок файлов. В течении 10 секунд, до вылета эксперта вы не можете запустить эксперт в другом окне этого же символа. При этом, вариант с локом значительно проще и надежнее всех остальных велосипедов.

На реальном эксперте, через OnInit делать нельзя, по скольку в случае перезапуска эксперта или смены сета он не запустится. Инициализация эксперта происходит перед выгрузкой старой копии, которая не успевает освободить дескриптор. По этому на реальном эксперте нужно делать так:

Так же сделал важное замечание по поводу работы на реальном эксперте. Там данную проверку нужно выносить в OnTick.

 
Вадим Калашнков:

Скорее всего, вы нарывались на это в тестере. Тестер не то же самое что реальный терминал. Тестер в MT5 от версии к версии изрядно глючит и после вылета может зависнуть не закрыв дескрипторы. К реальному эксперту это не относится. Там все работает стабильно.

Тестер от терминала я отличаю.

Возможно, что-то изменилось в работе с файлами. Но я бы не советовал решения, хорошо их не протестировав.