Используйте Binance API для потоковой передачи цен на криптовалюту в реальном времени

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

Когда я узнаю о новой теме, одно из моих любимых занятий - создавать для нее свои собственные инструменты. Самостоятельное программирование чего-либо - один из лучших способов получить твердое представление о любой теме. Поэтому я создал простой класс JavaScript для построения графиков свечей на холсте HTML.

Однако мое первое решение могло рисовать только статические диаграммы и не имело интерактивности, поэтому не было возможности использовать его для отображения данных о ценах в реальном времени. Чтобы исправить эту ситуацию, я немного поработал, добавил масштабирование и технические индикаторы и подключил его к потоку свечей WebSocket в реальном времени через Binance API.

Обновление класса свечного графика

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

Раньше он поддерживал только статические значения свечей и не имел возможности обновлять их динамически. Поэтому я добавил новую функцию updateCandlestick( candlestickID , open , close , high, low ), которая обновляет значения данной свечи.

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

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

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

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

Например, когда добавляется новая свеча, нам нужно рассчитать скользящее среднее для этой новой точки данных. Поэтому класс свечной диаграммы вызывает onAddCandlestick( candlestickChart , candlestickID ) для всех своих технических индикаторов, а в реализации этой функции MovingAverage мы можем вычислить среднее значение последних n выборок и добавить новую точку данных.

Итак, если я узнаю о новом техническом индикаторе, который хочу добавить в класс, все, что мне нужно сделать, это реализовать этот интерфейс, и это должно быть решение plug-and-play.

Потоковая передача данных в реальном времени

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

К счастью, мы также можем использовать для этого Binance API. API предоставляет конечные точки рыночных данных для любых данных, которые вы ищете. В нашем случае нас интересует конец свечи / линии kline.

Оба API, которые мы здесь используем, являются общедоступными, что означает, что вам не нужен ключ API для их использования (хотя есть ограничения для каждого IP-адреса). Вкратце, я большой поклонник Binance API. Это очень хорошо задокументировано и полно. Похоже, что можно контролировать всю свою учетную запись только через API, и я бы хотел, чтобы больше компаний сосредоточились на своих API.

Давайте посмотрим на класс CandlestickStream. Соответствующие функции - start () и onMessage(). Когда мы запускаем поток, мы сначала вызываем API статических свечей, чтобы получить последние 500 свечей для нашего символа и интервала. Когда мы их получаем, мы инициализируем свечной график этими значениями и запускаем соединение WebSocket.

Теперь каждые 2 секунды мы будем получать сообщения в реальном времени с обновлениями наших свечей. В функции обратного вызова onMessage () мы смотрим на значение временной метки полученной свечи. Если последняя свеча на нашем графике имеет такую ​​же метку времени, мы обновляем ее. Если это не так, это означает, что была запущена новая свеча, поэтому мы также добавляем новую свечу на наш график. Теперь у нас есть полностью работающий поток свечей биткойнов в реальном времени, и вы можете расслабиться и, надеюсь, наблюдать, как ваши инвестиции уходят на Луну.

использование

Использовать класс CandlestickStream очень просто. Все, что нам нужно сделать, это создать новый экземпляр класса, указать ему, какой символ и интервал мы хотим, и запустить поток:

Пример

Я добавил на свой сайт пример, показывающий цену Биткойна в евро в 5-минутных свечах: Свечи Биткойн в реальном времени.

Заключение

Я большой поклонник создания собственных пользовательских визуализаций данных, а не просто использование сторонних решений.

Поскольку Я недавно вернулся в криптовалюту, я хотел реализовать класс свечных графиков и подключить его к рыночному потоку в реальном времени.

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

Ресурсы

Вам нравится такой контент? Получите неограниченный доступ ко всем историям и поддержите меня и других писателей, присоединившись к Medium. Если вы зарегистрируетесь по этой ссылке, часть вашего членского взноса пойдет мне.