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

    Идея появилась, после того как случайно увидел подобный генератор для американской биржи 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 г.

    Комментарии 7

      0
      Не пойму, в чем польза от этого генератора?
        +1

        Польза в том, что если потребуется обращаться к API Мосбиржи и получать данные, то это уже готовый работающий пример для JavaScript и Google Apps Script.


        Документация ИИС не идеальна и некоторые моменты просто не задокументированы, а этот генератор действующий пример.

          +2
          в чем польза от этого генератора?

          Ну, во-первых, это красиво :)
            +1

            Я неистово плюсую (как автор).

          +1
          я, возможно, ошибаюсь — с информацией с Мосбиржи никогда не работал, но любые другие биржи обычно ограничивают доступность информации лицензионным соглашением. API-то может быть и свободное, но вот публикация виджета у себя на сайте — может быть лицензируемым, а то и платным, делом.
            0

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

              0

              По хорошему, для данного вопроса нужна консультация юриста.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое