Как получать SMS при колебаниях курса биткоина с ByBit API и SMS API

от автора

Мониторинг волатильности таких криптовалют, как Bitcoin, позволяет быстро реагировать на изменения рынка, управлять рисками и улучшать стратегии. Понимание текущих ценовых колебаний помогает устанавливать правильные уровни стоп-лосс и тейк-профит. В этой статье вы узнаете, как интегрировать ByBit и платформу МТС Exolve для получения автоматических SMS о колебаниях курса Bitcoin.

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

Виды колебаний

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

Диапазон изменения цены (Price Range)

Измерение максимальной и минимальной цены за определённый период (час, день). Например, BTC торгуется в диапазоне от 30 000 $ до 32 000 $ за последние сутки.

Сделаем запрос последнего моментального снимка цены, лучшей цены спроса/предложения и объёма торгов за последние 24 часа на api /v5/market/tickers.

Создайте файл priceRangeChecker.js и добавьте в него этот код:

const axios = require('axios'); // Импортирует библиотеку axios для выполнения HTTP-запросов   const baseUrl = 'https://api.bybit.com'; // Базовый URL для API Bybit   // Асинхронная функция для получения диапазона цен для заданного символа async function getPriceRange(symbol) {     try {         // Выполняет GET-запрос к API Bybit для получения данных тикера         const response = await axios.get(`${baseUrl}/v5/market/tickers`, {             params: {                 category: 'spot', // Указывает категорию: 'spot', 'linear' или 'inverse'                 symbol: symbol,   // Указывает символ для получения данных (например, BTCUSDT)             }         });           // Проверяет, что результат существует и не пустой         if (response.data.result && response.data.result.list && response.data.result.list.length > 0) {             const data = response.data.result.list[0]; // Извлекает данные тикера             console.log('Ticker data:', data); // Выводит данные тикера в консоль             console.log(`Диапазон цен для ${symbol}: Мин ${data.lowPrice24h}, Макс ${data.highPrice24h}`); // Выводит диапазон цен за последние 24 часа             return { min: data.lowPrice24h, max: data.highPrice24h }; // Возвращает диапазон цен         } else {             console.error('Для данного символа нет данных.'); // Выводит ошибку, если данных нет             return null; // Возвращает null, если данных нет         }     } catch (error) {         console.error('Ошибка при получении диапазона цен:', error); // Выводит ошибку, если запрос не удался     } }   getPriceRange('BTCUSDT'); // Вызывает функцию для получения диапазона цен для BTCUSDT

Запустите код через терминал:

node priceRangeChecker.js

Результат выполнения кода:

Ticker data: {   symbol: 'BTCUSDT',   bid1Price: '64558.89',   bid1Size: '0.169536',   ask1Price: '64558.9',   ask1Size: '0.813043',   lastPrice: '64558.89',   prevPrice24h: '64974.89',   price24hPcnt: '-0.0064',   highPrice24h: '66129.54',   lowPrice24h: '63846.77',   turnover24h: '1098237112.69553235',   volume24h: '16884.918801',   usdIndexPrice: '64568.456975' } Диапазон цен для BTCUSDT: Мин 63846.77, Макс 66129.54

Что делает код:

  1. Импортирует библиотеку axios для выполнения HTTP-запросов.

  2. Определяет базовый URL для API ByBit.

  3. Определяет асинхронную функцию getPriceRange для получения диапазона цен для заданного символа.

  4. Внутри функции:

  • Выполняет GET-запрос к API ByBit для получения данных тикера.

  • Проверяет, что ответ API содержит необходимые данные.

  • Извлекает и выводит данные тикера, включая диапазон цен за последние 24 часа.

  • Возвращает диапазон цен или null, если данных нет.

  • Обрабатывает ошибки и выводит их в консоль.

И в последнюю очередь вызывает функцию getPriceRange для символа BTCUSDT.

Среднее истинное отклонение (Average True Range, ATR)

Показатель волатильности рынка, учитывающий максимумы и минимумы цен, а также ценовые разрывы. Например, ATR за 14 дней составляет 500 $, что указывает на текущий уровень волатильности.

Запрос исторических линий, известных как свечи, можно сделать по адресу /v5/market/tickers. Графики возвращаются в группах, основанных на запрошенном интервале.

Создайте новый файл atrCalculator.js и добавьте туда этот код:

const axios = require('axios'); // Импортирует библиотеку axios для выполнения HTTP-запросов   const baseUrl = 'https://api.bybit.com'; // Базовый URL для API Bybit const symbol = 'BTCUSDT'; // Символ для отслеживания   // Асинхронная функция для получения ATR (Average True Range) async function getATR(symbol, interval = 'D', limit = 14) {     try {         // Выполняет GET-запрос к API Bybit для получения данных Kline         const response = await axios.get(`${baseUrl}/v5/market/kline`, {             params: {                 category: 'spot', // Указывает категорию: 'spot', 'linear' или 'inverse'                 symbol: symbol,   // Указывает символ для получения данных (например, BTCUSDT)                 interval: interval, // Интервал времени для каждого Kline (например, 'D' для дневного)                 limit: limit + 1 // +1 чтобы включить предыдущее закрытие             }         });         console.log('ответ API:', response.data); // Выводит ответ API в консоль           // Проверяет, что результат существует и не пустой         if (response.data.result && response.data.result.list && response.data.result.list.length > 0) {             const data = response.data.result.list; // Извлекает данные Kline             console.log('Данные Kline:', data); // Выводит данные Kline в консоль               let atr = 0; // Инициализирует переменную для ATR             // Цикл для расчета истинного диапазона (TR) и суммирования для ATR             for (let i = 1; i < data.length; i++) {                 const high = parseFloat(data[i][3]); // Максимальная цена                 const low = parseFloat(data[i][4]); // Минимальная цена                 const prevClose = parseFloat(data[i - 1][2]); // Цена закрытия предыдущего Kline                 // Рассчитывает истинный диапазон (TR)                 const tr = Math.max(high - low, Math.abs(high - prevClose), Math.abs(low - prevClose));                 atr += tr; // Добавляет TR к общей сумме ATR             }             atr /= limit; // Делит общую сумму TR на количество периодов для получения среднего истинного диапазона (ATR)             console.log(`ATR для ${symbol} за ${limit} периодов: ${atr}`); // Выводит ATR в консоль             return atr; // Возвращает рассчитанный ATR         } else {             console.error('Для данного символа нет данных.'); // Выводит ошибку, если данных нет             return null; // Возвращает null, если данных нет         }     } catch (error) {         console.error('Ошибка при получении ATR:', error); // Выводит ошибку, если запрос не удался     } }   getATR(symbol); // Вызывает функцию для вычисления ATR для BTCUSDT

Результат выполнения кода:

Данные Kline: [   [     '1721174400000',     '65047',     '66129.54',     '63846.77',     '64575.06',     '14783.664268',     '962153074.25098363'   ],   [     '1721088000000',     '64721.37',     '65399.96',     '62382.93',     '65047',     '20752.661083',     '1329816905.57084192'   ],   [     '1721001600000',     '60791.33',     '64912.45',     '60649.91',     '64721.37',     '20967.809277',     '1320917551.34519924'   ],   [     '1720915200000',     '59204.58',     '61433.24',     '59193.96',     '60791.33',     '12725.297318',     '764045293.26194184'   ],   [     '1720828800000',     '57891.49',     '59858',     '57750',     '59204.58',     '10465.033445',     '612558728.3136714'   ],   [     '1720742400000',     '57343.88',     '58536.45',     '56538.8',     '57891.49',     '14623.710134',     '840594481.35922771'   ],   [     '1720656000000',     '57733.33',     '59559.73',     '57049.96',     '57343.88',     '15993.704904',     '928676592.96136043'   ],   [     '1720569600000',     '58048.52',     '59482',     '57149.27',     '57733.33',     '16643.830341',     '968048405.30245373'   ],   [     '1720483200000',     '56711.66',     '58312',     '56291.83',     '58048.52',     '13123.359683',     '753640656.19683971'   ],   [     '1720396800000',     '55864.83',     '58220',     '54277.81',     '56711.66',     '17367.690054',     '977413163.04653669'   ],   [     '1720310400000',     '58239.99',     '58445.8',     '55718.61',     '55864.83',     '10727.975865',     '614742797.29615926'   ],   [     '1720224000000',     '56631.52',     '58485.47',     '56018.21',     '58239.99',     '9940.385056',     '567901563.72474508'   ],   [     '1720137600000',     '57056.28',     '57555',     '53345.94',     '56631.52',     '23088.571336',     '1282878717.21570821'   ],   [     '1720051200000',     '60211.1',     '60503.22',     '56752.13',     '57056.28',     '25290.405451',     '1470777653.45158958'   ],   [     '1719964800000',     '62131.02',     '62286.36',     '59387.59',     '60211.1',     '19925.700455',     '1206263679.84045165'   ] ] ATR для BTCUSDT за 14 периодов: 3166.1364285714285

Асинхронная функция getATR делает следующее:

  • Принимает параметры symbol, interval (по умолчанию ‘D’ для дневного интервала) и limit (по умолчанию 14 периодов).

  • Выполняет GET-запрос к API ByBit для получения данных Kline.

  • Проверяет, что ответ API содержит необходимые данные.

  • Извлекает данные Kline и выводит их в консоль.

  • Инициализирует переменную atr для хранения суммы истинных диапазонов (TR).

  • Использует цикл для расчёта TR для каждого периода и суммирует их.

  • Делит общую сумму TR на количество периодов для получения среднего истинного диапазона (ATR).

  • Выводит рассчитанный ATR в консоль и возвращает его.

  • Обрабатывает ошибки и выводит их в консоль.

Стандартное отклонение (Standard Deviation)

Измерение разброса цен вокруг среднего значения за определённый период.

Например, стандартное отклонение цен BTC за последние 30 дней составляет 1500 $.

Для расчёта стандартного отклонения цен за конкретный период с использованием эндпоинта Bybit API GET /v5/market/mark-price-kline нужно сделать запрос к этому эндпоинту, получить данные и использовать их.

Создайте файл standardDeviationCalculator.js с этим кодом:

const axios = require('axios'); // Импортирует библиотеку axios для выполнения HTTP-запросов   const baseUrl = 'https://api.bybit.com'; // Базовый URL для API Bybit const symbol = 'BTCUSDT'; // Символ для отслеживания   // Асинхронная функция для получения стандартного отклонения (Standard Deviation) async function getStandardDeviation(symbol, interval = 'D', limit = 30) {     try {         // Выполняет GET-запрос к API Bybit для получения данных Mark Price Kline         const response = await axios.get(`${baseUrl}/v5/market/mark-price-kline`, {             params: {                 symbol: symbol, // Указывает символ для получения данных (например, BTCUSDT)                 interval: interval, // Интервал времени для каждого Kline (например, 'D' для дневного)                 limit: limit // Количество периодов для расчета стандартного отклонения             }         });         console.log('ответ API:', response.data); // Выводит ответ API в консоль           // Проверяет, что результат существует и не пустой         if (response.data.result && response.data.result.list && response.data.result.list.length > 0) {             const data = response.data.result.list; // Извлекает данные Mark Price Kline             console.log('Данные Kline:', data); // Выводит данные Kline в консоль               // Извлекает цены закрытия (close prices) из данных             const prices = data.map(item => parseFloat(item[2])); // Закрытие цены (close price)             // Вычисляет среднее значение цен (mean)             const mean = prices.reduce((acc, price) => acc + price, 0) / prices.length;             // Вычисляет дисперсию (variance)             const variance = prices.reduce((acc, price) => acc + Math.pow(price - mean, 2), 0) / prices.length;             // Вычисляет стандартное отклонение (standard deviation)             const standardDeviation = Math.sqrt(variance);               console.log(`Стандартное отклонение для ${symbol} за ${limit} периодов: ${standardDeviation}`); // Выводит стандартное отклонение в консоль             return standardDeviation; // Возвращает рассчитанное стандартное отклонение         } else {             console.error('Для данного символа нет данных.'); // Выводит ошибку, если данных нет             return null; // Возвращает null, если данных нет         }     } catch (error) {         console.error('Ошибка при получении стандартного отклонения:', error); // Выводит ошибку, если запрос не удался     } }   getStandardDeviation(symbol); // Вызывает функцию для вычисления стандартного отклонения для BTCUSDT

Результат выполнения кода:

Данные Kline: [   [ '1721174400000', '65014.39', '66097.8', '63828.96', '64524.8' ],   [ '1721088000000', '64713.1', '65346.71', '62369.06', '65014.39' ],   [ '1721001600000', '60755.8', '64888.6', '60609.6', '64713.1' ],   [ '1720915200000', '59187.7', '61387.1', '59181.33', '60755.8' ],   [ '1720828800000', '57861.78', '59848.4', '57718.57', '59187.7' ],   [ '1720742400000', '57315.22', '58505.5', '56518', '57861.78' ],   [ '1720656000000', '57713.94', '59470', '57036.1', '57315.22' ],   [ '1720569600000', '58027.03', '59431.7', '57148.3', '57713.94' ],   [ '1720483200000', '56696.6', '58271', '56275.94', '58027.03' ],   [ '1720396800000', '55840', '58197.91', '54265.4', '56696.6' ],   [ '1720310400000', '58204.1', '58412.16', '55710', '55840' ],   [ '1720224000000', '56602.8', '58442.3', '56002.38', '58204.1' ],   [ '1720137600000', '57034', '57518.1', '53504.3', '56602.8' ],   [ '1720051200000', '60184.9', '60465.18', '56733.81', '57034' ],   [ '1719964800000', '62092.6', '62250', '59390.9', '60184.9' ],   [ '1719878400000', '62861.89', '63258.4', '61787.8', '62092.6' ],   [ '1719792000000', '62749.6', '63842.3', '62488.45', '62861.89' ],   [ '1719705600000', '60943.32', '63035.1', '60674.17', '62749.6' ],   [ '1719619200000', '60407.56', '61196.7', '60378.1', '60943.32' ],   [ '1719532800000', '61659.5', '62207.8', '60029.9', '60407.56' ],   [ '1719446400000', '60838.5', '62380', '60585.79', '61659.5' ],   [ '1719360000000', '61764.4', '62454.1', '60672.96', '60838.5' ],   [ '1719273600000', '60260.35', '62373.3', '60221.36', '61764.4' ],   [ '1719187200000', '63179.9', '63329.8', '58446.85', '60260.35' ],   [ '1719100800000', '64228.97', '64484.1', '63145.31', '63179.9' ],   [ '1719014400000', '64108.3', '64497.79', '63906.7', '64228.97' ],   [ '1718928000000', '64853.9', '65058.6', '63368', '64108.3' ],   [ '1718841600000', '64943.76', '66459.51', '64533.6', '64853.9' ],   [ '1718755200000', '65150.31', '65701.4', '64653.4', '64943.76' ],   [ '1718668800000', '66459.77', '66552.7', '64042.45', '65150.31' ] ] Стандартное отклонение для BTCUSDT за 30 периодов: 2751.139147809381

Асинхронная функция getStandardDeviation работает так:

  • Принимает параметры symbol, interval (по умолчанию ‘D’ для дневного интервала) и limit (по умолчанию 30 периодов).

  • Выполняет GET-запрос к API ByBit для получения данных Mark Price Kline.

  • Выводит ответ API в консоль.

  • Проверяет, что ответ API содержит необходимые данные.

  • Извлекает данные Kline и выводит их в консоль.

  • Извлекает цены закрытия из данных.

  • Вычисляет среднее значение цен (mean).

  • Вычисляет дисперсию (variance).

  • Вычисляет стандартное отклонение (standard deviation).

  • Выводит стандартное отклонение в консоль и возвращает его.

  • Обрабатывает ошибки и выводит их в консоль.

Процентное изменение (Percentage Change)

Измерение процентного изменения цены за определённые временные интервалы (1 час, 24 часа). Например, цена BTC увеличилась на 5% за последние 24 часа.

Для измерения возьмём эндпоинт GET /v5/market/tickers. Мы можем использовать данные о цене открытия и закрытия за последний интервал для расчёта процентного изменения.

Создайте файл percentChange.js и добавьте этот код:

const axios = require('axios'); // Импортирует библиотеку axios для выполнения HTTP-запросов   const baseUrl = 'https://api.bybit.com'; // Базовый URL для API Bybit const symbol = 'BTCUSDT'; // Символ для отслеживания   // Асинхронная функция для получения процентного изменения цены async function getPercentageChange(symbol, interval = '24h') {     try {         // Выполняет GET-запрос к API Bybit для получения данных тикера         const response = await axios.get(`${baseUrl}/v5/market/tickers`, {             params: {                 category: 'spot', // Указывает категорию: 'spot', 'linear' или 'inverse'                 symbol: symbol,   // Указывает символ для получения данных (например, BTCUSDT)             }         });         console.log('Ответ API:', response.data); // Выводит ответ API в консоль           // Проверяет, что результат существует и не пустой         if (response.data.result && response.data.result.list && response.data.result.list.length > 0) {             const data = response.data.result.list[0]; // Извлекает данные тикера             console.log('Данные Ticker:', data); // Выводит данные тикера в консоль               const lastPrice = parseFloat(data.lastPrice); // Текущая цена             const prevPrice = parseFloat(data.prevPrice24h); // Цена 24 часа назад               // Вычисляет процентное изменение цены             const percentageChange = ((lastPrice - prevPrice) / prevPrice) * 100;             console.log(`Процентное изменение для ${symbol} за ${interval}: ${percentageChange.toFixed(2)}%`); // Выводит процентное изменение в консоль             return percentageChange; // Возвращает рассчитанное процентное изменение         } else {             console.error('Для данного символа нет данных.'); // Выводит ошибку, если данных нет             return null; // Возвращает null, если данных нет         }     } catch (error) {         console.error('Ошибка при получении процентного изменения:', error); // Выводит ошибку, если запрос не удался     } }   getPercentageChange(symbol); // Вызывает функцию для вычисления процентного изменения для BTCUSDT

