Причина в том, что у Вас нет флага, что предыдущее событие полностью отработало.
Посылая ордер, в OnTick и/или OnBookEvent нужно выставлять флаг запрета обработки кода, пока
Вы точно не выяснили как отработал отосланный ордер.
Причина в том, что у Вас нет флага, что предыдущее событие полностью отработало.
Посылая ордер, в OnTick и/или OnBookEvent нужно выставлять флаг запрета обработки кода, пока
Вы точно не выяснили как отработал отосланный ордер.
Ну так у меня внутри функции выяснятся.Зачем мне дублировать что-то? Если он принят, значит уже всё в порядке. Я так понимаю.
Ну так у меня внутри функции выяснятся.Зачем мне дублировать что-то? Если он принят, значит уже всё в порядке. Я так понимаю.
***
Но сначала необходимо одно уточнение специфики работы на бирже: после сервера брокера (Broker's MT5 Server) наш торговый приказ пересылается дальше - на биржу и только после того как торговый размещён на бирже (Executed) можно уже судить об успешности выполнения торгового приказа:
Например код открытия позиции BUY (который отлично работает на Forex), даже в случае успешного размещения торгового приказа на бирже и появлении позиции вернёт ошибку.
***
Работа на бирже и на Форекс (в части контроля открытия позиции) различаются тем, что на бирже после принятия торгового приказа сервером брокера, этот торговый приказ пересылается дальше - на биржу. И это (как указали выше) - нужно контролировать через флаги и ожидание.
...
Почему в одном случае лот 0.1, а потом 0.2?
Почему в одном случае лот 0.1, а потом 0.2?
Так задуано. Это не мартышка. Лоты беруться из определённого диапазона, выше которого лот не подымает. Система это самопридуманная. Я такого не встречал ни где.
***
Но сначала необходимо одно уточнение специфики работы на бирже: после сервера брокера (Broker's MT5 Server) наш торговый приказ пересылается дальше - на биржу и только после того как торговый размещён на бирже (Executed) можно уже судить об успешности выполнения торгового приказа:
Например код открытия позиции BUY (который отлично работает на Forex), даже в случае успешного размещения торгового приказа на бирже и появлении позиции вернёт ошибку.
***
Работа на бирже и на Форекс (в части контроля открытия позиции) различаются тем, что на бирже после принятия торгового приказа сервером брокера, этот торговый приказ пересылается дальше - на биржу. И это (как указали выше) - нужно контролировать через флаги и ожидание.
А почему об этом нигде особо не написано? Это называется нужно что бы каждый наткнулся на косяк? Ведь протестировать, если нет информации полно по этому поводу не выйдет. Если на реальную биржу (я об акцияю пишу) пойти торговать, придётся заливать деньги тестируя, пусть даже прибыльный алгоритм.
Так задуано. Это не мартышка. Лоты беруться из определённого диапазона, выше которого лот не подымает. Система это самопридуманная. Я такого не встречал ни где.
Если второй ордер, это ошибочное дублирование, то он должен быть полностью идентичным.
А почему об этом нигде особо не написано? Это называется нужно что бы каждый наткнулся на косяк? Ведь протестировать, если нет информации полно по этому поводу не выйдет. Если на реальную биржу (я об акцияю пишу) пойти торговать, придётся заливать деньги тестируя, пусть даже прибыльный алгоритм.
Это касается торговых запросов, то есть ордеров. У вас же данные о сделке. В справке есть куча констант касающихся исполнения ордеров - исходя из их наличия и количества, можно понять-что все на так просто (хотя бы догадаться). Что касается сделок - она либо есть либо нет. Если сообщение о сделке есть, а фактически ее нет, а способа узнать об этом нет, то практически всей этой системой пользоваться невозможно, поэтому - такого быть не может. Просто есть такая категория людей - любят давать советы не вникая в проблему.
Если второй ордер, это ошибочное дублирование, то он должен быть полностью идентичным.
На сей раз оказалось, что я не прав. Вопрос снят. Логика в одном моменте нарушена была и у меня заклинило и в коде и в голове от размышлений. По поводу, выполнености аявки я полностью согласен. Я всегда проверяю, если сервер вернул TRADE_RETCODE_DONE значит всё чётко. Если нет, возможен косяк.
А на акция, да, там и лот нужно проверять. Но на форексе это не требуется, особенно для отложеных ордеров, которыми я обычно торгую. Да и на рыночных не было замечено не полностью исполненного объёма.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть библиотека с функциями. Нас интересуют вот эти 2:
В OnTradeTransaction() вот что имеется:
Суть этого всего в том, что бы в тот момент, когда отложенный ордер станет позицией открыть противоположный. Так вот интересно, что неколько недель на низком ТФ много сделок проходит. Всё отрабатывается корректно. Но, попадаются места, где событие косячит. Происходит установка не 1, а 2 отложенных ордеров, что есс-но не требуется. Здесь мы видим Print(), который я сделал, когда отлавливал, где косяк.
В логе видно:
Очевидно, что в блок:
Вошли несколько раз, хотя.. не было там 2 преобразований рыночных ордеров в позиции, что и логично. Может как-то можно это обработать, что бы не натыкаться на подобный косяк?