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

Модуль quotes

Программный пакет на основе модуля quotes

Оформим структуру данных для работы с котировками в виде класса

Модуль quotes - задумывался мною как библиотека (или пакет), но взвесив все как следует решил что это будет программный пакет на основе модуля (или, опять же, пакета) quotes. Поэтому несколько изменим структуру продукта:

tree (1)
tree (1)

В папке quotes будет располагаться библиотека, а в корневой папке проекта будут находиться скрипты, использующие эту библиотеку. Первый функционал, который мы сделаем доступным - это возможность загружать котировки с сайта finam, распаковывать эти данные и сохранять в файл для дальнейшего использования. Функцию загрузки котировок скопипастим из предыдущей статьи, а над остальным придется потрудиться. Оформим структуру данных для работы с котировками в виде класса. Назовем его stock. Итак, исходники quotes.py с комментариями:

# -*- coding: utf-8

загрузка котировок
загрузка котировок

import string

import urllib

# загрузка котировок

def get_quotes(df, mf, yf, dt, mt, yt, simb, period):

f = urllib.urlopen('http://195.128.78.52/GAZP_080201_100208.txt?d=d&market=1&em=' +

str(simb)+'&df='+str(df)+'&mf='+str(mf)+'&yf='+str(yf)+'&dt='+str(dt)+'&mt='

+str(mt)+'&yt='+str(yt)+'&p='+str(period)

+'&f=GAZP_080201_100208&e=.txt&cn=GAZP&dtf=4&tmf=4&MSOR=0&sep=1&sep2=1&datf=5&at=1')

quot = f.read()

return string.split(quot, '\\n')[1:-1]

# класс quote - котировки

class quote(object):

# инициализация: по умолчанию грузим газпром часовик

# обозначения периодов 1 - тики, 2 - минуты, 3 - 5 минут, 7 - 1 час, 8 - день

def __init__(self, period=7, simb=16842):

# "сырые" данные которовок - массив строк

self.raw_data = []

# развернутые данные - open, high, low, close, volume

self.open, self.high, self.low, self.close, self.volume = [], [], [], [], []

# номер торгового инструмента (по финаму)

self.simb = simb

# период

self.period = period

запись котировки в файл
запись котировки в файл

# распаковка "сырых" данных

def decomp(self):

self.open, self.hight, self.low, self.close, self.volume = [], [], [], [], []

for line in self.raw_data:

mix = string.split(line, ',')[2:7]

self.open.append(float(mix[0]))

self.high.append(float(mix[1]))

self.low.append(float(mix[2]))

self.close.append(float(mix[3]))

self.volume.append(int(mix[4]))

# грузим котировки из инета

def load_quotes(self, df, mf, yf, dt, mt, yt):

self.raw_data = get_quotes(df, mf, yf, dt, mt, yt, self.simb, self.period)

self.decomp()

# записываем котировки в файл (сырые)

def save(self, fname):

f = open(fname, 'w')

for line in self.raw_data:

f.write(line+'\\n')

f.close()

# грузим "сырые" котировки из файла

def load(self, fname):

f = open(fname, 'r')

quot = f.read()

f.close()

self.raw_data = string.split(quot, '\\n')[:-1]

self.decomp()

инициализируем объект класса quotes
инициализируем объект класса quotes

А вот пример использования класса quote:

# -*- coding: utf-8

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

import quotes.quotes as quotes

# инициализируем объект класса quotes

# 8 - период сутки, по умолчанию ГАЗПРОМ

q = quotes.quote(8)

# период: с 1.01.2010 по 30.01.2010

# (напомню, нумерация месяцев здесь начинается с 0)

q.load_quotes(1, 0, 2010, 30, 0, 2010)

# выводим "сырые" данные

print q.raw_data

# вывод объемов по дням

print q.volume

# сохраняем котировки в файл

q.save('zzz.txt')

# делаем новый объект класса quotes

q2 = quotes.quote(8)

# загружаем котировки из только что сохраненного файла

q2.load('zzz.txt')

# выводим объемы по дням - все в норме

print q.volume