MTAPI - Баг. GetPrices у сокета в Pumping mode

 
MTAPI - Баг. GetPrices у сокета в Pumping mode
Согласно написанному в последнем ридми, обращаюсь с GetPrices к сокету в Pumping mode чтоб получить последние котировки.
Результат - котировки любых других символов, но не того, по какому запрос.

Если же добавить только 1 символ, и потом по нему запросить GetPrices то результат: "symbol is in instant execution mode but not selected".
Хотя символ добавлен нормально и по нему приходят котировки.

Обращение к сокету не в Pumping mode с запросом GetPrices - всё ОК.

Проверьте пожалуйса. dll от 21.02.03

P.S. пора б уже добавлять № версии dll в архив, да и VersionInfo в её ресурсы.
 
вызовы GetPrices
Функцию int GetPrices(const char *symbol,const int lots,double *bid,double *ask); нельзя вызывать для сокета, находящегося в пампинге.
GetPrices - функция запроса bid/ask для совершения сделки. Посмотрите примеры - в них все точно показано.
 
Как тогда понимать ваши слова в redme?
"int MtGetPrices( .....
Необходимое замечание. Если инструмент, по которому запрашиваются цены,
находится в режиме Instant Execution, то обращения к серверу не произойдёт,
и функция вернет ошибку RET_INSTANTEXECUTION. В этом случае необходимо
просто брать последние котировки по запрашиваемому инструменту. Либо
использовать эту же функцию, но для объекта сокета, переведенного в
режим подкачки данных, предварительно добавив инструмент для получения
котировок при помощи функции MtAddSymbol. ..."

и

"int MtSetPumpingMode( ...
...Также можно вызывать функцию MtGetPrices, но только в том случае, если
запрашиваемый инструмент находится в режиме Instant Execution! ..."

Делаю согласно вышеприведённому:
1. режим Instant Execution.
2. вызываю GetPrices в сокете в PumpMode с целью получить последние bid/ask для совершения сделки.

Как это согласуется с Вашим постом?
 
общие и частные рекомендации
общая рекомендация такова - для запроса цен необходимо создать новый объект сокета (MtCreate), последовательно вызвать MtConnect, MtLogin, MtGetPrices, MtDisconnect, MtDelete. 2-я общая рекомендация - "После перевода объекта сокета в режим подкачки данных недопустимо обращаться к серверу через данный сокет с запросами" (в описаниях таких функций присутствует определение "запрос серверу...").
Теперь частности. Вы должны хорошо осознавать, что Вы хотите сделать и как достичь желаемого результата. Как узнать, что инструмент находится в режиме Instant Execution? Нужно обратиться к соответствующей строке списка инструментов. Этот список инструментов может быть получен при помощи вызова функции MtGetSecurities, которая скопирует для Вас список, хранящийся в объекте сокета. Для того, чтобы этот список появился в данном объекте сокета необходимо произвести запрос серверу MtRefreshSecurities. Попутно заметим, что в объекте сокета может храниться и список так называемых "выбранных" инструментов, который формируется при помощи функции MtAddSymbol (но этот список реально необходим только в режиме подкачки данных). Ещё одно попутное замечание - формирование списков доступных и выбранных инструментов в каком-либо объекте сокета совсем не означает, что во вновь созданном объекте сокета эти списки будут такими же! Нет, их надо формировать заново. Ранее нами уже выдавалась общая рекомендация держать постоянно открытым только один сокет. Именно по этой причине.
Теперь вернёмся к Вашему вопросу. Мы проверяем замеченный Вами баг. Если найдём ошибку, то обязательно исправим. Вы процитировали замечания в описаниях функций - используйте общие рекомендации. В Вашем случае - брать последние котировки.
Причина обращения: