RET_TOO_FREQUENT = 21; // слишком частые обращения

 
RET_TOO_FREQUENT = 21; // слишком частые обращения
Уважаемые разработчики.
Подскажите пожалуйста, как часто я могу обращаться к функциям mtapi? Ситуация такая.
Сразу после MtConnect и MtLogin я вызываю MtSetPumpingMode, и еще в двух дополнительных потоках MtRefreshSecurities и MtGetRates (с предварительными MtConnect и MtLogin для этих сокетов). MtRefreshSecurities и MtGetRates завершаются тут же с кодом ошибки 21. А MtSetPumpingMode через некоторое время завершается с RET_OK. Сразу после этого MtAddSymbol возвращает опять код ошибки 21.
Вроде был разговор о максимально допустимом количестве сокетов = 3 (они создаются успешно). Функции запускаю вроде те, которые необходимы, вроде не наглея. Но ...
Подскажите, где я неправ и какое минимальное время тогда допустимо между обращениями к mtapi?
 
Вы что-то делаете не так
максимальное количество сокетов - 10
"слишком частые обращения" - имеется в виду малый интервал между вызовом одной и той же функции. например 2 логина подряд. вот допустимые интервалы в секундах:
между двумя логинами - не менее 1 секунды
OpenDemoAccount - 30 секунд
ChangePassword - 60
RefreshSecurities - 5
GetTrades - 5
GetTradeHistory - 5
GetNewsBody - 5
GetPrices - 5
торговые операции с ордерами - 5
SetPumpingMode и должна сразу возвращаться. сразу же после того, как запустит поток получения данных от сервера. И если у вас включен режим подкачки данных, то GetRates вызывать не надо - котировки сами будут приходить. AddSymbol лучше вызывать после RefreshSecurities, но до SetPumpingMode
Посмотрите как работает пример номер 2 в составе API
 
Теперь ясно в чем дело...
Спасибо, все понял. Объясню, в свете этого, что есть у меня.
Пока я работал через сильно тормозящий httport, все это уже работало нормально. Но сегодня наконец-то уговорил своего админа открыть 1950 порт, и начались проблемы (с нашим скоростным каналом теперь все это залетало). После нажатия кнопки через долю секунды у меня и начала выскакивать 21-я ошибка. За это время моментально выполняется MtConnect, MtLogin и запускался MtSetPumpingMode для сокета 1. Тут же следом создается сокет 2 и вызываются для него MtConnect, MtLogin и MtRefreshSecurities. Здесь между MtLogin для 1-го и 2-го сокетов действительно проходит гораздо меньше секунды, это даже на глаз видно.
Хорошо, что написали минимально допустимые интервалы, вот только MtGetRates забыли. Эту функцию я запускаю только для докачки недостающей истории, а перед ней MtAddSymbol для того же инструмента.
MtRefreshSecurities все же, чувствую, надо сразу за MtLogin вызывать и пока не отработает больше ничего не вызывать для надежности. Верно?
"AddSymbol лучше вызывать после RefreshSecurities, но до SetPumpingMode."
Надеюсь, что по мере необходимости MtAddSymbol все же можно вызывать и после MtSetPumpingMode?
 
Самое главное условие, что AddSymbol надо вызывать после RefreshSecurities. Про pumping mode - это просто рекомендация, не более
Причина обращения: