Конвертация из CSV в CSV с агрегацией

Цена договорная
28 июля 2022, 14:58 • 8 откликов • 71 просмотр
Кратко для тех кто поймет: Нужно написать скрипт, который сожмет CSV тиковых котировок в котировки по ценовому диапазону.
Исходники можно скачать тут https://www.finam.ru/profile/mosbirzha-fyuchersy/s...

По идее это тривиальная задача для опытного и может быть учебной задачей для того кто только изучает Python.

Пример входного файла:
<TICKER>,<PER>,<DATE>,<TIME>,<LAST>,<VOL>
SPFB.Si-9.22,0,20220726,100000,60420.000000000,2
SPFB.Si-9.22,0,20220726,100000,60420.000000000,2
SPFB.Si-9.22,0,20220726,100000,60468.000000000,1

Формат выходного файла:
<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
SPFB.Si-9.22,1,20220726,100000,60420.0000000,60963.0000000,60362.0000000,60834.0000000,52921
SPFB.Si-9.22,1,20220726,100100,60843.0000000,60900.0000000,60708.0000000,60729.0000000,20998
SPFB.Si-9.22,1,20220726,100200,60729.0000000,60817.0000000,60706.0000000,60718.0000000,13598
SPFB.Si-9.22,1,20220726,100300,60719.0000000,60780.0000000,60665.0000000,60706.0000000,17057
SPFB.Si-9.22,1,20220726,100400,60706.0000000,60759.0000000,60645.0000000,60712.0000000,11265
SPFB.Si-9.22,1,20220726,100500,60716.0000000,60789.0000000,60692.0000000,60760.0000000,10904

Описание алгоритма:
1. TICKER=TICKER, OPEN = LAST первой строки, DATE = DATE, PER=1, TIME = минимальное TIME
2. Далее перебирая строки вычисляем:
- VOL=сумма VOL строк
- HIGH = Максимальное LAST строк
- LOW = минимальное LAST строк
- CLOSE= LAST
3. Условие закрытия строки и создания новой:
- При выполнении условия HIGH-LOW>=Заданное в параметрах значение. Например 200. Как только условие выполнилось записываем строчку в выходной файл и начинаем с начала со следующей строки.
- Если изменилась дата то CLOSE= LAST предыдущей строки, записываем строку и начинаем новую строку.

Входные параметры скрипта:
- Путь к папке с исходниками (несколько файлов)
- Путь к файлу результата
- Размер свечи (например 200.0000000)

Сделать вторую верcию скрипта в которой TIME будет увеличиваться на минуту с каждой новой строкой внутри дня, а не браться из исходящего файла.
100000 100100 100200 100300 .. 105900 110000 110100 ..
при TIME<??5900 TIME=TIME предыдущей строки выходного файла +100
при TIME=??5900 TIME=TIME предыдущей строки выходного файла +10000-5900
Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Первую версию получил быстрее чем ожидал. Артем оперативно исправил все обнаруженные мной ошибки.
2 года назад