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

 

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

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

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

 

Ну перекомпиляция костыльно, но решаема, а вот что делать в случае перезапуска терминала...

А глобальные переменные плохо, т.к. если терминал слетит, предварительно записав глобальные переменные в файл, потом все сломается.

Как альтернатива, можно держать хэндл чего-нибудь.

 

TheXpert:

....чего-нибудь

вот в этом-то и вопрос :((
 
а просто не цеплять советник дважды к графику, это невыполнимо?
 
Techno:
а просто не цеплять советник дважды к графику, это невыполнимо?

мне нужны ГАРАНТИИ что ни я ни кто другой этого не сделают ни случайно ни преднамеренно ;)

представьте: советник получает "внешние" команды на открытие ордеров. даже одна лишняя копия - это (теоретически) еще один лишний ордер. я такого не хочу даже случайно получить.

 
ForexTools:
вот в этом-то и вопрос :((

Да нет, это уже детали реализации, основная проблема в перезагрузке и перекомпиляции.

О, есть тема, только надо проверить -- восстанавливается ли советник при перезапуске и перекомпиляции, если до это вылетел, например, по делению на 0?

Если нет, это способ.

 
TheXpert:

Да нет, это уже детали реализации, основная проблема в перезагрузке и перекомпиляции.


При перекомпиляции проблема не должна возникать.
 
PapaYozh:

При перекомпиляции проблема не должна возникать.

это как жеж? допустим у нас три копии эксперта (без всяких фишек - просто так чистых). вы его перекомпилировали. в терминал ушла "команда". эксперты начали инитися.... в каком порядке они переинитятся?
 
ForexTools:

это как жеж? допустим у нас три копии эксперта (без всяких фишек - просто так чистых). вы его перекомпилировали. в терминал ушла "команда". эксперты начали инитися.... в каком порядке они переинитятся?
тогда получается что кто-то один из них торговал, но после перезагрузки право на лидерство получит другой, а первый это право утратит, и какая разница, если они одинаковые? главное чтобы один торговал. Используй глобальную переменную и все. В функции инит напиши случайное ожидание для каждого эксперта sleep(), тот кто первый проснется, считает глобальную переменную и удалит, при деините снова восстановит. Кто первый считал и удалил тот и будет работать. Короче генерируешь случайное число для sleep()
 
ForexTools:

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

А Вы не исключаете наличие одинаковых графиков? Т.е. должна ли обрабатываться ситуация старта советника на 2-х графиках с одинаковым символом и одинаковым периодом?
 
Techno:
тогда получается что кто-то один из них торговал, но после перезагрузки право на лидерство получит другой, а первый это право утратит, и какая разница, если они одинаковые? главное чтобы один торговал. Используй глобальную переменную и все. В функции инит напиши случайное ожидание для каждого эксперта sleep(), тот кто первый проснется, считает глобальную переменную и удалит, при деините снова восстановит. Кто первый считал и удалил тот и будет работать. Короче генерируешь случайное число для sleep()

Кстати, да. Если недопустимо использование 2-х экземпляров советника, следовательно не имеет значения какой советник стартанётся первым.
Причина обращения: