Котировки акций в xml

Автоматическое получение биржевых котировок в Google Spreadsheet

Приветствую вас, начинающие (и не только) портфелеводы. В прошлый раз (https://smart-lab.ru/blog/492069.php) мы значительно облегчили себе жизнь, частично автоматизировав ввод сделок. Сегодня сделаем еще один небольшой шажок в светлое будущее, научим наш Гугл документ по расписанию забирать актуальные котировки.

Шаг этот будет немного скучный (так как придется немного попрограммировать), но, надеюсь, полезный.

Итак, приступим. Без лишних слов хочу показать Гугл документ, в котором уже реализовано обновление котировок: https://docs.google.com/spreadsheets/d/1vGj_NszrlVt-1sA225RAgkOLEkdiGBmnSa3lTpsWfzI/edit?usp=sharing

Вполне возможно, что вам этого будет достаточно. Если же остались вопросы, то коротенько опишу, что он делает и как работает.

Во-первых, в этом документ есть лист «Портфель», который содержит информацию по вашим ценным бумагам. Для примера я оставил несколько бумаг (акций и облигаций), убрав все лишнее (в том числе и форматирование).

Для обновления котировок нужно нажать большую красную кнопку, после чего скрипт запросит у вас (вы должны быть залогинены в Гугл) определенные разрешения (их нужно дать, иначе не работает) и начнет получать данные. По результаты работы выдает такое сообщение:

Как же все работает?

Сначала в скрипте (сам скрипт можно скачать по ссылке: my.pcloud.com/publink/show?code=XZG0Q17ZuC1NsO3HKY8PaD2e8cAzXR5Byz47) идет «настроечная часть», где нужно прописать правильный ID листа, УРЛы до данных и т.п.:

var sheet_id = «1vGj_NszrlVt-1sA225RAgkOLEkdiGBmnSa3lTpsWfzI»;
var googleSpreadSheet = SpreadsheetApp.openById(sheet_id);

//my tickers settigns
var rangeDefPortfolio = «A8:AC120»;
var myBadTickersGlobal = [‘TODO:’,’EXTRA’]; //no real tickers which exist in my Portfolio. I want to ignore them
var myTickersDataGlobal = <>; //Some extra data about my tickers parsed from the Portolio sheet. I need to know number of lots, types, etc.
var myTickersGlobal = collectMyTickersNew();
var limitForWarningGlobal = 4;
var warningsArr = []; //if a price changes — we’ll push info about changed ticker into this global array
var allErrors = [];

С помощью функции collectMyTickersNew() собираются данные о ваших ценных бумагах с листа «Портфель». Это нужно, чтобы сохранять информацию только по нужным активам.

Основная функция — stocksAndBondsRealTime(), именно ее нужно запускать, чтобы получить обновленные котировки. Сама она достаточно простая.
Сначала забирает XML данные по указанным в начале адресам, формирует массив в нужном формате, а потом записывает его на лист «XMLStocks».
Все легко и элегантно, в результате на листе XMLStocks появляются нужные нам данные:

Для облигаций дополнительно сохраняется информация по купону (дата и размер следующего и т.д.), экспирации, НКД.

Потом эти данные можно использовать для подсчета будущих денежных поступлений (описывал здесь: https://smart-lab.ru/blog/492305.php )

Осталось два небольших действия:

1. На листе «Портфель» в колонку «Рыночная цена» прописываем формулу, которая будет показывать актуальные данные с листа XMLStocks: VLOOKUP($A8,XMLStocks!$A$2:$P$98, 3, FALSE)

2. Добавляем в триггеры проекта регулярное выполнение функции stocksAndBondsRealTime()


Я запускаю эту функцию раз в час, чаще необходимости не вижу. Да и зачем создавать лишнюю нагрузку на сервера Гугла и Биржи?

В дополнение для каждой бумаги в портфеле я добавил две колонки «Цена алерта покупать» и «Цена алерта продавать». Они нужны для оповещения по почте, когда рыночная цена оказывается меньше или больше желаемой. Скрипт, получив все котировки, проверяет целевые цены и формирует массив на отправку. Также у меня есть оповещения (код функций я здесь не привожу, там все несложно, просто сравниваю одну цену с другой), если цена какой-то бумаги изменилась больше, чем на заданную величину (limitForWarningGlobal = 4 в моем случае). Выглядит письмо примерно так:

Сначала я думал, что это мне будет полезно, но в реальной жизни оказалось, что я все равно никаких действий не предпринимаю, даже если цена поменялась на эти 4-5 процента. Разве что может быть полезно узнать, что облигации ваши сильно просели. Если у эмитента начались какие-то проблемы, то облигации падают не так быстро, как акции. Можно успеть слить их процентов по 90 от номинала, а не дожидаться падения до 30% и ниже (как у меня было с Татфондбанком)

Источник

Обзор бесплатных источников котировок фондового рынка

Здравствуйте. Я работаю программистом, и у меня есть хобби — изучение фондового рынка. Фондовый рынок с точки зрения программиста — набор данных, которые надо сперва получить, а потом проанализировать. В этой статье я расскажу о первой части квеста — как данные получить. Статья не претендует на полноту исследования, а лишь описывает мой субъективный опыт, полученный за последние пару лет.

Условия задачи: меня интересуют акции американских компаний на дневном таймфрейме, чтобы каждое утро мой робот присылал мне на почту автоматический отчёт о вчерашней динамике рынка. Если будут и другие рынки с другими таймфреймами — хорошо. Платить деньги за данные мне пока не хочется.

Отдельно замечу, что я никаким образом не аффилирован ни с одной из организаций, упомянаемых в статье. Я просто ищу пути решения своих задач, и делюсь опытом.

Как получить данные котировок бесплатно? Мне известны следующие возможности:

Открытое REST API

Alphavantage. Регистрация простейшая — вводим свой email, сразу получаем ключ. Никаких проверок нет, можно подряд ввести 20 разных адресов и получить 20 валидных ключей. Однако есть лимит на обращения по API: не более 5 в минуту, не более 500 в сутки. При этом простой трюк с подстановкой разных ключей на одном IP (исчерпали лимит, поменяли ключ) работает не всегда. Таймфреймы здесь отдаются от 1 минуты до 1 месяца, но воспользоваться этим для ежедневных обновлений большого количества тикеров не получится (из-за ограничений на количество запросов). Зато я использую этот сервис для получения дополнительной информации по тикерам (описание компаний здесь довольно подробное).

Читайте также:  Кокошник что это такое кратко

Twelvedata. Последний раз вызывал их API несколько месяцев назад, с тех пор у них сильно изменился дизайн страниц, и, возможно, вместе с дизайном функционал. После того, как увидел, что на некоторых тикерах свечки отдаются с дублями (несколько одинаковых свечек в массиве), отказался от их использования. Получить ключ раньше было также просто, как и у Alphavantage (и можно было в цикле менять ключи, исчерпав лимит обращений), а теперь требуется регистрация.

Ещё есть Finnhub, уже не помню, почему отказался от его использования на ранних стадиях изучения вопроса. Что-то там было не то.

REST API брокера

Tinkoff. Я являюсь клиентом этого банка уже много лет, поэтому совершенно естественно было воспользоваться их API. Документация вполне человеческая, доступна песочница с любым балансом по любым активам, и моментальным исполнением сделок по любой цене. Инструменты такие же, как
в Тинькофф инвестициях. Таймфреймы от 1 минуты до месяца, в описании инструментов отдаётся и ISIN, и FIGI (что очень удобно). Сейчас использую именно этот API для своей аналитики. Из неприятного — API отдаёт некоторые давно неторгуемые тикеры, приходится их вычищать вручную (вот на эту тему issue на гитхабе). К тому же история свечек по любому инструменту — не более 1 года (если хочется построить график MSFT за последние 10 лет — не получится). Встречаются и другие шероховатости, но команда разработчиков доступна к прямому диалогу (что приятно).

API торгового терминала

Торговые терминалы я делю на три части — Metatrader, cTrader, и кастомные (тот же Exante, или весьма любопытный Galt and Taggart от Банка Грузии — интересующимся рекомендую изучить). Возиться с кастомными терминалами смысла я не вижу (из-за немасштабируемости получаемого технического решения), поэтому рассмотрим лишь Metatrader и cTrader.

Metatrader 5 — самый популярный терминал для контрактов CFD на Forex, но контракты CFD бывают и на акции, и нефть, и криптовалюты. У терминала есть свой язык программирования MQL5 (фактически это усеченный диалект C++). MQL5 предоставляет множество различных функций, в том числе можно перебирать все имеющиеся у конкретного брокера символы, и загружать по ним котировки, сохраняя их в базу данных (или CSV). То есть тут всё зависит от брокера — какие у него будут тикеры, отдаёт ли он на демо-счёте котировки в реальном времени или с задержкой, и т.д. Ещё есть Metatrader4, там язык MQL4, по факту C.

cTrader. Этот терминал мне нравится больше всех других удобством интерфейса, но он сравнительно молодой, его используют не так много брокеров, а найти брокера с CFD на акции в cTrader — задача не из лёгких. Но документация к нему тоже есть, язык программирования — C#, на форуме техподдержки отвечают обычно в течение дня. Правда на большинство моих вопросов ответ один — такая возможность в cTrader пока не реализована.

Экзотические варианты

В эту категорию попадает, например, Tradingview. Это мой любимый сервис в финансовой сфере, там есть решительно всё, что мне нужно, под одной крышей. Но у него совсем нет API. Если бы было возможно получать данные из этого сервиса прямым и понятным способом, я бы точно больше ничего не рассматривал. Но прямого способа нет. Экзотические варианты тут могут быть такие (в теории):

Буду признателен за обсуждение материала. Если кто-то знает неизвестные мне ходы в получении интересующих данных — милости прошу в комментарии!

Источник

Программный сбор данных о котировках

Заголовок обязывает перейти непосредственно к программному коду… Но, думаю, все же необходима вводная часть. А зачем, собственно, это нужно?

Эффективные действия на бирже связаны с тщательным анализом происходящего на рынке. Что кроется за динамикой цифр, котировок?

Отсутствие такого анализа, либо сумбурное принятие решений по сделке может привести к потерям. Мне не раз приходилось наблюдать за тем, как люди принимали решения — правильные… или не правильные — в дилинговом зале брокерской конторы.

Дилинговые залы брокерских контор… там существует своя, особая атмосфера. Атмосфера общения, обмена опытом, эмоциями. Мне нравятся дилинговые залы. По тому как человек входит в сделку, трейдеров можно разделить на две группы. Я буду говорить о тех, чей результат, как правило, печален. И таких трейдеров — большинство. Итак — описываю процесс входа в рынок трейдера соответствующей группы. В дилинговый зал вбегает мужчина лет 20-60 выкрикивает: «Куда идем?! Вверх?! Вниз?!» Со стороны встречающих слышаться неоднозначные выкрики «Вверх! Вниз!» Новоприбывший присоединяется к наиболее громко крикнувшей группе и… делает ТЫЦ. ТЫЦ по кнопке покупки или продажи. Все. Теперь человек в рынке. С этого момента он рискует своими деньгами. С этого момента трейдер не похож на трейдера. Он похож на болельщика. Вувузела в руках такого трейдера, думаю, была бы уместным инструментом торговли.

И теперь он уже в составе группы переживает, и со стоном воспринимает все движения рынка. А на новостях получает такой всплеск адреналина, который парням, карабкающимся по склонам горных хребтов, может только сниться.

Читайте также:  Новое зрение могилев акции

Результат таких сделок вполне предсказуем. Но… есть ли более счастливый исход? Конечно. И связан он с анализом данных котировок. Как получить эти данные? Как получить эти данные в больших объемах? Как здорово, что есть такая замечательная компания «ФИНАМ» и их интернет-ресурс finam.ru! Сервера «ФИНАМ» предоставляют замечательную возможность — скачивать котировки, например вот по такой форме (например):

Однако, таким образом предоставляется возможность скачать лишь один файл за одну загрузку. А что если мы хотим получить больше данных для анализа? Гораздо больше? Практически по всем инструментам! По всем периодам! Это даст богатейшие возможности для анализа данных. Оу… возможно ли такое? Ответ: да возможно.

Пока же определимся с перечнем бумаг (инструментов), а также с основными принципиальными моментами, которые позволят нам получить данные о котировках. Перечень бумаг (инструментов) которые предоставляться компанией «ФИНАМ» будем брать отсюда:

Эта страница интересна для нас тем, что на ней есть, во-первых, большая часть инструментов которые дает «ФИНАМ»; во-вторых, веб-ссылки, по которым можно перейти непосредственно на страницу каждой ценной бумаги (инструмента).

Ссылки имеют следующий вид:

Пропарсив соответствующую станицу получим файл ссылок. Теперь мы знаем где «живут» инструменты. Файл можете скачать по этой ссылке. Зачем нам место жительства каждого инструмента? Этот параметр нам еще пригодится. Запаситесь терпением. Пока имеем ссылки по 6131 бумаге (инструменту).

Что требует сервер «ФИНАМ»? Какие параметры для получения данных? Давайте попробуем получить один файл, и посмотрим параметры запроса. Скачивая котировки компании Polymetal, имею вот такой GET запрос:

__http://export.finam.ru/POLY_170620_170623.txt?market=1&em=175924&code=POLY&apply=0&df=20&mf=5&yf=2017&from=20.06.2017&dt=23&
mt=5&yt=2017&to=23.06.2017&p=8&f=POLY_170620_170623&e=.txt&cn=POLY&dtf=1&tmf=1&
MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1

Среди всего перечня хотелось бы акцентировать внимание на параметрах em, market, code. Параметр em следует понимать как индекс, своеобразную метку бумаги (инструмента). Если мы хотим скачивать не один инструмент, а массив данных по нескольким бумагам (инструментам) мы должны знать em каждого из них. Переменная market говорит о том, где вращается данная бумага (инструмент) – на каком рынке? Маркетов много: МосБиржа топ***, МосБиржа пифы***, МосБиржа облигации***, Расписки и т.д. Параметр code – это символьная переменная по инструменту.

Итак, для получения файла котировок нам нужно добыть эти три параметра: em и market и code. По всем бумагам (инструментам). Вопрос — где их взять? Ответ: вспоминаем о файле со ссылками. В файле есть, например, такая ссылка:

Зайдем на нее и в исходном коде страницы увидим то, что нам нужно — в элементах javascript сидят наши искомые параметры, которые относятся к данной бумаге (инструменту):

Заметим, что в данном кусочке кода id — это и есть em; имеется параметр code, а также параметры маркета – id и его русскоязычное название. Данный кусок кода с вариациями присутствует у каждого бумаги (инструмента). Сходим, например, на:

и увидим все то же самое. Теперь, думаю, общая цепочка получения данных понятна: в цикле перебираем ссылки, где живут отдельные бумаги (инструменты). Парсим кусочки javascript, собирая параметры em, market и code для каждой позиции. Имея на руках эти данные, можем программно заходить на сервер «ФИНАМ» и получать файлы котировок. Осталось дело за техникой исполнения.

Чем будем парсить? Парсить будем, используя Java. И… из всех велосипедов я выбираю тот, который стоит у меня в гараже. А именно Jsoup. Хотя можно было бы использовать и htmlunit.

Небольшое уточнение. При парсинге страницы мною были получены также данные – русскоязычное название бумаги (1) и раздел, в который «ФИНАМ» определили данную бумагу (инструмент) (2). Таким образом, на входе парсера имеется три файла. Напомню, имеем 6131 позиций — бумаг (инструментов). Всю эту информацию, а также результаты парсинга объединим в один файл. Код парсера можно скачать по этой ссылке.

В результате выполнения имеем файл function_parameters.csv. Каждая строка файла при построчном считывании может использоваться как перечень параметров для функции обращения к серверу «ФИНАМ» за котировками. Файл function_parameters.csv можно скачать по этой ссылке.

Для того чтобы написать функцию обращения к серверу «ФИНАМ» (а писать мы будем ее на Python), еще раз рассмотрим параметры GET запроса:

__http://export.finam.ru/POLY_170620_170623.txt?market=1&em=175924&code=POLY&apply=0&df=20&mf=5&yf=2017&from=20.06.2017&dt=23&
mt=5&yt=2017&to=23.06.2017&p=8&f=POLY_170620_170623&e=.txt&cn=POLY&dtf=1&tmf=1&
MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1

POLY_170620_170623 – очевидно, что данная строка представляет параметр code, а также временные характеристики.

.txt – расширение файла; расширение упоминается в параметре e; при написании функции следует помнить об этом нюансе.

Примем также во внимание содержимое исходного кода страницы типа www.finam.ru/profile/moex-akcii/gazprom/export внутри тэга form (где name=«exportdata»). Характеризуем показатели.

После того, как определен перечень параметров, а также установлены источники получаемых данных, пишем вот такую функцию получения котировок. На примере одной бумаги – полюбившегося Polymetal.

Код функции можно скачать также по этой ссылке.

Что дальше? Теперь возможно использовать данную функцию в цикле по имеющимся у нас позициям. Всего имеем, напомню, 6131 позицию. Из файла function_parameters.csv подгружаем параметры, указываем дату, выбираем нужный формат. И, используя данный код, не забудьте о правилах хорошего тона – поставьте задержку в пару секунд в итерацию цикла, дабы не перегружать сервер-источник.

Данных для анализа рынка, думаю, у вас будет предостаточно. Искренне надеюсь, что клиентов у компании «ФИНАМ» после написания данной статьи только прибавится!

Источник

Получение котировок и других параметров нашего рынка в google spreadsheets

Для смартлабовца иногда важно вести какие-либо вычисления по бумагам в режиме лайв.
Да, есть DDE в Квике, но у меня например нет такой возможности на работе. А в гуглспредшитс можно заглянуть прямо с телефона. Гораздо мобильнее получается.

Читайте также:  снять квартиру в правдинске калининградская область

Про функцию GOOGLEFINANCE слышали многие, там можно например получить курсы валют или какие-то основные акции. Но например цены и прочие параметры облигаций там не получить.

Итак, у нас есть открытые данные Мосбиржи в виде древовидной структуры, которые лежат по адресу https://iss.moex.com/iss/engines/

Если тыркнуть по ссылке, увидим список основных площадок.

Как с этим работать

Допустим, нам нужны котировки какой-нибудь ОФЗ, например 26222.
Облигации — это у нас фондовый рынок или stock
Открываем ссылку https://iss.moex.com/iss/engines/stock/markets/ там мы увидим все субрынки фондового рынка. Нам нужны bonds
Идем по адресу https://iss.moex.com/iss/engines/stock/markets/bonds, видим список площадок с различными режимами
ОФЗ у нас соответствуют режиму «Т+: Облигации — безадрес.» или TQOB
Чтобы посмотрет все данные об облигациях https://iss.moex.com/iss/engines/stock/markets/bonds/boards/tqob/securities.xml
Вот отсюда мы и будем дергать данные с помощью функции с помощью функции IMPORTXML, которая позволяет искать по этому xml-документу с помощью языка XPath

Вот способы получить некоторые поля

Надеюсь схема понятна.
Можно например вывести все цены

Источник

Как я слежу за акциями в гугл-таблице: три простых способа

Я использую гугл-таблицы для портфеля инвестиций, потому что с ними проще вести учет.

Упрощение связано с тем, что можно в автоматическом режиме получать данные о текущих ценах и других параметрах активов, которые публикуются открыто.

Для этого я комбинирую три бесплатных сервиса, которые подтягивают данные с разных бирж с помощью API. В статье расскажу, как настроить их под свои нужды.

Что за АПИ

В большинстве случаев данные с бирж передаются через программный интерфейс, называемый API — application programming interface. Грубо говоря, это инструмент, благодаря которому одна программа начинает говорить на одном языке с другой. В нашем случае мы используем API финансовых бирж для «дружбы» с гугл-таблицами.

API Московской биржи

Для чего. Получить информацию о российских акциях и облигациях.

Как это работает. У Московской биржи есть API, который позволяет видеть любую информацию с российской биржи внутри гугл-таблиц. Например, можно получать имена инструментов, цены закрытий, даты оферт и другие параметры.

Работа этой функции полностью зависит от сервера Московской биржи. Если биржа поменяет формат выдачи, организует какие-то другие режимы торгов или изменит что-то в существующей системе, то для корректной работы формул потребуется их доработка.

Еще таблица пригодится, если вас не устраивают существующие сервисы учета — Intelinvest и Investing.com.

В таблице-примере к этой статье я привел несколько полезных параметров ценных бумаг. Вот что она умеет:

Список далеко не полный, ведь на Мосбирже огромное количество параметров, включая срочный рынок и валюты.

Я везде старался использовать формулы в понятной записи с разбивкой на несколько строк — чтобы каждый смог воспроизвести эту конструкцию в своей таблице.

Googlefinance внутри гугл-таблиц

Для чего. Получить информацию об американских акциях, которые торгуются на Санкт-Петербургской бирже.

Как это работает. Googlefinance — это встроенная функция гугл-таблиц. Она помогает получить текущие или архивные данные о ценных бумагах из сервиса «Гугл-финансы».

Российские акции в сервисе тоже есть. Чтобы их увидеть, надо указывать тикер — то есть код из нескольких букв, который принадлежит определенному финансовому инструменту, — с приставкой «MCX:» так, чтобы получилось «MCX:SBER».

Эта функция позволяет получать название, текущую цену акций и еще 18 параметров — например, максимальную и минимальную цену за 52 недели, количество акций в обращении. Все это есть в моем шаблоне.

Главное преимущество в том, что формулы для получения этих параметров предельно просты: например, имя бумаги — name, самая высокая цена на текущий день — high. Описание всех формул и атрибутов есть в инструкции от Гугла.

В первом столбце я оставил идентификаторы двух акций — Сбербанка (MCX;SBER) и «Нетфликс» (NFLX) — и фонда Van Eck (RSX). При изменении тикеров во втором столбце будет подтягиваться название акций и актуальные цены.

А чтобы получить подробную информацию об акции или фонде, используйте ячейки В13 и В35: в них нужно занести тикер и в таблицах ниже сразу же обновится информация.

Например, вы хотите отслеживать акции американского производителя сетевого оборудования Ubiquiti Inc (UI) и высокодивидендного фонда Highland Small-Cap Equity Y (HSZYX). В ячейку В13 заносите тикер акции UI, а в ячейку В35 — тикер фонда HSZYX. Получите 19 параметров каждой бумаги.

Смотрите, как это работает:

«Яху-финанс»

Для чего. Отслеживать любые финансовые данные со всего мира.

Я остановился на втором варианте — получение данных через формулу IMPORTHTML. Важно: эта формула подтягивает данные только из таблиц или списков, другую информацию через нее не получить.

Формула работает так: сервис Гугла обращается по адресу страницы, указанному в формуле, и ищет все таблицы, которые обозначены в разметке этой страницы. Таблиц может быть несколько, но у каждой свой порядковый номер. Поэтому в формуле нужно указать конкретный номер таблицы — данные из нее и появятся в гугл-таблице.

Моя формула обращается к тикеру, который нужно прописать самостоятельно, и ищет данные по этой акции на «Яху». К написанию некоторых тикеров есть требования:

Источник

Развивающий портал