Скачать MetaTrader 5

Разработчики! Ошибка 10024 (Слишком частые запросы)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Mikhail Filimonov
5931
Mikhail Filimonov 2014.09.19 23:10 

"Переполз" на  OrderSendAsync и

стал получать ошибку TRADE_RETCODE_TOO_MANY_REQUESTS.

Вопросы:

1. Зачем нужна команда  OrderSendAsync, если она не корректно работает?

2. Неужели в серверной части нельзя было поставить очередь из  OrderSendAsync? 

3. Какая же должна быть задержка между отсылкой команд OrderSendAsync?

4. Кто-нибудь решил эту проблему? 

 

Nikolay Demko
12499
Nikolay Demko 2014.09.20 00:08  
Mikalas:

"Переполз" на  OrderSendAsync и

стал получать ошибку TRADE_RETCODE_TOO_MANY_REQUESTS.

Вопросы:

1. Зачем нужна команда  OrderSendAsync, если она не корректно работает?

2. Неужели в серверной части нельзя было поставить очередь из  OrderSendAsync? 

3. Какая же должна быть задержка между отсылкой команд OrderSendAsync?

4. Кто-нибудь решил эту проблему? 

 

Никакой задержки не нужно, просто ваши приказы реджектятся а вы без проверки шлёте новый, только в таких условиях появляется ответ сервера слишком частые запросы.

Получите ответ на ваш запрос прежде чем отправлять его повторно.

Функция работает нормально когда нормально обрабатываются ответы, если же ответы сброшены на самотёк то неизбежно возникнет ситуация когда сервер вернёт реджект а программа в ответ будет долбить сервер повторами неверных запросов без изменения. 

ЗЫ если всё нормально сервер вполне спокойно проглатывает пачку из 100 ордеров. 

Mikhail Filimonov
5931
Mikhail Filimonov 2014.09.20 01:03  
Urain:

Никакой задержки не нужно, просто ваши приказы реджектятся а вы без проверки шлёте новый, только в таких условиях появляется ответ сервера слишком частые запросы.

Получите ответ на ваш запрос прежде чем отправлять его повторно.

Функция работает нормально когда нормально обрабатываются ответы, если же ответы сброшены на самотёк то неизбежно возникнет ситуация когда сервер вернёт реджект а программа в ответ будет долбить сервер повторами неверных запросов без изменения. 

ЗЫ если всё нормально сервер вполне спокойно проглатывает пачку из 100 ордеров. 

К сожалению, вы ошибаетесь, я не "долблю" повторными приказами без проверки.

И приказы сразу не реджектятся, просто несколько советников (50) одновременно отсылают команду  OrderSendAsync. 

 

Удаление ордера: 

//+------------------------------------------------------------------+
// Remove order                                                      |
//+------------------------------------------------------------------+
void COrder::Remove()
{
  if ( ticket > 0 )
  {
    if ( OrderSelect( ticket ) )
    {
      req_id = 0;                     
      MqlTradeRequest request = {0};
      MqlTradeResult  result  = {0};
            
      request.action = TRADE_ACTION_REMOVE;
      request.order  = ticket;
          
      if ( OrderSendAsync( request, result ) )
      {
        if ( result.retcode == TRADE_RETCODE_PLACED )
        { 
          req_id = result.request_id;
        }
      }
      else
      {
         state = ORD_REJECTED; 
         Print( "Ордер не удалён! Билет = ", ticket, "; Код возврата = ", GetRetCode( result.retcode ) );
      }
    }
  }
}

 Вызов удаления ордера:

//+------------------------------------------------------------------+
//| Expert timer function                                            |
//+------------------------------------------------------------------+
void OnTimer()
{
  MqlDateTime tick_time;
  
  if ( CheckTradingTime( tick_time ) )
  {
//..............................
  }
  else
  {
    if ( ( BuyOrder.state == ORD_BUY_WORK ) && ( BuyOrder.ticket > 0 ) && ( BuyOrder.req_id == 0 ) ) BuyOrder.Remove();
    if ( ( SellOrder.state == ORD_SELL_WORK ) && ( SellOrder.ticket > 0 ) && ( SellOrder.req_id == 0 ) ) SellOrder.Remove();
  }
}

 Как видите, всё обрабатывается и проверяется!

Ордера первых 2-х советников удаляются, а остальные выдают ошибку

TRADE_RETCODE_TOO_MANY_REQUESTS ( Ордер не удалён! Билет = 6745860; Код возврата = Слишком частые запросы ),

причём её (ошибку) выдаёт терминал, что не должно входить в его функции, при отправке команды OrderSendAsync,

он должен только сообщить, что отправил её (получаем req_id) или нет.( https://www.mql5.com/ru/docs/trading/ordersendasync) 

Проверяя частоту запросов на отсылку команды  OrderSendAsync, теряется смысл её существования вовсе!

Мне, например, кажется странным:

Высокочастотная торговля с проверкой частоты:) 

Документация по MQL5: Торговые функции / OrderSendAsync
Документация по MQL5: Торговые функции / OrderSendAsync
  • www.mql5.com
Торговые функции / OrderSendAsync - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
MetaQuotes
Админ
25036
Renat Fatkhullin 2014.09.20 10:56  

А сколько транзакций все-таки проходит до того, как срабатывает защита?

Или вы думаете, что сможете флудить на демо без ограничений?

Mikhail Filimonov
5931
Mikhail Filimonov 2014.09.20 12:35  
Renat:

А сколько транзакций все-таки проходит до того, как срабатывает защита?

Или вы думаете, что сможете флудить на демо без ограничений?

Реальный счёт.

P/S В документации не написано, что стоит защита на кол-во тразакций для

функции OrderSendAsync 

MetaQuotes
Админ
25036
Renat Fatkhullin 2014.09.20 14:04  
Так сколько транзакций успело пройти?
Alexander Laur
7787
Alexander Laur 2014.09.20 20:26  

Наверно ТС погряз в подсчете количества тракзакций. Что то цифру никак озвучить не может.

Так после какого количества тракзаций стала вылетат ошибка? 

Mikhail Filimonov
5931
Mikhail Filimonov 2014.09.20 22:00  
Renat:
Так сколько транзакций успело пройти?

2 тразакции

QS 0 23:49:30.773 Trades '11000': cancel order #6745145 sell limit 1.00 TATN-3.15 at 25389

QD 0 23:49:30.774 Trades '11000': cancel order #6743665 sell limit 1.00 RTKM-3.15 at 11978

JH 0 23:49:30.774 Trades '11000': cancel order #6743740 sell limit 1.00 TRNF-3.15 at 88843

 

GL 0 23:49:30.264 Forts_trader (TRNF-3.15,H1) Ордер не удалён! Билет = 6743740; Код возврата = Слишком частые запросы 

Mikhail Filimonov
5931
Mikhail Filimonov 2014.09.20 22:19  
papaklass:

Наверно ТС погряз в подсчете количества тракзакций. Что то цифру никак озвучить не может.

Так после какого количества тракзаций стала вылетат ошибка? 

papaklass, сарказм не уместен, тем более вы сами имели опыт общения с этой функцией в прошлом году...

( > Попрактиковался. Выстреливает 10 ордеров так быстро, что получаю ошибку 10024 (слишком частые запросы). Получается, что "хрен редьки не слаще".  Правда я немного переделал Ваш скрипт.

MetaQuotes
Админ
25036
Renat Fatkhullin 2014.09.21 05:34  

К сожалению, нет однозначно четкого ответа. Тем более, никакие 10 заявок (а тем более, 2) не попадают в защиты.

Будьте добры, ответьте честно и точно:

  1. с какой даты до секунды начались транзакции?
  2. с какой даты с точностью до секунды вы получили отказ?
  3. сколько транзакций было отправлено за этот промежуток?
Вообще-то ответы на эти вопросы должны были быть приложены к первому сообщению. Правда в этом случае и вопрос бы не состоялся.
Alexander Laur
7787
Alexander Laur 2014.09.21 06:36  
Mikalas:

papaklass, сарказм не уместен, тем более вы сами имели опыт общения с этой функцией в прошлом году...

( > Попрактиковался. Выстреливает 10 ордеров так быстро, что получаю ошибку 10024 (слишком частые запросы). Получается, что "хрен редьки не слаще".  Правда я немного переделал Ваш скрипт.

 Не обижайтесь на мой сарказм. Это дружественная попытка вернуть Вас в конструктивное русло. Если Вас это задело, то приношу свои извинения.

По теме:

Mikalas, Вы создаете ВАЖНУЮ тему об ошибках в работе ОСНОВНОЙ ТОРГОВОЙ функции, Вам задают уточняющие вопросы, а Вы пропадаете.

Лично я всегда просматриваю темы, касающиеся работы платформы. А уж такие темы, как ошибки в работе основных торговых функций, в первую очередь. И, естесствено, хочется понять в чем дело. Что не так в работе. Ошибка ли это разработчиков, или косяк в алгоритме программиста. А Вы, вместо ответов на уточняющие вопросы, пропадаете.

Из Вашего лога видно, что отдаются приказы на закрытие РАЗНЫХ ордеров. Поэтому интересен ответ разработчиков. Ответьте на вопросы Рената, это важно не только для Вас.

Я один раз сталкивался с такой ошибкой, но был мой косяк в работе алгоритма (просто отвык от реквотов). Для меня странно, как это на маркет ордер можно получить реквот. Проблема была в этом.

У Вас же совершенно другая ситуация. Интересуют подробности. 

12345678
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий