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

 

Всем привет, какие еще существуют варианты, проверки что на установлена только 1 копия советника на чарт кроме глобальных переменных?

Сейчас у меня при инициализации ЕА проверяется ГП, если там 0, то значит первая копия, записываем 1 и советник работает, если загрузить еще 1 копию, соответственно при инициализации советник видит там 1, и выгружается, далее, при деинициализации туда пишем 0. Но дело в том, что при резком завершении работы (при выкл света например), советник не успевает записать 0, так как при аварии вызов OnDeinit не происходит. И после запуска терминала, глобальная переменная еще содержит информацию, что советник запущен, и при инициализации и проверке, получается что эта же копия проверяет, что уже что-то работает, и не запускается, потому что думает что советник уже работает, а по факту это старые данные после аварийного закрытия терминала. Надеюсь понятно написал. В общем вопрос, если ли какой-то другой способ узнать, что советник уже висит на чарте и работает.

 

Пройтись по всем графикам, на каждом посмотреть имя эксперта:

ChartGetString(id,CHART_EXPERT_NAME)

Но есть одна проблемка, эксперты с одинаковыми именами могут находиться  разных папках.
 

1. при запуске пробежать все открытые чарты (ChartFirst ChartNext), посмотреть нет-ли с тем-же символом и не запущен ли там одноименный эксперт (ChartGetString(CHART_EXPERT_NAME))

2. если есть, то пока не работать а повторить проверку через случайное время. Повторить трижды :-)

3. когда 3 попытки исчерпались, а ТОТ эксперт всё ещё есть значит он действительно есть, то громко кричим Alert и делаем харакири ExpertRemove

ситуация гонок всё-равно остаётся, но шанс что при старте терминала "убьются" оба эксперта минимален

 
Pavel KomarovskyВ общем вопрос, если ли какой-то другой способ узнать, что советник уже висит на чарте и работает.

может я опять не в тему - но работет эксперт или нет - можно узнать так 

//+------------------------------------------------------------------+
//|                                                     rabotaet.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Print("rabotaet");
//---
  }
//+------------------------------------------------------------------+
 
Всех благодарю за ответы, особенно SanAlex, буду пробовать.
 
Да прошу прощения, а как сделать такую проверку на МТ4? ChartGetString(CHART_EXPERT_NAME) есть только под МТ5.
 
Pavel Komarovsky:
Да прошу прощения, а как сделать такую проверку на МТ4? ChartGetString(CHART_EXPERT_NAME) есть только под МТ5.

Вроде нет такого. Можно попробовать через сохранение шаблона функцией ChartSaveTemplate() и посмотреть, что в ней записано.

 
можно с помощью CHARTEVENT_CUSTOM перестукиваться)
 
При инициализации программы удаляйте переменные в OnInit(), а потом прописывайте с рандомной задержкой по времени, ну и проверка и подобные тапки... А можно как вариант в комплекте с программой поставлять бесперебойник. 
 

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

 
Dmitiry Ananiev:

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

Установите отложку с комментарием (понятное дело подальше от цены) и анализируйте есть она или нет.

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