Есть советник (пример кода ниже), сигнал на закрытие является
так же сигналом на открытие в противоположенную сторону. В половине
случаев ордер и закрывается и открывается, как положено, а в
остальных случаях ордер только закрывается. Работает все это
на M1, мне кажется это из за того, что на одном тике нельзя и закрыть
и открыть ордер? Если это так, то как исправить
- Закрытие позиции встречной - Торговля - MetaTrader 5 для iPhone
- Закрытие позиции встречной - Торговля - MetaTrader 5 для Android
- Реальные и сгенерированные тики - Алгоритмический трейдинг, торговые роботы
-Igor- писал (а):
Есть советник (пример кода ниже), сигнал на закрытие является так же сигналом на открытие в противоположенную сторону. В половине случаев ордер и закрывается и открывается, как положено, а в остальных случаях ордер только закрывается. Работает все это на M1, мне кажется это из за того, что на одном тике нельзя и закрыть и открыть ордер? Если это так, то как исправить
Это не имеет никакого отношения к твоей проблеме. Тик только
запускает эксперта, а уж эксперт может делать потом все что
захочет - в пределах разрешенного. В частности он может открыть
и закрыть как угодно много сделок.
Есть советник (пример кода ниже), сигнал на закрытие является так же сигналом на открытие в противоположенную сторону. В половине случаев ордер и закрывается и открывается, как положено, а в остальных случаях ордер только закрывается. Работает все это на M1, мне кажется это из за того, что на одном тике нельзя и закрыть и открыть ордер? Если это так, то как исправить
Редактора под рукой нет, а твой код нечитабелен. Но даже нечитая
я вижу, что не вижу волшебной команды IsTradeAllowed(). А без нее ничего у тебя работать не будет.
2 timbo Вот меня такой момент интересует, допустим в 12.00 пришел тик,
по нему должно произойти 1. закрытие sell, 2. открытие buy, советник
посылает запрос на сервер закрыть sell, ждет 5-10 секунд, sell закрывается,
что советник дальше делает, если нового тика не поступало, он
продолжает исполнять код дальше после места где условия для
закрытия (а у меня 1 идут условия для закрытия, 2 условия для открытия)
или будет ждать нового тика, и все заново?
Пришел тик. Советник проснулся и начал выполнять заложенную
программу: открывать, закрывать, проверять условия и прочее,
и так до тех пор пока не будет выполнены все задачи заложенные
в его алгоритм. За это время может пройти сколько угодно тиков
- ни на что это не влияет. После завершения программы советник
засыпает до тех пор пока его не разбудит первый же тик пришедший
после момента засыпания. Тик просто запускающий триггер - не
более того.
Это все понятно, меня интересует как работает советник, он сразу
посылает приказ на сервер и на закрытие и на открытие ордера?
или пока закрытие не выполнится он не пошлет приказ на открытие?
Каждая торговая операция выполняется сама по себе в порядке живой очереди. Экспер-то пошлёт команду сразу, но вот сервер пошлёт его ещё дальше... Именно поэтому я говорил выше про волшебную команду, которая должна быть обязательно в любом эксперте. Более того, она должна быть перед каждой торговой операцией. Смотри в статьях, там было много чего на эту тему.
timbo:
Каждая торговая операция выполняется сама по себе в порядке живой очереди. Экспер-то пошлёт команду сразу, но вот сервер пошлёт его ещё дальше... Именно поэтому я говорил выше про волшебную команду, которая должна быть обязательно в любом эксперте. Более того, она должна быть перед каждой торговой операцией. Смотри в статьях, там было много чего на эту тему.
Каждая торговая операция выполняется сама по себе в порядке живой очереди. Экспер-то пошлёт команду сразу, но вот сервер пошлёт его ещё дальше... Именно поэтому я говорил выше про волшебную команду, которая должна быть обязательно в любом эксперте. Более того, она должна быть перед каждой торговой операцией. Смотри в статьях, там было много чего на эту тему.
Кажить немного не так, IsTradeAllowed() хорошая штука когда торгуют несколько экпертов и надо проверять на свободность торгового потока, что бы они не пытались одновременно послать запрос на сервер.
А что бы сервер не посылал эксперта дальше... нужно обрабатывать ошибки, выдаваемые сервером, через RefreshRates().
Именно так. Даже один, но активный, эксперт легко забьёт канал самому себе.
Соответственно, сперва проверить поток, если он занят, то подождать, опять проверить, если поток свободен, то срефрешить цены и провести торговую операцию. Если хочешь ещё одну операцию, то все по-новой.
Я размышлял как-то на тему грид-системы (что означает много ордеров) и был небрежен в коде, на истории все работало нормально, а на демо начались проблемы подобные описанным - то есть следующая сделка, то нет. Цикл в одну строчку - проверить, подождать, проверить - решил все проблемы.
Соответственно, сперва проверить поток, если он занят, то подождать, опять проверить, если поток свободен, то срефрешить цены и провести торговую операцию. Если хочешь ещё одну операцию, то все по-новой.
Я размышлял как-то на тему грид-системы (что означает много ордеров) и был небрежен в коде, на истории все работало нормально, а на демо начались проблемы подобные описанным - то есть следующая сделка, то нет. Цикл в одну строчку - проверить, подождать, проверить - решил все проблемы.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь