Открытие и закрытие на одном тике возможно?

 
Есть советник (пример кода ниже), сигнал на закрытие является так же сигналом на открытие в противоположенную сторону. В половине случаев ордер и закрывается и открывается, как положено, а в остальных случаях ордер только закрывается. Работает все это на M1, мне кажется это из за того, что на одном тике нельзя и закрыть и открыть ордер? Если это так, то как исправить
 
-Igor- писал (а):
Есть советник (пример кода ниже), сигнал на закрытие является так же сигналом на открытие в противоположенную сторону. В половине случаев ордер и закрывается и открывается, как положено, а в остальных случаях ордер только закрывается. Работает все это на M1, мне кажется это из за того, что на одном тике нельзя и закрыть и открыть ордер? Если это так, то как исправить
Это не имеет никакого отношения к твоей проблеме. Тик только запускает эксперта, а уж эксперт может делать потом все что захочет - в пределах разрешенного. В частности он может открыть и закрыть как угодно много сделок.
 
Файлы:
123_3.mq4  2 kb
 
Редактора под рукой нет, а твой код нечитабелен. Но даже нечитая я вижу, что не вижу волшебной команды IsTradeAllowed(). А без нее ничего у тебя работать не будет.
 
2 timbo Вот меня такой момент интересует, допустим в 12.00 пришел тик, по нему должно произойти 1. закрытие sell, 2. открытие buy, советник посылает запрос на сервер закрыть sell, ждет 5-10 секунд, sell закрывается, что советник дальше делает, если нового тика не поступало, он продолжает исполнять код дальше после места где условия для закрытия (а у меня 1 идут условия для закрытия, 2 условия для открытия) или будет ждать нового тика, и все заново?
 
Пришел тик. Советник проснулся и начал выполнять заложенную программу: открывать, закрывать, проверять условия и прочее, и так до тех пор пока не будет выполнены все задачи заложенные в его алгоритм. За это время может пройти сколько угодно тиков - ни на что это не влияет. После завершения программы советник засыпает до тех пор пока его не разбудит первый же тик пришедший после момента засыпания. Тик просто запускающий триггер - не более того.

 
Это все понятно, меня интересует как работает советник, он сразу посылает приказ на сервер и на закрытие и на открытие ордера? или пока закрытие не выполнится он не пошлет приказ на открытие?
 
Каждая торговая операция выполняется сама по себе в порядке живой очереди. Экспер-то пошлёт команду сразу, но вот сервер пошлёт его ещё дальше... Именно поэтому я говорил выше про волшебную команду, которая должна быть обязательно в любом эксперте. Более того, она должна быть перед каждой торговой операцией. Смотри в статьях, там было много чего на эту тему.
 
timbo:
Каждая торговая операция выполняется сама по себе в порядке живой очереди. Экспер-то пошлёт команду сразу, но вот сервер пошлёт его ещё дальше... Именно поэтому я говорил выше про волшебную команду, которая должна быть обязательно в любом эксперте. Более того, она должна быть перед каждой торговой операцией. Смотри в статьях, там было много чего на эту тему.

Кажить немного не так, IsTradeAllowed() хорошая штука когда торгуют несколько экпертов и надо проверять на свободность торгового потока, что бы они не пытались одновременно послать запрос на сервер.

А что бы сервер не посылал эксперта дальше... нужно обрабатывать ошибки, выдаваемые сервером, через RefreshRates().
 
Судя по всему всякий OrderSend блокирует исполнение кода до ответа от сервера (терминала?), иначе откуда бы могли мгновенно взяться некоторые ошибки исполнения?
 
Именно так. Даже один, но активный, эксперт легко забьёт канал самому себе.

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

Я размышлял как-то на тему грид-системы (что означает много ордеров) и был небрежен в коде, на истории все работало нормально, а на демо начались проблемы подобные описанным - то есть следующая сделка, то нет. Цикл в одну строчку - проверить, подождать, проверить - решил все проблемы.
Причина обращения: