Идея появилась, после того как случайно увидел подобный генератор для американской биржи NASDAQ, где автор bash скриптом скачивает с FTP сервера сводный список американских бумаг и трансформирует его в JSON, состоящий из одних тикеров, а затем при помощи фреймворка bootstrap и чистого JavaScript выводит на экран рандомный биржевой тикер, одновременно давая ссылку на популярный ресурс Yahoo! Finance.


«Магия» платформы CodePen для Московской биржи

Код был адаптирован для российских реалий и помимо получения списка бумаг с Мосбиржи был сделан расчет доходности за последние n лет.

Дополнительный сервер не потребовался, потому что API Мосбиржи может делать выдачу сразу в формате JSON.

Что нужно для работы генератора случайных акций?


  1. Брать информацию с биржи о существующих «идентификаторах режима торгов» (boardid) Мосбиржи.

    //информация о торгуемых акциях на Московской бирже
    url = 'https://iss.moex.com/iss/engines/stock/markets/shares/boards/'
  2. Брать полный список бумаг для некоторых boardid на Мосбирже.

    boardid = 'TQBR' //идентификатор режима торгов
    url = 'https://iss.moex.com/iss/engines/stock/markets/shares/boards/'+ boardid +'/securities.json?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME'
  3. Сверяться со сводной статистикой бумаг на Московской бирже.
  4. Узнавать текущую цену для конкретной ценной бумаги.

    boardid = 'TQBR' //идентификатор режима торгов
    url = 'http://iss.moex.com/iss/engines/stock/markets/shares/boards/'+ boardid +'/securities.json?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVADMITTEDQUOTE'
  5. Получать цену n лет назад на конкретную дату. Для этого в API Мосбиржи передаём boardid, SECID и дату, например:
    — boardid = TQBR
    — SECID = SBER
    — date = 2015-01-10
    .

    boardid = 'TQBR' // идентификатор режима торгов
    SECID = 'SBER' // тикер
    date = '2015-01-10' // дата
    url = 'http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/'+ boardid +'/securities/'+ SECID +'.json?iss.meta=off&iss.only=history&history.columns=SECID,TRADEDATE,CLOSE&limit=1&from=' + date
  6. Сравнивать вчерашнюю цену актива и цену 5 лет назад, чтобы узнать доходность.

    curStock = 'AFKS'
    dateNow = '2020-03-06'
    datePre = '2015-03-06'
    fetch(getCost(curStock, datePre)).then(result => {
        return (result.json())
    }).then(res => {
        let costPre = res.history.data[0][2];
        return (costPre)
    }).then(costPre => {
        fetch(getCost(curStock, dateNow)).then(result => {
            return (result.json())
        }).then(res => {
            let costNow = res.history.data[0][2];
            console.log(costPre);
            console.log(costNow);
            console.log(parseInt((costNow * 100) / costPre, 10) - 100)
        })
    })
    
    function getCost(id, date) {
        let url = `http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/${id}.json?iss.meta=off&iss.only=history&history.columns=SECID,TRADEDATE,CLOSE&limit=1&from=${date}`
        return url;
    }

К коду не предъявлялось больших требований, важно было то, что он работает и выполняет свою задачу.


Гифка с демонстрацией работы генератора рандомных акций Мосбиржи на JavaScript

Почему-то API Мосбиржи выдает исторические данные только начиная с июня 2014 года, то есть не удается получить более ранние данные через запрос.

Полный код на GitHub и CodePen.

Итог


Генератор случайных акций с Московской биржи работает и выдает не только случайные бумаги, но и считает доходность за настраиваемый интервал времени.

Также хочу отметить, что никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах.

Автор: Михаил Шардин.
Код: Александр Палачёв.

3 апреля 2020 г.