Size: a a a

Алготрейдинг

2021 March 09

NE

Nathan Explosion in Алготрейдинг
2pack
На локальном ssd. К ним быстрый доступ нужен.
redis ещё быстрее..
как сдвиг делаете между годами (или месяцами)
или просо каждый раз читаете файл с начала
источник

2

2pack in Алготрейдинг
Nathan Explosion
redis ещё быстрее..
как сдвиг делаете между годами (или месяцами)
или просо каждый раз читаете файл с начала
Бегло прочитал про redis. Похоже это просто набор структур для хранения в оперативе.

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

NE

Nathan Explosion in Алготрейдинг
это полноценная дб.
вот хотел timeseries их заюзать для нужда срезов, но функционал ограничен для TS.
источник

as

aasky systems in Алготрейдинг
При работе со свои даталейком( там и ohlcv и другие параметры на момент времени) вернулись на постгре с хаками, партционированием и прочим кешем. С редис трудно получить список ключей, или нужно их хранить в отдельном сете. Кликхаус   или эластик не использовал кто нибудь? Еще использую sqlite ради быстрой переносимости. Файл скопировал и кеш готов)
источник

VM

Viktor Mazankin in Алготрейдинг
aasky systems
При работе со свои даталейком( там и ohlcv и другие параметры на момент времени) вернулись на постгре с хаками, партционированием и прочим кешем. С редис трудно получить список ключей, или нужно их хранить в отдельном сете. Кликхаус   или эластик не использовал кто нибудь? Еще использую sqlite ради быстрой переносимости. Файл скопировал и кеш готов)
На больших объемах ES тупит. Я в S3 храню, очень быстро получается если паковать в parquet
источник

T

Toroboan in Алготрейдинг
aasky systems
При работе со свои даталейком( там и ohlcv и другие параметры на момент времени) вернулись на постгре с хаками, партционированием и прочим кешем. С редис трудно получить список ключей, или нужно их хранить в отдельном сете. Кликхаус   или эластик не использовал кто нибудь? Еще использую sqlite ради быстрой переносимости. Файл скопировал и кеш готов)
шо то как то не понятно. то постгря не вывозит по объемам что аж партиционирование вкрутили, то sqlite, которая на сколько я знаю вообще мобильная локальня бд без каких либо плюшек т.е. для небольшого кол-ва данных
источник

IE

Igor Energy in Алготрейдинг
2pack
Бегло прочитал про redis. Похоже это просто набор структур для хранения в оперативе.

Я храню файлики с данными, разбитые по дням, последовательно подгружаю их в оперативу и там с ними работаю.
Редис это хранение данных в памяти, если какой то сбор или перезагрузка - все данные умирают.
источник

VM

Viktor Mazankin in Алготрейдинг
Igor Energy
Редис это хранение данных в памяти, если какой то сбор или перезагрузка - все данные умирают.
Не обязательно, он умеет и в persistent
источник

NE

Nathan Explosion in Алготрейдинг
aasky systems
При работе со свои даталейком( там и ohlcv и другие параметры на момент времени) вернулись на постгре с хаками, партционированием и прочим кешем. С редис трудно получить список ключей, или нужно их хранить в отдельном сете. Кликхаус   или эластик не использовал кто нибудь? Еще использую sqlite ради быстрой переносимости. Файл скопировал и кеш готов)
Видел хранят в кликхаусе ohlcv без проблем. Я остановился на инфлюксДб. Эластик не то
источник

NE

Nathan Explosion in Алготрейдинг
В монге токо не храните
источник

T

Toroboan in Алготрейдинг
Nathan Explosion
В монге токо не храните
опа, а поч?
источник

NE

Nathan Explosion in Алготрейдинг
Она не для таймсериес
источник

T

Toroboan in Алготрейдинг
хм, действительно гугл не рекомендует. хотя я всегда думал что монго бы подошла
источник

as

