Введение
Нужно экспортировать всю ТОС луа-скриптом. Дело не то чтобы сложное, если обязать юзера держать ТОС открытой. Но хочется покрасивше, давайте на старте подпишемся на все доступные инструменты? А давайте...
Глава первая, шапкозакидательская
запускаем - и квик намертво виснет, загрузив одно ядро на 100%. Через час-другой экперимент прекращен через прибитие квика. В научных целях упражнение повторялось неоднократно, результат один.
Глава вторая, исследовательская
Добавляем логи, смотрим, что происходит. Квик резво создает датасорцы, добирается до класса с опционами (а их там ой как много) и процесс начинает постепенно замедляться. Моего терпения хватило до момента, когда создание одного датасорца занимало 6 секунд, проверить апорию об ахиллесе и черепахе не вышло, квик был снова прибит.
Глава третья, кулхацкерская
Где-то между неудачными запусками в волшебном INFO.ini была ручками очищена секция [ALL_TRADES_DATA], так что содержала только
Запускаем наш недоскрипт снова и что мы видим? Квик по мере создания датасорцев пишет в эту секцию коды инструментов. Ну, это логично и ожидаемо, пока дело не доходит до секции с опционами. Их и так много, но квику все мало и он начинает добавлять и добавлять опционы по второму, третьему и так далее кругу. Удалось получить INFO.ini размером в 200 с лишним мегабайт, дальше ждать смысла не было. Весь этот объем был набран исключительно классом SPBOPT, остальные классы были "нормальные", хотя я бы и ожидал от квика чуть большего интеллекта, чтобы самому заменить исчерпывающий список класса на ALL (при выборе всех инструментов в диалоге настройки получаемых данных он же как-то догадывается).
Глава четвертая, предположительная
Судя по всему, при подписке на опционы (лучше сказать на класс с большим количеством инструментов) квик где-то попадает в бесконечный цикл. Предположительно из-за жесткого лимита на размер буфера, т.е. после достижения определенного размера строки с инструментами квик дальше уже не смотрит, делает вывод "инструмент не найден" и добавляет его еще раз. История с INFO.ini, скорее всего, лишь внешнее проявление внутренней проблемы, поскольку поведение не меняется даже если там для всех классов вручную выставлено ALL.
Глава пятая, вопросительная
Опуская множество сопутствующих вопросов, я спрошу:
1) как из скрипта при закрытой ТОС подписаться на все доступные инструменты, чтобы это было выполнено в обозримое время?
2) если я из скрипта залезу в INFO.ini и перепишу секцию [ALL_TRADES_DATA], дабы освободить юзера от ковыряния в диалоге заказа данных, это будет грязный хак или не очень?
Глава пятая, пожелательная
Уже было такое пожелание здесь, но и я добавлю. Пусть CreateDataSource со вторым параметром nil и третьим INTERVAL_TICK подписывается сразу на весь класс (и при необходимости выставляет в INFO.ini для этого класса ALL).
Нужно экспортировать всю ТОС луа-скриптом. Дело не то чтобы сложное, если обязать юзера держать ТОС открытой. Но хочется покрасивше, давайте на старте подпишемся на все доступные инструменты? А давайте...
Глава первая, шапкозакидательская
Код |
---|
local SubscribeAllTrades = function() local cls = split(getClassesList(), ',') for k, v in pairs(cls) do local sec = split(getClassSecurities(v), ',') for kk, vv in pairs(sec) do local ds = CreateDataSource(v, vv, INTERVAL_TICK) if nil ~= ds then ds:SetEmptyCallback() else message(v .. ':' .. vv) end ds = nil end end end OnI nit = function() SubscribeAllTrades() end |
Глава вторая, исследовательская
Добавляем логи, смотрим, что происходит. Квик резво создает датасорцы, добирается до класса с опционами (а их там ой как много) и процесс начинает постепенно замедляться. Моего терпения хватило до момента, когда создание одного датасорца занимало 6 секунд, проверить апорию об ахиллесе и черепахе не вышло, квик был снова прибит.
Глава третья, кулхацкерская
Где-то между неудачными запусками в волшебном INFO.ini была ручками очищена секция [ALL_TRADES_DATA], так что содержала только
Код |
---|
[ALL_TRADES_DATA] req-all-trades-from-curr-moment=0 |
Глава четвертая, предположительная
Судя по всему, при подписке на опционы (лучше сказать на класс с большим количеством инструментов) квик где-то попадает в бесконечный цикл. Предположительно из-за жесткого лимита на размер буфера, т.е. после достижения определенного размера строки с инструментами квик дальше уже не смотрит, делает вывод "инструмент не найден" и добавляет его еще раз. История с INFO.ini, скорее всего, лишь внешнее проявление внутренней проблемы, поскольку поведение не меняется даже если там для всех классов вручную выставлено ALL.
Глава пятая, вопросительная
Опуская множество сопутствующих вопросов, я спрошу:
1) как из скрипта при закрытой ТОС подписаться на все доступные инструменты, чтобы это было выполнено в обозримое время?
2) если я из скрипта залезу в INFO.ini и перепишу секцию [ALL_TRADES_DATA], дабы освободить юзера от ковыряния в диалоге заказа данных, это будет грязный хак или не очень?
Глава пятая, пожелательная
Уже было такое пожелание здесь, но и я добавлю. Пусть CreateDataSource со вторым параметром nil и третьим INTERVAL_TICK подписывается сразу на весь класс (и при необходимости выставляет в INFO.ini для этого класса ALL).