Используй глобальную переменную. Правда, до конца не уверен, что это разрулит перекресток.
if (надо открыть позицию)and(CurTime-GlobalLastTrade>11)
{
SetOrder(....);
SetGlobal....(GlobalLastTrade)
}
Но не уверен, что они (эксперты) не умудрятся опять все вместе ломануться.
Кто успел (валюта) - тот и Sell :))
Или надо валюты ранжировать - Фунт только после Евры, Франк после Фунта и так далее.
if (надо открыть позицию)and(CurTime-GlobalLastTrade>11)
{
SetOrder(....);
SetGlobal....(GlobalLastTrade)
}
Но не уверен, что они (эксперты) не умудрятся опять все вместе ломануться.
Кто успел (валюта) - тот и Sell :))
Или надо валюты ранжировать - Фунт только после Евры, Франк после Фунта и так далее.
Да - скорее всего придется выстраивать цепочку - кто за кем открывается.
Но опять же - если первым например идет eurusd, и все его ждут, а он ждет первого тика, то получается простой.
По поводу глобальной переменной. Если я вызываю
if (!GetGlobal) {
SetGlobal
SetOrder
}
то не факт - что другие не успеют вклиниться.
По хорошему операция занятия очереди должна быть равна одной машинной инструкции.
Тогда никто не вклинится.
Но опять же - если первым например идет eurusd, и все его ждут, а он ждет первого тика, то получается простой.
По поводу глобальной переменной. Если я вызываю
if (!GetGlobal) {
SetGlobal
SetOrder
}
то не факт - что другие не успеют вклиниться.
По хорошему операция занятия очереди должна быть равна одной машинной инструкции.
Тогда никто не вклинится.
Если очередность открытия не важна, то можно вообще не разруливать. Кто первым откроется - молодец, остальные ждут. Если сигнал на открытие через несколько тиков не пропадает, то все равно через таймаут все откроются. Если же сигнала повторно не будет, ввести переменную БылСигнал и проверять ее значение и наличие ордера в рынке.
Конечно потом все постепенно открывается. Дело в том - не напрягает ли это брокера?
то не факт - что другие не успеют вклиниться.
По хорошему операция занятия очереди должна быть равна одной машинной инструкции.
Тогда никто не вклинится.
По хорошему операция занятия очереди должна быть равна одной машинной инструкции.
Тогда никто не вклинится.
А в МТ3 кажется нет многозадачности?
Все скрипты работают по очереди?
Поэтому и ограничения на работу скрипта в 1 сек?
(вопросы к разработчикам)
Если это так, то таких проблем у вас быть не может.
Если бы SetOrder работал с ожиданием как в MT4 проблем по идее бы не было
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В начале эксперта прописан 11-секундный таймаут: If (CurTime-LastTradeTime) < 11 then Exit;
Все вроде бы хорошо. Только вот стало появляться сообщение: Expert 'XXX': unknown error in SetOrder
Немного поразмыслив и исследовав лог, я нашел причину. Вот она:
Получается, что по прошествии 11 секунд все 4 окна одновременно дают сигнал на открытие.
Т.е. нужен механизм очередности.
Что вы можете посоветовать, чтобы разрулить эту ситуацию?