Результат работы кода:

Данные Ticker: {   symbol: 'BTCUSDT',   bid1Price: '64618',   bid1Size: '0.922796',   ask1Price: '64618.01',   ask1Size: '0.000002',   lastPrice: '64618.01',   prevPrice24h: '64983.79',   price24hPcnt: '-0.0056',   highPrice24h: '66129.54',   lowPrice24h: '63846.77',   turnover24h: '1097742032.884776',   volume24h: '16877.388038',   usdIndexPrice: '64631.408601' } Процентное изменение для BTCUSDT за 24h: -0.56%

Асинхронная функция getPercentageChange работает так:

  • Принимает параметры symbol и interval (по умолчанию ’24h’ для 24-часового интервала).

  • Выполняет GET-запрос к API ByBit для получения данных тикера.

  • Выводит ответ API в консоль.

  • Проверяет, что ответ API содержит необходимые данные.

  • Извлекает данные тикера и выводит их в консоль.

  • Получает текущую цену (lastPrice) и цену 24 часа назад (prevPrice).

  • Вычисляет процентное изменение цены.

  • Выводит процентное изменение в консоль и возвращает его.

  • Обрабатывает ошибки и выводит их в консоль.

Пошаговое руководство интеграции ByBit API и МТС Exolve SMS API на примере диапазона изменения цены

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

Создайте новый файл с названием sendSMS.js в корне проекта и инициализируйте проект:

npm init -y

Установите зависимости:

npm install axios dotenv express

Библиотеку dotenv мы будем использовать для безопасного хранения нашего API-ключа МТС Exolve. Создайте в корне проекта файл .env и добавьте в него полученный в личном кабинете CPaaS-платформы токен:

EXOLVE_API_KEY=ВАШ АПИ КЛЮЧ ЗДЕСЬ

Добавьте следующий код:

require('dotenv').config(); // Загружает переменные среды из файла .env const express = require('express'); // Импортирует библиотеку express для создания сервера const axios = require('axios'); // Импортирует библиотеку axios для выполнения HTTP-запросов   const app = express(); // Создает экземпляр express приложения const port = 3000; // Устанавливает порт для сервера const baseUrl = 'https://api.bybit.com'; // Базовый URL для API Bybit const smsUrl = 'https://api.exolve.ru/messaging/v1/SendSMS'; // URL для отправки SMS через Exolve API const smsApiKey = process.env.EXOLVE_API_KEY; // API ключ для Exolve, загружается из переменных среды   const senderNumber = 'ВАШ НОМЕР ОТПРАВИТЕЛЯ'; // Номер телефона отправителя const receiverNumber = 'ВАШ НОМЕР ПОЛУЧАТЕЛЯ'; // Номер телефона получателя   let previousPrice = null; // Для хранения предыдущей цены   // Асинхронная функция для получения текущих данных тикера async function getRealTimeTickers(symbol) {     try {         // Выполняет GET-запрос к API Bybit для получения данных тикера         const response = await axios.get(`${baseUrl}/v5/market/tickers`, {             params: {                 category: 'spot', // Указывает категорию: 'spot', 'linear' или 'inverse'                 symbol: symbol,   // Указывает символ для получения данных (например, BTCUSDT)             }         });         console.log('Ответ API:', response.data); // Выводит ответ API в консоль           // Проверяет, что результат существует и не пустой         if (response.data.result && response.data.result.list && response.data.result.list.length > 0) {             const data = response.data.result.list[0]; // Извлекает данные тикера             console.log('Данные Ticker:', data); // Выводит данные тикера в консоль               return parseFloat(data.lastPrice); // Возвращает текущую цену         } else {             console.error('Для данного символа нет данных.'); // Выводит ошибку, если данных нет             return null; // Возвращает null, если данных нет         }     } catch (error) {         console.error('Ошибка при получении тикеров в реальном времени:', error); // Выводит ошибку, если запрос не удался     } }   // Асинхронная функция для отправки SMS async function sendSMS(number, destination, text) {     try {         // Выполняет POST-запрос к Exolve API для отправки SMS         const response = await axios.post(smsUrl, {             number: number,             destination: destination,             text: text         }, {             headers: {                 'Authorization': `Bearer ${smsApiKey}`, // Устанавливает заголовок авторизации                 'Content-Type': 'application/json' // Устанавливает тип содержимого             }         });         console.log('Отправленное SMS:', response.data); // Выводит ответ API на отправку SMS в консоль     } catch (error) {         if (error.response) {             console.error('Данные ответа на ошибку:', error.response.data); // Выводит данные об ошибке, если они есть         }         console.error('Ошибка отправки SMS:', error.message); // Выводит сообщение об ошибке     } }   // Функция для мониторинга цены function monitorPrice(symbol, interval) {     setInterval(async () => {         const currentPrice = await getRealTimeTickers(symbol); // Получает текущую цену         if (currentPrice !== null) {             if (previousPrice !== null) {                 if (currentPrice > previousPrice) {                     console.log(`Оповещение: Цена ${symbol} выросла! Предыдущая цена: ${previousPrice}, Текущая цена: ${currentPrice}`);                     await sendSMS(senderNumber, receiverNumber, `Цена ${symbol} выросла с ${previousPrice} до ${currentPrice}`);                 } else if (currentPrice < previousPrice) {                     console.log(`Оповещение: Цена ${symbol} снизилась! Предыдущая цена: ${previousPrice}, Текущая цена: ${currentPrice}`);                     await sendSMS(senderNumber, receiverNumber, `Цена ${symbol} снизилась с ${previousPrice} до ${currentPrice}`);                 } else {                     console.log(`Цена ${symbol} остается неизменной. Текущая цена: ${currentPrice}`);                 }             } else {                 console.log(`Начальная цена ${symbol} установлена на: ${currentPrice}`);             }             previousPrice = currentPrice; // Обновляет предыдущую цену текущей         }     }, interval); }   // Запуск сервера app.listen(port, () => {     console.log(`Сервер работает на порту ${port}`);     monitorPrice('BTCUSDT', 5000); // Периодический запрос каждые 5 секунд });

Запустите сервер express командой node sendSMS.js, и если всё успешно, то начнут приходить сообщения на указанный вами номер.

Как работает этот код

Асинхронная функция getRealTimeTickers:

  • Выполняет GET-запрос к API ByBit для получения данных тикера.

  • Проверяет, что ответ API содержит необходимые данные.

  • Возвращает текущую цену или выводит ошибку.

Асинхронная функция sendSMS:

  • Выполняет POST-запрос к МТС Exolve SMS API для отправки SMS.

  • Устанавливает заголовки авторизации и тип содержимого.

  • Выводит ответ API на отправку SMS или сообщение об ошибке.

Функция monitorPrice:

  • Запускает периодический запрос к API для получения текущей цены каждые interval миллисекунд.

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

  • Обновляет предыдущую цену текущей.

Запуск сервера:

  • Сервер запускается на указанном порту и выводит сообщение в консоль.

  • Запускает мониторинг цены для символа BTCUSDT с интервалом 5 секунд.

Интеграция с другими эндпоинтами

Этот пример показывает, как использовать API ByBit для получения реальных данных о ценах на криптовалюты и для отправки SMS через МТС Exolve. В инструкции выше мы следили за изменениями цен и отправляли уведомления при их подъёме или падении.

Пример легко адаптируется под разные виды колебаний: можно выбрать другой эндпоинт в API ByBit или изменить логику обработки данных перед отправкой SMS.

Показанная в инструкции функция мониторинга позволяет устанавливать критерии для отправки уведомлений, например, по изменениям цен, объёмам торгов или историческому максимуму и минимуму.

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

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


Мы рассмотрели, как настроить мониторинг волатильности Bitcoin с помощью ByBit API и МТС Exolve для получения автоматических SMS-уведомлений о колебаниях курса. Примеры можно адаптировать к любым валютам и монетам криптоплатформы и в целом построить персональную систему наблюдения.

Также вы попробовали отправку SMS через API-платформу, и, возможно, этот опыт будет полезен для других проектов, если с криптой вы не работаете.


ссылка на оригинал статьи https://habr.com/ru/articles/839208/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *