У меня не было этой проблемы, пока я не начал наносить больше символов на экран. Я не думаю, что это процесс обработки, мой процессор в порядке, и я все равно не делаю ничего сверхъестественного (просто сохраняю данные в объекты и время от времени пишу в текстовые файлы).
С первого дня работы с API я заметил, что мне пришлось поместить sleep (1) в цикл while, который постоянно проверяет сообщения, например:
PosixTestClient client;
client.connect( host, port, clientId);
while( client.isConnected()) {
sleep(1);
client.processMessages();
}
Если у меня нет этого сна (1), он просто падает. Итак, я думаю, мой первый вопрос: это нормально? Или что-то не так с этим?
И мой следующий вопрос … какие-либо советы относительно того, почему может быть задержка в данных API по сравнению с данными TWS? Я знаю, что есть задержка, потому что когда данные поступают в API, я сохраняю их в виде строк, а затем каждую минуту записываю данные в текстовые файлы. Затем я возвращаюсь к своим текстовым файлам и сравниваю их с графиками в tws … и я замечаю, что примерно 2-минутное отставание! Я также замечаю, что, кажется, становится лучше (лаг исчезает) после первых полчаса торгового дня, когда все довольно активно.
Итак … какой-нибудь совет?
Вы подписались на Booster Pack?
TWS API имеет ограничение в 100 кавычек, а также API. Вы можете купить дополнительные 100 цитат за 30 $.
Цитата Booster
Увеличьте размер окна одновременных котировок, приобретая ежемесячные пакеты повышения цен по цене 30 долларов США за пакет.Каждый бустер содержит 100 цитат первого уровня. Котировки Booster Pack дополняют ваше ежемесячное распределение котировок из всех источников, включая комиссионные.
Котировки Booster Pack доступны для использования в настольных системах и в API.
После подписки цитаты становятся доступны немедленно и будут отображаться при следующем входе в систему.
Данные из отмененной подписки на дополнительный пакет остаются доступными до конца текущего платежного цикла.
Лимит 10 бустеров котировки на аккаунт.
Итак … с помощью очень полезной и дружелюбной группы пользователей Yahoo TWS API: https://groups.io/g/twsapi/messages
Я смог найти ответ, который был просто:
сократить время сна! Запуск его без сна в промежутке между client.proccessMessages () заставил бы мой процессор работать довольно высоко, но все, что мне было нужно, чтобы действительно расслабить процессор, это просто поспать несколько миллисекунд … а не целую секунду. Сон на целую секунду приводил к задержке данных (я подозреваю, что IB запрашивает данные, а затем «отправляет» их вам, когда вы вызываете proccessMessages (), поэтому вам нужно вызывать их достаточно часто, чтобы опередить данные тика, которые вы получают!)
Для тех, кто хочет прочитать это более подробно, здесь была ветка: https://groups.io/g/twsapi/topic/4702705#37186
Пальцы скрестили, что это продолжает работать, но сегодня я получил хорошие данные на 100 тикерах большого объема без задержки 🙂