aasky systems in Алготрейдинг
Toroboan
шо то как то не понятно. то постгря не вывозит по объемам что аж партиционирование вкрутили, то sqlite, которая на сколько я знаю вообще мобильная локальня бд без каких либо плюшек т.е. для небольшого кол-ва данных
Это такой костыль, не для больших обьемов. Тут сугубо задача сохранить посчитанные данные за период и потом со временем переиспользовать. Если есть файл на шаре, то используется, если нет считаем заново. По крону удалются.
источник

NE

Nathan Explosion in Алготрейдинг
aasky systems
Это такой костыль, не для больших обьемов. Тут сугубо задача сохранить посчитанные данные за период и потом со временем переиспользовать. Если есть файл на шаре, то используется, если нет считаем заново. По крону удалются.
Как вариант https://www.timescale.com/
Сжимается не так хорошо, но работает быстро
источник
2021 March 10

as

aasky systems in Алготрейдинг
Посмотрю, спасибо.
источник

as

aasky systems in Алготрейдинг
Дополню чуть чуть по архитектуре, чисто инженерное без других подробностей. Возможно будет комуто полезно на потом. Зачем вся эта нагрузка на хранение и почему я к этому пришел. Стоит учитывать, что я тупой и ленивый по сравнению с крутыми ребятами, хотя и есть определенная командная экспертиза в ит решениях. Возможно покритикуете или дадите совет, если уже на следующем уровне. Есть доступ к серверам и видяхам в простое, поэтому возможно архитектура сейчас переусложнена ради будущих возможностей. Это только часть системы для другого рабочего продукта, может быть слишком оверповеред на будущее, но обьясню просто на примере пересечения машек с различными периодами. Основной язык питон, маленько cpp и go. Таймфрейм это не минутки точно из-за времени расчетов и общения воркеров. Часы и дни успевает даже в одно ядро локально без воркеров, остальные таймфремы ниже зависит от нагрузки и ресурсов.
В начале я как все в риалтайме считал параметры, что то с ними делал, получал решение, бектестил и тд. Для МЛ, возпроизводимости и контроля ошибок начал записывать данные и версионировать. Если сделать ансамбль решений на основе данных машек и скажем данных из другого инструмента, получится очень много выходных данных. Плюс они повторяются в расчетах. Для ускорения расчетов очень помогает цитонирование питона или переписывание кода в подключаемую .cpp библиотеку. Это увеличивает скорость до 12 раз. Возникла комбинаторная сложность от пересечений, время обработки увеличилось, в метрики не укладывались. Для того, чтобы не считать каждый раз, сделал такого рода ацикличный граф, те заранее считаю нужные данные и отдаю только цифру по ключу. В итоге пришел к решению, что сначала считаю все нужные узлы и пути этого графа. Потом данные сохраняю в базу. Такой мини даталейк получился.
Воркер кода решения по пайплайну запускается в кубере, считает какието свои там расчеты, по окончанию отдает результат в хранение. Если решению нужны данные, воркер хранения его запрашивает(сейчас в бд и на диске), хранит какоето время в памяти или на диске, отдает по ключу какую либо цифру. По истечению памяти вытесняется, другими данными.
Для определенной скажем свечи, тика или даты, есть свой составной ид хранения, в который входит интрумент, группа, тайфрейм и прочее такое, они разбиты по базам, отдельным таблсетам по скорости, некоторые базы фактически в памяти.
Звучит как работа для хадуп кластера или чегото похожего, пока все на коленке. Пробовали в различных вариациях хранить в json и .pickle файлах, бинарных данных, проблемы с инодами при хранении, вернулись к изначальным базам, как единым точкам хранения. Данные растут и усложняются, не хватает скорости и дисков.
Каждый ид занимает кучу данных, внутри скажем 40к параметров на ид, в целом есть и больше при подгонке теста параметра. Постгрес слабо сжимает данные от 2кб, этого не достаточно.
Пришли к тому, раз все равно данные отдаются из памяти обычно и запрашиваются из базы не частно, просто жмем сериализованный словарь значений гзипом и пишем в базу. Получается строка размеров 2-10мб на ключ. Когда место в хранилище переходит на нескольок ТБ, тогда удаляю старое. Когда чистится от старых данных, потом вакум и подтормаживание.
Все свелось к key[]->value[], скорость зависит от доступных ресурсов.
источник

D

Dmitry in Алготрейдинг
aasky systems
Дополню чуть чуть по архитектуре, чисто инженерное без других подробностей. Возможно будет комуто полезно на потом. Зачем вся эта нагрузка на хранение и почему я к этому пришел. Стоит учитывать, что я тупой и ленивый по сравнению с крутыми ребятами, хотя и есть определенная командная экспертиза в ит решениях. Возможно покритикуете или дадите совет, если уже на следующем уровне. Есть доступ к серверам и видяхам в простое, поэтому возможно архитектура сейчас переусложнена ради будущих возможностей. Это только часть системы для другого рабочего продукта, может быть слишком оверповеред на будущее, но обьясню просто на примере пересечения машек с различными периодами. Основной язык питон, маленько cpp и go. Таймфрейм это не минутки точно из-за времени расчетов и общения воркеров. Часы и дни успевает даже в одно ядро локально без воркеров, остальные таймфремы ниже зависит от нагрузки и ресурсов.
В начале я как все в риалтайме считал параметры, что то с ними делал, получал решение, бектестил и тд. Для МЛ, возпроизводимости и контроля ошибок начал записывать данные и версионировать. Если сделать ансамбль решений на основе данных машек и скажем данных из другого инструмента, получится очень много выходных данных. Плюс они повторяются в расчетах. Для ускорения расчетов очень помогает цитонирование питона или переписывание кода в подключаемую .cpp библиотеку. Это увеличивает скорость до 12 раз. Возникла комбинаторная сложность от пересечений, время обработки увеличилось, в метрики не укладывались. Для того, чтобы не считать каждый раз, сделал такого рода ацикличный граф, те заранее считаю нужные данные и отдаю только цифру по ключу. В итоге пришел к решению, что сначала считаю все нужные узлы и пути этого графа. Потом данные сохраняю в базу. Такой мини даталейк получился.
Воркер кода решения по пайплайну запускается в кубере, считает какието свои там расчеты, по окончанию отдает результат в хранение. Если решению нужны данные, воркер хранения его запрашивает(сейчас в бд и на диске), хранит какоето время в памяти или на диске, отдает по ключу какую либо цифру. По истечению памяти вытесняется, другими данными.
Для определенной скажем свечи, тика или даты, есть свой составной ид хранения, в который входит интрумент, группа, тайфрейм и прочее такое, они разбиты по базам, отдельным таблсетам по скорости, некоторые базы фактически в памяти.
Звучит как работа для хадуп кластера или чегото похожего, пока все на коленке. Пробовали в различных вариациях хранить в json и .pickle файлах, бинарных данных, проблемы с инодами при хранении, вернулись к изначальным базам, как единым точкам хранения. Данные растут и усложняются, не хватает скорости и дисков.
Каждый ид занимает кучу данных, внутри скажем 40к параметров на ид, в целом есть и больше при подгонке теста параметра. Постгрес слабо сжимает данные от 2кб, этого не достаточно.
Пришли к тому, раз все равно данные отдаются из памяти обычно и запрашиваются из базы не частно, просто жмем сериализованный словарь значений гзипом и пишем в базу. Получается строка размеров 2-10мб на ключ. Когда место в хранилище переходит на нескольок ТБ, тогда удаляю старое. Когда чистится от старых данных, потом вакум и подтормаживание.
Все свелось к key[]->value[], скорость зависит от доступных ресурсов.
и как результаты? для получения прибыли это м.б. слишком сложной и избыточной системой.
источник

NE

Nathan Explosion in Алготрейдинг
aasky systems
Дополню чуть чуть по архитектуре, чисто инженерное без других подробностей. Возможно будет комуто полезно на потом. Зачем вся эта нагрузка на хранение и почему я к этому пришел. Стоит учитывать, что я тупой и ленивый по сравнению с крутыми ребятами, хотя и есть определенная командная экспертиза в ит решениях. Возможно покритикуете или дадите совет, если уже на следующем уровне. Есть доступ к серверам и видяхам в простое, поэтому возможно архитектура сейчас переусложнена ради будущих возможностей. Это только часть системы для другого рабочего продукта, может быть слишком оверповеред на будущее, но обьясню просто на примере пересечения машек с различными периодами. Основной язык питон, маленько cpp и go. Таймфрейм это не минутки точно из-за времени расчетов и общения воркеров. Часы и дни успевает даже в одно ядро локально без воркеров, остальные таймфремы ниже зависит от нагрузки и ресурсов.
В начале я как все в риалтайме считал параметры, что то с ними делал, получал решение, бектестил и тд. Для МЛ, возпроизводимости и контроля ошибок начал записывать данные и версионировать. Если сделать ансамбль решений на основе данных машек и скажем данных из другого инструмента, получится очень много выходных данных. Плюс они повторяются в расчетах. Для ускорения расчетов очень помогает цитонирование питона или переписывание кода в подключаемую .cpp библиотеку. Это увеличивает скорость до 12 раз. Возникла комбинаторная сложность от пересечений, время обработки увеличилось, в метрики не укладывались. Для того, чтобы не считать каждый раз, сделал такого рода ацикличный граф, те заранее считаю нужные данные и отдаю только цифру по ключу. В итоге пришел к решению, что сначала считаю все нужные узлы и пути этого графа. Потом данные сохраняю в базу. Такой мини даталейк получился.
Воркер кода решения по пайплайну запускается в кубере, считает какието свои там расчеты, по окончанию отдает результат в хранение. Если решению нужны данные, воркер хранения его запрашивает(сейчас в бд и на диске), хранит какоето время в памяти или на диске, отдает по ключу какую либо цифру. По истечению памяти вытесняется, другими данными.
Для определенной скажем свечи, тика или даты, есть свой составной ид хранения, в который входит интрумент, группа, тайфрейм и прочее такое, они разбиты по базам, отдельным таблсетам по скорости, некоторые базы фактически в памяти.
Звучит как работа для хадуп кластера или чегото похожего, пока все на коленке. Пробовали в различных вариациях хранить в json и .pickle файлах, бинарных данных, проблемы с инодами при хранении, вернулись к изначальным базам, как единым точкам хранения. Данные растут и усложняются, не хватает скорости и дисков.
Каждый ид занимает кучу данных, внутри скажем 40к параметров на ид, в целом есть и больше при подгонке теста параметра. Постгрес слабо сжимает данные от 2кб, этого не достаточно.
Пришли к тому, раз все равно данные отдаются из памяти обычно и запрашиваются из базы не частно, просто жмем сериализованный словарь значений гзипом и пишем в базу. Получается строка размеров 2-10мб на ключ. Когда место в хранилище переходит на нескольок ТБ, тогда удаляю старое. Когда чистится от старых данных, потом вакум и подтормаживание.
Все свелось к key[]->value[], скорость зависит от доступных ресурсов.
у вас там мини бекофис из человек 10 ?
источник

as

aasky systems in Алготрейдинг
Ждал этот вопрос, и честно отвечу, что результаты плачевные для проделанной работы)  Профит лишь немного увеличился, сильно ускорилась разработка и проверка стратегий. Появилась интересная для меня проблема, что если у меня куча плюсовых стратегий, то вместе когда запускаешь, они дают меньше результат. Значит не замечают каких либо рисков и поэтому плюсовые.
источник