условие на проверку ошибки - и можно снова пытаться...
2 DDFedor
Содержательный ответ, спасибо. Видимо квинт-эссенция ответа относительно моего
вопроса есмь следующая строка с комментом:
if(error==139)// ERR_ORDER_LOCKED 139 Ордер заблокирован и
//уже обрабатывается, поэтому проверяем исполнение после небольшой паузы
{
Увы, похоже пауза должна быть слишком большая, ибо я получаю данную ошибку
постоянно с промежутком в 5 мин:
11:39:53 'ххх': modification of pending order #148233 sell stop 1.00 CADJPY at 83.785 sl: 0.000
tp: 83.698 -> price: 83.785 sl: 84.056 tp: 83.698 failed [Order is locked]
11:44:53 'ххх': modification of pending order #148233 sell stop 1.00 CADJPY at 83.794 sl: 0.000
tp: 83.707 -> price: 83.794 sl: 84.055 tp: 83.707 failed [Order is locked]
11:49:59 'ххх': modification of pending order #148233 sell stop 1.00 CADJPY at 83.807 sl: 0.000
tp: 83.720 -> price: 83.807 sl: 84.054 tp: 83.720 failed [Order is locked]
Так что похоже этот приказ собирался обрабатываться до конца света, поэтому брокер и
вынужден его руками менять. А то у него там серена 400 ваттная орёт :) как он говорит.
Но главные наши вопросы остаются - кто виноват и что делать? Как избежать пожизненного
блокирования и что делать ежели оно случилось.
Но главные наши вопросы остаются - кто виноват и что делать? Как избежать пожизненного
блокирования и что делать ежели оно случилось.
ордера в цикле модифицируются?
возможно тогда поможет
bool Rez=OrderModify(...
и далее в зависимости от возвращенного Rezультата:)
перед торговыми функциями таки желательно проверить IsTradeContextBusy() или IsTradeAllowed().
api, cпасибо за замученную очепятку, я конечно имел в виду 225 :) Плохо быть программером :)
ERR_ORDER_LOCKED | 139 | Ордер заблокирован и уже обрабатывается. Необходимо прекратить все попытки торговых операций и изменить логику программы. |
Это из справки.
Я так понимаю, что то, что Вы делаете делать нельзя и Вам советуют перестать это делать. Это Вам советует разработчик и это же Вам советует Ваш брокер.
Сам я с такой ошибкой не встречался и потому предложить решение я не могу.
Если Вас заинтересует мое предположение - излагаю: установка стоплосса выполняется сразу после модификации (установки тейкпрофита, например) или постановки ордера. Процессы на сервере происходят независимо от модели поведения Вашего советника и могут растягиваться во времени в зависимости от активности клиентов. Поэтому, возможно, пока сервер обрабатывает изменение параметров ордера, ордер заблокирован исполнительной системой на сервере и не может быть изменен. Как вариант - устанавливайте стоплосс одновременно с постановкой ордера или выполняйте паузу перед дальнейшей модификацией ордера.
P.S. Не заметил при анализе вашего наверняка неполного лога, что тикет ордера один и тот же. Правда это не отменяет все вышесказанное.
Еще хотелось бы увидеть исходники Вашего советника. Если жалко - то хотя бы в личку. Если ОЧЕНЬ жалко, то хотя бы места работы с ордерами.
Едва примопинаю, что-то было подобное. Советник начал подифицировать ордер и я тут же полез руками закрывать его, была ошибка 139. Модификация выполнилась и можно было закрыть.
А кроме как получив эту ошибку, понять, что ни руками, ни чем другим трогать не надо, можно?
У меня тоже не встречалась 139 (пока), но если вдруг, то понять как решать/избежать хотелось бы.
А кроме как получив эту ошибку, понять, что ни руками, ни чем другим трогать не надо, можно?
У меня тоже не встречалась 139 (пока), но если вдруг, то понять как решать/избежать хотелось бы.
Затрудняюсь здесь. Ордер в обработке, а торговый поток не занят. Если один советник работает только со своими ордерами, то не может быть такой ошибки, функции типа OrderSend(), OrderModify() ждут завершения обработки ордера.
Надо будет поэкспериментировать в понедельник, попытаться получить 139.
Может быть от того, что для советников свой торговый поток, а для ручных действий, тогда получается сообщение о блокировке ордера. Если так, то заранее никак не узнать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Вот-с, получил от своего брокера страшное письмо что из-за этой ошибки, инициированной (якобы) моим экспертом, могут страдать другие трейдеры, что исправлять её последствия им приходится меняя вручную соответствующий приказ, что мой эксперт в случае возникновения этой ошибки должен немедленно прекратить работу, и что если нет то они будут вынуждены запретить автоматическую торговлю с моего счёта. Короче, страх и ужас.
За сим был бы очень благодарен за ответы разработчиков и/или тех кто сталкивался с этим зверем на пару вопросиков:
а) кто, когда, из-за чего, и с какой целью блокирует приказ? Сервер? Клиент (я пользую 255-й билд)? Может ли эта ошибка возникать для уже открытых приказов или только при модификации отложенных?
б) как с этим бороться изнутри эксперта? Брокер говорит что мой эксперт не сможет даже удалить такой приказ чтобы ввести новый аналогичный, и что единственны способ - отсоединить эксперта и закончить торговлю вручную (что было бы крайне неприятно).
Интересно что такая ошибка ни разу не возникала на демо-счёте за примерно месяц тестирования, только на реале, поэтому протестировать ЕА адекватно не получилось.
Заранее спасибо за помощь!