![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
а без аварийных выключений система-семафор работает и так отлично =)
Не совсем понятно, что именно этот скрипт должен делать?
Что угодно. Например, обнулить твои глобальные переменные. Гарантированно - до запуска экспертов, и гарантированно - только один раз.
а зачем мне тик? я в инит вставил обнуление переменной, а старт оставил пустым. Теперь при запуске терминала у меня гарантированно обнулённая переменная, и никаких лишних действий ;)
а без аварийных выключений система-семафор работает и так отлично =)
Это если у каждой тройки эксперт - таймфрейм - валюта переменная уникальная. А если два эксперта по одной валюте? Один обнулил переменную... Отработал. Второй обнулил... А надо-то только раз.
А вот семафор "TradeIsBusy", который юзают все, оставался необнулённым, и из каждого эксперта его нельзя обнулять - весь смысл семафора теряется ;)
а в ситуации, описанной тобой, поможет ф-ция WindowHandle() (или как-то так, писал по памяти, мог допустить ошибку). В имени глоб. переменной кроме символа и ТФ указываешь WH, и всё должно быть ОК ;) или Мэйджик туда же )
Но мне кажется, нет смысла ставить 2 одинаковых эксперта на один инструмент и ТФ. А если уж совсем надо, имя эксперта чуть подровнять ;)
Цитата:
Столкнулся с проблемой: у меня для торговли используется глоб. переменная - семафор.
Т.е. пока идёт торговая оперция, эксперт устанавливает её значение в 1, а когда заканчивает, в 0.
Ну, и, естественно, пока она равна 1, ни один другой эксперт торговать не может.
Так вот если закрыть терминал во время торговли, она остаётся равна 1, и при следюющем запуске никто не может торговать.
Как вариант решения можно задавать не просто семафор (0/1),
а задавать время его жизни как LocalTime + K секунд.
Тогда семафор будет принимать значения времени в недалеком будущем или ноль.
Если значение семафора меньше LocalTime, то считаем что он свободен.
(если у кого есть доступ к форуму метаквотов, можете там продублировать этот вариант)
Весь смысл семафора в том, что устанавливается он ф-цией GlobalVariableSetOnCondition... Т.е. однозначно одним экспертом. А остальные ждут.
А "LastTradeTime" у меня тоже есть. Только без семафора эксперты за него дерутся ;)
может стоит просить разработчиков расширить функцию GlobalVariableSetOnCondition... или сделать другую, чтобы иметь возможность сравнения глобальной переменной не только на равенство но и на неравенство, например <если меньше> тогда меняем...Это позволило-бы решить подобные проблемы и упростить код...
или startup скрипт ;)