Блог им. FineLogin

Лайфхак QLUA для загрузки больших данных

    • 27 апреля 2023, 22:45
    • |
    • GOLD
      Популярный автор
  • Еще
Мой дорогой друг, если ты гоняешь бэктесты в QLUA, то тебе регулярно приходится загружать исторические данные. Как правило, это текстовый файл с тысячами строк в формате D,T,O,H,L,C,V:

20220915,090000,61420,61497,61406,61464,241
20220915,090100,61460,61476,61420,61451,160
20220915,090200,61444,61489,61436,61479,185

Осмелюсь предположить, что эти строки ты заливаешь в массив с помощью string.match. Это готовый парсер строки с разделителем. Работает достаточно шустро. Я на нем сидел пару лет.

Когда данных не много, такой метод загрузки не напрягает. Но когда за день 20-30 раз загружаешь сотни тысяч или миллион строк, то потери времени становятся невыносимыми.

Стал искать способ ускорить этот процесс. И он таки нашелся. Выяснил следующее:

Если строки в файле истории сконвертировать в такой вид (делается 1 раз):

table.insert(MyTable,{«20220915»,«090000»,61420,61497,61406,61464,241})
table.insert(MyTable,{«20220915»,«090100»,61460,61476,61420,61451,160})
table.insert(MyTable,{«20220915»,«090200»,61444,61489,61436,61479,185})

и в цикле выполнять load каждой строки, то скорость загрузки исторических данных вырастет примерно в пять раз.

В пять раз, Карл!

Бери и пользуйся))

686 | ★2
8 комментариев
Так, пусть Lua сам и конвертирует. Простенький скрипт. Че нам-то напрягаться.)
Сразу получится в 10 раз быстрее.)
avatar
3Qu, каким инструментом конвертировать файл — не важно… это нужно сделать один раз в жизни))

ускорение происходит за счет того, что вместо парсинга строк происходит заливка массива напрямую
avatar
$100, 
каким инструментом конвертировать файл — не важно
Да, согласен. Тогда лучше, уж, сразу конвертировать так.
MyTable = {{Str1}, {Str2},....., {StrN}}
Сразу получаем готовую переменную MyTable, без всяких insert.)
Или как-то так. Подзабыл я слегка Lua.
avatar
Мой дорогой друг, если ты гоняешь бэктесты в QLUA, то

… подумай о том, что в жизни надо что-то менять )))

(Шутка. Возможно, действительно полезный лайфхак. Не могу оценить.)
avatar
Jame Bonds, нуу… уж лучше гонять бэктесты, чем сливать бабло без тестов))
avatar
а если не использовать тугую table.insert, то будет еще быстрее загружаться
пример:
MyTable[1]={«20220915»,«090000»,61420,61497,61406,61464,241}
MyTable[2]={«20220915»,«090100»,61460,61476,61420,61451,160}
string.match работает медленно, потому что регулярка каждый раз компилмруется при выполнении. Это же очевидная вещь.
Если надо быстрее то надо отдельно один раз компилять регулярку а потом использовать много раз.
Например используя => github.com/mah0x211/lua-regex
------------

Это же тривиально.
avatar
Beach Bunny, правда эта либа зависит от нативной pcre2, пусть уж компилирует каждый раз)
avatar

Читайте на SMART-LAB:
Обновление кредитных рейтингов в ВДО и розничных облигациях (АО«РОЛЬФ» присвоен BBB+.ru от НКР |АО«Эталон-Финанс» присвоен А-.ru от НКР)
🟢 АО «РОЛЬФ» НКР присвоило кредитный рейтинг BBB+.ru АО «РОЛЬФ» является одним из крупнейших автодилеров на высокофрагментированном...
Фото
Каждый инвестор желает знать, где сидит доходность? Взгляд Goldman Sachs на инвестиции до конца года
Если вы инвестируете свой капитал на фондовом рынке, то каждый год легко может принести вам как большие потери, так и несметные богатства....
С чем связан сегодняшний рост акций ВТБ?
Сегодня на фоне небольшого снижения российского фондового рынка акции банка ВТБ поднимаются на 1,5%, до 91,3 руб.Поддержку котировкам оказала...
Фото
Башнефть: есть шанс на переоценку, но нужно запастись терпением. Прогноз сошелся с фактом в высокой точностью, ищем инвест идею
Башнефть отчиталась по МСФО за 2025 год — внимание, квартальных отчетов в прошлом году не было вообще! Традицицинно сравниваем прогноз...

теги блога GOLD

....все тэги



UPDONW
Новый дизайн