MT API: unknown errors

 
Добрый день,
при попытке открыть ордер, MT API возвращал странные номера ошибок.
Например:

Error sending order: unknown error(75)
Error sending order: unknown error(55)
Error sending order: unknown error(-119)
Error sending order: unknown error(65)
Error sending order: unknown error(-14)
Error sending order: unknown error(124)
Error sending order: unknown error(63)
Error sending order: unknown error(-88)
Error sending order: unknown error(-58)

Как это расшифровать? Конкретней меня интересует такой вопрос: несмотря на то что были возвращены ошибки - некоторые из запросов сработали и ордера были открыты, как определять по номеру ошибки, какие из запросов всё таки сработали?

Спасибо,
Павел
 
Какая версия API, к какому серверу подключались, какие конкретно команды посылали (желательно полный код). Правильно ли все параметры заполняли? Работает ли стандартный пример из MTAPI?
Без деталей ответ сложно дать.
 
API 3.0, сервер у alpari 217.74.32.254,
сам пример работает нормально
да и мой код работает хорошо,
единственный раз когда это произошло когда курс очень круто пошёл вниз - вероятно очень быстро менялся,
скорей всего это было связано с этим, но меня смущает тот факт что несмотря на то что были возвращены ошибки на самом деле открылось аж 3 ордера, вместо одного.

Вот код:

do
{
pCur->GetOrderInfo(&soi);
err=MtSendOrder(handle,&soi);
if (err!=RET_OK)
{
CString s;
s.Format("Error sending order: %s(%d)\n",MtGetErrorDescription(err),err);
Audit(_T("OpenOrder"),s,NIIF_ERROR);

if (err==RET_NO_CONNECT)
{
RenewConnections();
}
else if (err==RET_NO_MONEY || err==RET_ERROR)
return -1;
else
Sleep(5000);

if (pCur->m_bBuy)
pCur->m_dPrice=r[pCur->m_nSymbol].ask;
else
pCur->m_dPrice=r[pCur->m_nSymbol].bid;
}
else
break;
}
while (true);
 
Похоже что Вы получили реквот (или отказ от обслуживания) и не обработали его.

Что Вы могли получить:
RET_PRICE_CHANGED - реквот
RET_TOO_FREQUENT - слишком частые запросы

Вы показали просто какой-то кусок кодов возврата из общего лога или именно это список кодов с начала?
Сделайте детальный лог, как подключались, как посылали запрос на сделку, что получили в ответ и тд.
 
RET_TOO_FREQUENT появлялись, но после выдерживалась пауза в 5 секунд (код был немного другой Sleep(5000) вызывался только при появлении RET_TOO_FREQUENT) и опять появлялись загадочные коды возврата.
Если было бы RET_PRICE_CHANGED - то в логе бы тогда именно это и отразилось. Да и цены я своевременно в Pumping mode получаю. Коннект хороший и все цены приходят быстро.
Меня смущает первая ошибка "symbol is in instant execution mode but not selected(24)", может ли всё остальное быть следствием этого. Раньше у меня такой никогда не появлялось.

Вот как всё было:

12/03/04 16:31:03 OpenOrder-Error sending order: symbol is in instant execution mode but not selected(24)
12/03/04 16:31:03 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:08 OpenOrder-Error sending order: unknown error(115)
12/03/04 16:31:08 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:13 OpenOrder-Error sending order: unknown error(104)
12/03/04 16:31:13 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:19 OpenOrder-Error sending order: unknown error(-111)
12/03/04 16:31:19 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:24 OpenOrder-Error sending order: unknown error(-19)
12/03/04 16:31:24 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:29 OpenOrder-Error sending order: unknown error(124)
12/03/04 16:31:30 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:35 OpenOrder-Error sending order: unknown error(63)
12/03/04 16:31:35 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:41 OpenOrder-Error sending order: unknown error(-14)
12/03/04 16:31:41 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:46 OpenOrder-Error sending order: unknown error(63)
12/03/04 16:31:46 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:52 OpenOrder-Error sending order: unknown error(-88)
12/03/04 16:31:52 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:31:58 OpenOrder-Error sending order: unknown error(-58)
12/03/04 16:31:58 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:04 OpenOrder-Error sending order: unknown error(75)
12/03/04 16:32:04 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:09 OpenOrder-Error sending order: unknown error(55)
12/03/04 16:32:09 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:14 OpenOrder-Error sending order: unknown error(-119)
12/03/04 16:32:14 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:20 OpenOrder-Error sending order: unknown error(65)
12/03/04 16:32:20 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:26 OpenOrder-Error sending order: unknown error(-14)
12/03/04 16:32:26 OpenOrder-Error sending order: too frequent requests(21)
12/03/04 16:32:32 OpenOrder-Error sending order: unknown error(63)
12/03/04 16:32:32 OpenOrder-Error sending order: too frequent requests(21)

12/03/04 16:32:38 OpenOrder-Error getting trades: some error(2)
12/03/04 16:32:43 OpenOrder-Error getting trades: some error(2)
12/03/04 16:32:48 OpenOrder-Error getting trades: some error(2)
12/03/04 16:32:53 OpenOrder-Error getting trades: some error(2)
12/03/04 16:32:58 OpenOrder-Error getting trades: some error(2)
12/03/04 16:33:03 OpenOrder-Error getting trades: some error(2)
12/03/04 16:33:08 OpenOrder-Error getting trades: some error(2)
12/03/04 16:33:13 OpenOrder-Error getting trades: some error(2)
12/03/04 16:33:18 OpenOrder-Error getting trades...
 
Попробуйте включить символ AddSymbol() - если он не выбран для подкачки, то могут быть проблемы.

код был немного другой Sleep(5000) вызывался только при появлении RET_TOO_FREQUENT


Не надо ждать пока тебя запретит API (со сбросом коннекта, если не ошибаюсь), а работать ювелирно (именно), чисто и без насилия над сервером. К сожалению, некоторые программисты совсем уж бездумно использовали API и в МТ4 мы внесем больше контроля (тем кто работает нормально - никаких преград).
 
Да, это я сразу исправил после произошедшего, сейчас между запросами всегда выдерживается пауза.

По поводу AddSymbol: для хэндла который в режиме подкачки я вызываю AddSymbol.
A для для хэндла который используется для отправки ордеров, это тоже нужно делать?

Кстати побровать MT 4 API уже можно?
Причина обращения: