Скачать MetaTrader 5

Можно ли посылать повторный запрос?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Планируешь заказать программу? Узнай, как получить желаемый результат
Forex Trader
114255
Forex Trader 2006.07.31 13:22 
При попытке открыть ордер выдалась ошибка номер 138. Вопрос приведет ли повторный запрос к открытию ордера или нет если котировка в терминале не изменилась?

Более подробно:
1. эксперт пытается открыть ордер
2. ему приходит ответ №138.
3. обновляем рыночное окружение и види что цена не изменилась с момента последнего запроса
4. можно ли пытаться открыться по этой цене или в этом нет смысла и все равно будет приходить №138?

Я так понимаю что №138 может вернуться по трем причинам:
а) Запрос попал на сервер более чем через 5 сек после отправки
б) запрашиваемая цена не находится в 5 последних тиках
в) допустимое максимальное отклонение установленное у брокера превышено

Я точно знаю что мои запросы попадают на сервер быстрее чем за 5 сек, значит остается два пункта...

Теперь если реквот вернулся из-за пункта б) и цены не было в последних 5-ти тиках то посылать повторный запрос по той же цене вообще не имеет смысла....

Если же было превышено отклонение, то есть шанс что на сервер пришел ноый тик который умещается в отклонение с моей старой ценой....

Уважаемые разработчики я правильно рассуждаю? Есть ли смысл в повторных запросах при неизменной цене?
MetaQuotes Software Corp.
Модератор
181158
MetaQuotes Software Corp. 2006.07.31 14:37  
Если получили реквот (138), то обновите рыночное окружение через RefreshRates(), возьмите последние рыночные цены (bid или ask) и попробуйте провести операцию снова.

Если Вы не обновите рыночное окружение и попытаетесь снова со старой ценой провести операцию, то можете (и с большой гарантией) получить снова реквот. Правило обновления рыночного окружения и использование новой цены является обязательным после любого (успешного и неуспешного) вызова торговых функций.

Загляните в раздел "Справочник MQL4 - Торговые функции - Ошибки исполнения" стандартной документации по MQL4. Она есть в MetaEditor'е и на сайте "MQL4: Ошибки исполнения"

Там описаны ошибки и способ реакции на них.
Forex Trader
114255
Forex Trader 2006.07.31 17:02  
Я обязательно обновляю рыночное окружение перед запросом


3. обновляем рыночное окружение и видим что цена не изменилась с момента последнего запроса


Вопрос остается открытым: есть ли смысл посылать повторный запрос при обновленном окружении и цене не изменившейся со времени последнего запроса если получена №138
MetaQuotes Software Corp.
Модератор
181158
MetaQuotes Software Corp. 2006.07.31 17:10  
Видимо, Вы не читали описания по указанной ссылке.
Там четко и однозначно указана Ваша ситуация и что надо делать.
Forex Trader
114255
Forex Trader 2006.07.31 17:24  

ERR_REQUOTE 138 Запрошенная цена устарела (прошло более 5 тиков), либо перепутаны bid и ask. Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.


1. Бид и Аск точно в порядке.
2. Данные обновляю.

Я задаю вопрос с точки зрения программирования экспертов: будет ли вообще логически правильным посылать повторный запрос при обновленной но неизменной цене? Ведь скорее всего ошибка пришла из-за устаревания цены (5 тиков) или непопадания в допустимое отклонение брокера....

Получается что если цена не изменилась то смысла посылать запрос нет, нужно только дождаться изменения цены а потом уж посылать запрос?
MetaQuotes Software Corp.
Модератор
181158
MetaQuotes Software Corp. 2006.07.31 17:26  
Ну как еще можно понять вот эти слова:
Если получили реквот (138), то обновите рыночное окружение через RefreshRates(), возьмите последние рыночные цены (bid или ask) и попробуйте провести операцию снова.

Где тут непонятности? Где тут исключения?
Обновил, взял цену и провел операцию снова. И больше никаких условий.
Forex Trader
114255
Forex Trader 2006.07.31 17:34  
Как раз здесь ВСЕ понятно :)

Я поэтому и спрашивал разработчиков - они ведь знают тонкости своего клиент-серверного взаимодействия... А целью была оптимизация рабочего времени эксперта... Ведь ПОВТОРИТЬ запрос можно, но если практически 100% что вернется опять реквот то можно отбросить эти запросы чтобы эксперт занялся другой полезной работой :))))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий