-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SearchItems #24
Comments
Добрый день. |
Пока я не планирую ее писать, для вызова FUNCTION fn нужно придумать удовлетворительную генерализацию. По поводу быстродействия, если оно существенно, я рекомендую начать оптимизацию с общей архитектуры робота. В первую очередь, нужно учитывать что Quik - изначально был терминал для конечного пользователя, не занимающегося трансформацией данных и подобными вещами. Lua интерфейс построен сверху этих требований. Поэтому весь Lua интерфейс можно условно поделить на функции, работающие с "первичными" данными и "вторичными" данными. Вторичные данные - это те, которые построены на основе первичных. Например, информация о конкретной сделке, транслируемая с биржи - первична. Программист не может ее получить без помощи Quik. А свеча, отрисованная за период по таким сделкам - вторична, зная сделки и время, она может быть обсчитана программистом и без функций Quik по свечам. Из-за этого в Qluacpp не было изначально функций по чисто "вторичным" функциям, типа того же получения отстроеных сервером Quik свечей. Необходимость в таких функциях я вижу только если вы пишете скрипт, который должен "совпадать" по отображению данных с данными Quik, например скрипт на продажу, который должен рисовать пользователю графики ровно так же, как делает это Quik. Функция SearchItems вторична и (почти) во всех случаях - лишняя нагрузка на производительность, если вы работаете с первичными данными. В случае с securities наиболее разумно все бумаги кешировать в структуру один раз при старте скрипта, данная структура должна быть оптимизирована по полю или полям, по которому будет поиск. Например std::map (логарифмический поиск по ключу) или std::unordered_map (константное время поиска, но нужна эффективна хеш-функция). Если у вас бумаги не меняются в течении сессии, это однозначно более оптимальный подход. Если меняются, тоже оптимальный, но потребует труда по обновления. В случае с alltrade, зависит от того, что вы делаете, но в большинстве случаев выгоднее, получать данные по трейд-коллбеку, фильтровать их и хранить в своих структурах, чем пользоваться их огромной таблицей и использовать бриджинг вызовов в Lua, чтоб с ней что-то делать. |
Я примерно так и делаю, только периодически пользуюсь getItem для alltrade в случае прерывания связи и записи тиковых данных в архив. |
Возможно, только синхронизацию делайте через lock-free структуру, а не что-либо, что будет вызывать системные локи потоков. См. пример logalltrade. |
Добрый день.
Планируете реализовать функцию ?
TABLE SearchItems(STRING table_name, NUMBER start_index, NUMBER end_index, FUNCTION fn [, STRING params])
Разработчики quik утверждают, что скорость получения данных из таблиц быстрее чем getItem(...), но насколько точно выяснить не удается без реализации.
Это особенно актуально для таблиц alltrade (~ 50-80 тыс. значений) and securities (~ 20 тыс. значений)
The text was updated successfully, but these errors were encountered: