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

Как получить котировки?

Эффективная торговля. Модуль quotes.

Остановлюсь подробнее на параметрах simb и period

инвестиционная компания "Финам"
инвестиционная компания "Финам"

Введение

В этой статье продолжим разговор об эффективной торговле на бирже. Как уже говорилось, статистический анализ котировок является залогом успешной торговли акциями. Но перед тем как обрабатывать котировки необходимо их получить.

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

Анатомия finam.ru

Для работы предпочтительно сохранить файл с котировками на компьютер. На сайте есть удобный инструмент для этих целей, расположенный по адресу http://www.finam.ru/analysis/export/default.asp. Здесь можно выбрать секцию рынка, наименование акции (контракт), требуемый период и другие параметры. Сразу определимся со значениями передаваемых параметров:

значения передаваемых параметров
значения передаваемых параметров

Естественно, даты, временной интервал и наименование акции будут изменяемыми.

Понаблюдаем механизм обмена данными при получении котировок. Для этого используем сетевой анализатор WireShark.

секцию рынка, наименование акции (контракт), требуемый период и другие параметры. Сразу определимся со значениями передаваемых параметров:

http://forexaw.com/TRADERs/Articles/Articles_on_market_analysis/Articles_on_Technical_Analysis/img33556_finamdump.jpg

Как видим - ничего сложного: обычный GET-запрос. Ознакомившись с HTML-кодом формы все становится предельно ясным.

Строка запроса: /GAZP_100716_100716.txt?d=d&market=1&em=16842 &df=16&mf=6&yf=2010&dt=16&mt=6&yt=2010 &p=7&f=GAZP_100716_100716&e=.txt&cn=GAZP&dtf=1 &tmf=1&MSOR=0&sep=3&sep2=1&datf=5

Итак изменяемые параметры:

механизм обмена данными при получении котировок
механизм обмена данными при получении котировок

em - номер финансового инструмента (в нашем случае Газпром - 16842)

df, mf, yf - день, месяц, год даты начиная с которой выдавать котировки

dt, mt, yt - дата по которую выдаются котировки

p - временной интервал (7 означает, что временной интервал 1 час)

Функция quotes

Теперь напишем функцию для получения котировок.

def 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()

f.close()

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

Остановлюсь подробнее на параметрах simb и period.

simb - номер торгового инструмента (см. скриншот) :

номер торгового инструмента
номер торгового инструмента

period - периодичность котировок. Из фрагмента HTML-кода формы экспорта котировок видно как выбирать этот параметр:

<tr valign="top">

<td><label for="p">Периодичность</label></td>

<td>

<select tabindex="9" id="p" name="p" onChange='javascript:rebuildDataFormat(document.chartform.datf, this.options[this.selectedIndex].value)'>

<option value=1>тики

периодичность котировок
периодичность котировок

<option value=2>1 мин.

<option value=3>5 мин.

<option value=4>10 мин.

<option value=5>15 мин.

<option value=6>30 мин.

<option value=7 selected>1 час

<option value=11>1 час (с 10:30)

<option value=8>1 день

<option value=9>1 неделя

<option value=10>1 месяц

</select>

</td>

</tr>

Пример запроса котировок Газпрома (январь 2010)

Следующий код получает и построчно выводит дневные котировки акций Газпрома за январь 2010 года (так как месяца на finam.ru нумеруются с нуля, в качестве номера месяца указываем 0):

qq = quotes(1, 0, 2010, 30, 0, 2010, 16842, 8)

for q in qq:

print q[:-1]

После запуска смотрим на экран:

секцию рынка, наименование акции (контракт), требуемый период и другие параметры. Сразу определимся со значениями передаваемых параметров:

дневные котировки
дневные котировки

Убедившись, что все работает как надо, для дальнейшей работы сохраняем файл с функцией как модуль "quotes.py ".

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