Как обеспечить работу эксперта только на том чарте куда он был сброшен первый раз - страница 4

 

наверно так получится:

стартуем, создаем глобальную переменную и объект на графике (гдето за его пределами чтобы случайно руками не удалить) и в них обоих "прописываем" один общий ключ (полученный например GetTickCount).

Повторные запуски на других чартах проверяют наличие глобальной переменной. если она есть - ищут на СВОЕМ чарте объект с этим же ключом. не нашли - чужой чарт - не работаем и орем алертом что повторный запуск!

поскольку объекты чарта и глобальные переменные должны переживать и перезапуски и перекомпиляции - проверка всегда сработает правильно. если только ручками не удалить или глобальную или объект из списка объектов - но это уже почти паранойя :)))

 
ForexTools:

наверно так получится:

стартуем, создаем глобальную переменную и объект на графике (гдето за его пределами чтобы случайно руками не удалить) и в них обоих "прописываем" один общий ключ (полученный например GetTickCount).

Повторные запуски на других чартах проверяют наличие глобальной переменной. если она есть - ищут на СВОЕМ чарте объект с этим же ключом. не нашли - чужой чарт - не работаем и орем алертом что повторный запуск!

поскольку объекты чарта и глобальные переменные должны переживать и перезапуски и перекомпиляции - проверка всегда сработает правильно. если только ручками не удалить или глобальную или объект из списка объектов - но это уже почти паранойя :)))

Бывает объекты не сохраняются, если терминал вылетел.
 
ForexTools:

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

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

Кто, что может подсказать? Есть какието мысли как это сделать?


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

 
exhumer:
новый экземпляр советника не сможет открыть на запись файл уже открытый на запись ранее.

после падения терминала и его перезапуска файл для открытия будет доступен первому попавшемуся а не первому сброшенному :((

еще раз повторюсь: нужна связка конкретный чарт - конкретный советник.

 
ForexTools:

ваша идея не срабатывает.

Что значит не срабатывает? Пока это голословное утверждение.
тем более что ничего кроме идеи (не говоря о "конкретном рецепте") у вас нет

что я могу закодить по вашему "решению" ??? ;)

Это именно идея. Если у вас не хватает знаний чтобы понять как её проверить, так и напишите. Собственно вы так и написали, но оформили это в виде претензии. По крайней мере реплика "что я могу закодить по вашему "решению" ??? ;)" именно претензией и выглядит. Ну а дальше зачем-то набор тривиальностей ещё

"должен" - не значит "будет", "там" - это "где"? если "не работал"

- как можно советовать непроверенные решения?!

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

С моей точки зрения постановка вопроса такая: я даю идею, вы её проверяете, если она работает вы меня информируете что она работает, в порядке минимальной благодарности.

P.S. Блин, бы в один chr файл из любопытства заглянули, что ли, вроде как на профи в работе с МТ претендуете

 
TheXpert:
Тогда тупо файл в качестве локера и никаких проблем.
А почему этот, самый простой вариант не использовать? Советник создает контрольный файл, перед этим проверяет наличие файла. Если одноименный файл уже существует, советник не запускается. При корректном уходе с чарта советник стирает за собой файл. При крэше оставшийся файл блокирует запуск любого экземпляра советника и для продолжения работы удаляется вручную.
 

Candid:

Чья это проблема, моя или ваша? С какого бодуна вы квалифицировали предложение идеи как рекомендацию решения?

Потому что мне нужна именно "рекомендация решения". именно это я просил в своем первом посте - поэтому и вашу идею воспринял именно так.

вроде как на профи в работе с МТ претендуете

именно поэтому состоятельность многих "идей" вижу даже ДОТОГО как их..... ;)

если я не прав в отношении вас - напишите код эксперта который ничего не делает а только не дает запустится своей второй копии. проверьте что это действительно работает при перекомпиляциях и перезапусках терминала и запосьтьте сюда его код - все станет на свои места ;)

 
granit77:
При крэше оставшийся файл блокирует....

два чарта, на одном висит рабочий рабочий эксперт держащий файл, на втором - копия эксперта которая не работает изза блокировки файла.

терминал упал или закрылся.

(пере)запускаем терминал. на нем два советника начинают проверять читать файл. есть гарантия что первым его захватит настоящий первый а не тот который в прошлый раз висел заблокированным? :(

третий раз повторяюсь: нужна связка ЧАРТА с ЭКСПЕРТОМ, а не блокировка одного эксперта другим.

 
granit77:
А почему этот, самый простой вариант не использовать?
Не-не, это только если неважно, какой экземпляр запускать.