3Qu
3Qu личный блог
02 ноября 2020, 22:55

Python. Импорт данных OHLCV из файла CSV.

Простите за банальность, работа с данными начинается с их получения из внешнего источника. Мы будем получать их из CSV-файла архива котировок, скачанного с сайта Финам. Для работы с другими источниками вам надо будет немного изменить программу.

Я уже давно не работаю непосредственно с CSV, и храню все данные в БД SQLite. Поначалу я хотел написать программу чтения CSV с нуля, но выяснилось, что я уже подзабыл как это делается, однако нашелся рояль в кустах — моя старая библиотека читающая данные из CSV-файла непосредственно в программу. Ее мы и будем использовать.
Собственно, Python и ориентирован на работу с библиотеками, и не нужно знать что там внутри, важно только уметь с ними работать, а сами программы с использованием библиотек станут очень простыми.
Для начала качаем с Финам историю в формате CSV-файла следующего вида:

<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
SPFB.Si-12.20,1,04/05/20,10:00:00,76900.0000000,76990.0000000,76900.0000000,76990.0000000,3
SPFB.Si-12.20,1,04/05/20,10:06:00,77695.0000000,77695.0000000,77400.0000000,77400.0000000,8
SPFB.Si-12.20,1,04/05/20,10:08:00,77781.0000000,77781.0000000,77700.0000000,77750.0000000,30
SPFB.Si-12.20,1,04/05/20,10:13:00,78088.0000000,78098.0000000,78088.0000000,78098.0000000,6
SPFB.Si-12.20,1,04/05/20,10:14:00,78100.0000000,78100.0000000,78100.0000000,78100.0000000,1

Все настройки формата данных выбираются перед скачиванием файла. Другой формат данных программа не поймет. Выбор инструмента и таймфрейма, по вашему усмотрению.
Теперь текст программы:

import matplotlib.pyplot as plt
import SLPack.csvjob as csvj # грузим либу работы с CSV

data = [] # Данные
title = [] # Строка заголовков

csvfile = "SPFB.Si-12.20_200501_201001_2.csv"

# фомат строки файла, если данные читаются из другой папки
# "D:/Download/Futures/SPFB.Si-3.21_200501_201001.csv"

csv = csvj.cCSVReadFile(csvfile) # Открываем файл CSV и считываем данные
csv.ConvertT() # Конвертируем время свечей к формату гггг-мм-дд чч:мм:сс
title = csv.title # копируем строку заголовка в нашу переменную title
title.pop(3) #
data = csv.InData # копируем данные в нашу переменную data

# Строим график Close,
dclose =[data[i][6] for i in range(0,len(data))] # по индексу 6 у нас Close
plt.plot(dclose)
plt.grid()
plt.show()

Запускаем, и смотрим график Closе за 3 месяца.
Python. Импорт данных OHLCV из файла CSV.


И наконец, ссылка на архив. Качаете, распаковываете, открываете, запускаете. Файл CSV c данными OHLCV тоже в архиве - https://yadi.sk/d/ZxW6ozwgRX3pBA

Возможно, кому-то это может пригодиться для моделирования стратегий в Python и их тестирования.

19 Комментариев
  • Михаил
    02 ноября 2020, 22:58
    В 99% все равно потом будет pandas использоваться — легче сразу https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
  • PSH
    03 ноября 2020, 08:12
    Да, начинал я также с python и csv :)
    Сначала задолбало скачивать файлы, сделал, чтобы их скачивал сам скрипт
    Потом задолбало их держать в csv, стал лить в SQLite
    Потом захотелось больше функциональности, поэтому отпал python
    Потом перестало хватать производительности SQLite, поэтому провел миграцию в PostgreSQL (на данный момент обе системы работают параллельно и производится ежемесячная сверка данных, надеюсь SQLite остановить к Новому Году)
  • day0markets.ru
    04 ноября 2020, 16:26

    from collections import namedtuple

    candle = namedtuple('candle', ('t', 'o', 'h', 'l', 'c', 'v'))
    with open('my_csv.csv') as f:
        candles = [candle(*x.split(',')) for x in f.read().splitlines()]

    4 стоки без пандасов, csv  и файлов с гугл драйва

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн