Сергей Ветко
Сергей Ветко личный блог
12 сентября 2018, 12:35

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

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

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

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

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

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

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

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

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

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

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

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

var micex_xml_stocks_url = «www.micex.ru/issrpc/marketdata/stock/shares/daily/download/micex_stock_shares.xml?collection_id=3&board_group_id=57&start=0&limit=10000&lang=ru»;

//OFZ bonds
var micex_bonds_url_ofz = «www.micex.ru/issrpc/marketdata/stock/bonds/daily/download/micex_stock_bonds.xml?collection_id=7&board_group_id=58&start=0&limit=1000&lang=ru»;

//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 появляются нужные нам данные:

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

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

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

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

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

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

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

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

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

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

 

 

 

58 Комментариев
  • Гденьги ☭
    12 сентября 2018, 12:58
    Можно пойти дальше и использовать https://datastudio.google.com/gallery


  • Grigoriy Romanenkov
    12 сентября 2018, 13:02
    =importxml? не, не слышали
    =googlefinance? не, не слышали
    имхо, если можно формулами, то скрипты избыточны
  • Иван Симпл
    12 сентября 2018, 18:47
    Интересно! Искал что то похожее когда себе портфель в гугл таблицах создавал. 
    В итоге нашел

    =GOOGLEFINANCE($A2,«price»)
    Где А2 префикс биржи и тикер

    И

    =GOOGLEFINANCE($A2,«changepct»)
    Изменение процентное цены

    Этих двух значений вполне хватает для портфеля акций на американском рынке и российском
    Обновление происходит автоматически (не знаю точный интервал, но около 1 минуты) 

  • АлексейЧ.
    21 сентября 2018, 08:26
    технический вопрос

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

    Открывал готовый файл https://docs.google.com/spreadsheets/d/1vGj_NszrlVt-1sA225RAgkOLEkdiGBmnSa3lTpsWfzI/edit?usp=sharing

    Просьба напишите как запустить 
    поиском пользовался
    остался бубен и форум SL))
    Спасибо!

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

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