Официальный сайт ТелеТрейд

Создание локальной базы котировок

Локальная база котировок для работы над модулем quotes

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

quotes
quotes

Интернет всвязи с отдаленностью есть не всегда, поэтому для беспрепятственного продолжения работы над модулем quotes было решено создать локальную базу котировок.

В модуле quotes на настоящий момент вроде все для сегодняшней задумки есть, но... Но было бы неплохо дополнить его функцией получения символьного наименования торгового инструмента (акции) по его "финамовскому" номеру .

Полный список этих номеров для акций ММВБ можно получить если на странице http://www.finam.ru/analysis/quoteonline/default.asp слева выбрать сектор (ММВБ), чуть правее нажать "Выбрать все", и уже внизу клацнуть по "Показать". Тогда и увидим картинку как на скриншоте ниже:

"финамовский" номер
"финамовский" номер

Сохраним html-код в файл mmvb.txt в папку модуля (в UTF-8, конечно), посмотрим на него и подумаем - как его можно распарсить для составления массива типа <номер-имя>, если типовой элемент выглядит следующим образом:

типовой элемент
типовой элемент

Ну конечно с помощью регулярных выражений:

import re

"финамовский номер" - "название акции"
"финамовский номер" - "название акции"

# загрузка соответствий "финамовский номер" - "название акции"

def get_symbols(fname):

f = open(fname, 'r')

txt = f.read()

f.close()

symbols = re.findall(r'<a href="/analysis/charts/default.asp\\?id=([^"]+)" target=_blank>([^<]+)</a>', txt)

return symbols

Так как данный код понадобится нам в дальнейшем, поместим его в модуль quotes. В результате выполнения этой функции мы получим список 2-х элементных списков (во сказанул :) ), где 1-й элемент - номер ценной бумаги, а 2-й - ее наименование (если быть точным, 0-й и 1-й). Напишем функцию определения наименования акции по ее номеру (отмечу, что в случае передачи несуществующего "финамовского" номера, функцией будет возвращена пустая строка):

# определяем наименование акции по ее "финамовскому" номеру

def get_symb_name(symbols, number):

res = ''

for symb in symbols:

if int(symb[0]) == number:

res = symb[1]

break

return res

Эту функцию тоже поместим в модуль quotes и проверим ее работоспособность файлом test.py :

# -*- coding: utf-8

# загружаем модуль quotes

import quotes.quotes as quotes

# файл сохраненный с сайта "Финам"

fname = 'quotes/mmvb.txt'

# получаем массив инструментов с номерами

symbols = quotes.get_symbols(fname)

# определяем инструмент с номером 16842 - Газпром

создание локальной базы котировок
создание локальной базы котировок

print quotes.get_symb_name(symbols, 16842)

Функция работает исправно, а значит настало время написать скрипт создания локальной базы котировок. Изменяемыми параметрами скрипта являются путь к каталогу, в который будут сохраняться файлы котировок, путь к файлу с соответствиями "номер акции" - "название акции", временной период, а так же интервал. Исполняться скрипт будет относительно долго, поэтому в качестве индикации будем выводить наименование загружаемой акции, какая она по счету и сколько их (акций) всего.

# -*- coding: utf-8

# загружаем модуль quotes

import quotes.quotes as quotes

# каталог для хранения файлов котировок

folder = 'data/'

# файл с сайта "Финам"

qlist = 'quotes/mmvb.txt'

# выгребаем данные с 1.01.2009 по 31.12.2009

df, mf, yf, dt, mt, yt = 1, 0, 2009, 31, 11, 2009

# работаем с днями

period = 8

symbols = quotes.get_symbols(qlist)

i, n  = 0, len(symbols)

for symb in symbols:

i += 1

q = quotes.quote(period, int(symb[0]))

print 'Загружаем', symb[1], ' (', i, 'из', n, ')'

q.load_quotes(df, mf, yf, dt, mt, yt)

q.save(folder + symb[0] + '_' + str(period) + '.csv')

Запускаем скрипт:

каталог для хранения файлов котировок
каталог для хранения файлов котировок

Оформляем код в виде функции (она будет называться make_data_quotes ) и отправляем туда же :) (в модуль quotes). Тогда скрипт загрузки котировок будет таким:

# -*- coding: utf-8

модуль quotes
модуль quotes

# загружаем модуль quotes

import quotes.quotes as quotes

# каталог для хранения файлов котировок

folder = 'data/'

# файл с сайта "Финам"

qlist = 'quotes/mmvb.txt'

# выгребаем данные с 1.01.2009 по 31.12.2009

#df, mf, yf, dt, mt, yt = 1, 0, 2009, 31, 11, 2009

period = (1, 0, 2009, 31, 11, 2009)

# работаем с днями

interval = 8

# делаем локальную базу котировок

quotes.make_data_quotes(folder, qlist, interval, period)