Вступ
Навчіться розуміти та використовувати API для торгівлі криптовалютами, щоб отримати безліч можливостей для входу та виходу з позицій. Навіть базових знань у галузі кодування достатньо для підключення до сервера біржі та автоматизації торгових стратегій. А за рахунок обходу веб-сайту ви зможете ще швидше отримати доступ до інструменту зіставлення ордерів для високопродуктивних програм.
Мета цієї серії – познайомити та навчити вас працювати з Binance REST API. Після прочитання статей ви зможете впевнено запитувати інформацію про ринки та позиції, а також розміщувати різні типи ордерів.
У цій статті для зв'язку з біржею ми будемо використовувати Postman. Не хвилюйтеся - ми не ризикуватимемо реальними засобами.
Необхідні умови
Ключі тестової мережі
Для наших цілей ми використовуватимемо тестову мережу. Це дозволить експериментувати із засобами, які не мають цінності в реальному світі. Вони працюють так само, як реальні монети та токени, тому після вивчення статті ви зможете використовувати API для торгівлі реальними коштами.
Щоб розпочати, перейдіть в спотову тестову мережу.
Щоб отримати доступ, увійдіть до облікового запису GitHub. Створіть обліковий запис, якщо у вас його немає.
Натисніть Authenticate (Аутентифікація) та увійдіть через GitHub.
У розділі API-ключів ви побачите повідомлення про відсутність зареєстрованих ключів. Натисніть Generate HMAC_SHA256 Key (Створити ключ HMAC_SHA256).
Потім надайте ключам будь-яку мітку та натисніть Generate (Створити).
Ви отримаєте API-ключ та секретний ключ. Важливо записати їх одразу. В іншому випадку доведеться розпочати процес створення ключа заново. Рекомендуємо зберігати API-ключ та секретний ключ у додатку для нотаток, щоб їх можна було легко скопіювати та вставити.
Примітка: при використанні реальної біржі варто давати ключі мітки, щоб легше керувати ключами. В обліковому записі може бути кілька ключів з різними дозволами. Якщо ви використовуєте кілька торгових роботів, ключі з описовими мітками спрощують керування дозволами та видалення ключів без зміни всіх роботів.
Завантаження та встановлення Postman
Postman – це платформа для взаємодії з API. Це ідеальна відправна точка: вона надає доступ до колекцій Binance запитів, які можна тестувати без написання коду.
Програма доступна на Mac, Windows та Linux. Перейдіть на сторінку завантаження та скачайте файл у форматі zip.
Після цього знайдіть його у провіднику та встановіть. Запустіть програму - і можете приступати! Для входу можна за бажанням створити обліковий запис. Щоб пропустити цей крок, оберіть відповідну опцію у нижній частині вікна.
Створення середовища
На цьому етапі перед вами має бути подібний інтерфейс.
Спочатку необхідно створити середовище, щоб додати змінні набір запитів, з якими ми будемо працювати. Для цього потрібно отримати деяку інформацію з репозиторію Binance на GitHub. Перейдіть за посиланням і завантажте файл у форматі zip.
Завантаження не триватиме багато часу. Знайдіть файл у провіднику та розпакуйте. Потім поверніться до Postman.
Натисніть піктограму налаштувань у верхньому правому куті, як показано на зображенні вище. З'явиться спливаюче вікно для керування середовищами.
Натисніть Import (Імпортувати) і перейдіть до папки, яку витягли (binance-postman-api).
Відкрийте її, а потім відкрийте папку середовищ.
Там буде два файли (один для основної мережі та один для тестової). Нам потрібний binance_com_spot_testnet_api.postman_environment.json. Переконайтеся, що вибрали правильний файл, тому що ключі не спрацюють.
Майже готове. Натисніть Binance Spot Testnet API (API спотової тестової мережі Binance). Ви побачите змінні, як у зображенні нижче. Вставте раніше збережені ключі у два параметри, виділені червоним кольором. Натисніть Update (Оновити) і закрийте вікно.
Залишіть поля timestamp (штамп часу) і signature (підпис) порожніми. Ці значення автоматично створюватимуться при кожному запиті.
Залишилося зовсім небагато. Праворуч від значка налаштувань, на який ми натискали для налаштування середовища, є меню, що випадає з написом No Environment (Немає середовища). Натисніть і виберіть Binance Spot Testnet API (API спотової тестової мережі Binance).
Імпорт колекції
Тепер потрібно імпортувати колекцію — великий набір запитів, який при надсиланні виклику зробить важку роботу за нас. Щоб завантажити колекцію в середу:
Натисніть Import (Імпорт) у верхньому лівому куті.
У спливаючому вікні на вкладці File (Файл) виберіть Upload Files (Завантажити файли).
Знайдіть папку binance-postman-api та відкрийте її.
Цього разу увійдіть до папки колекцій.
Там буде два файли. Один – для роботи з ф'ючерсним API, другий – для роботи зі спотовим. Нам потрібен спотовий, тому оберіть файл binance_spot_api_v1.postman_collection.json.
На екрані з'явиться вікно підтвердження, в якому буде вказано, що імпортується у форматі Postman Collection.
На вкладці Import (Колекції) зліва з'явиться папка з більш ніж 100 запитами. Вітаємо, тепер можна розпочинати! У цьому розділі ми розглянемо різні типи запитів.
Подання запитів
Якщо розгорнути папки у вкладці Collections (Колекції), буде видно безліч доступних запитів. Різними кольорами виділено три типи методів, які можна використовувати:
GET: метод GET призначений отримання даних із сервера. Цей метод допоможе знайти інформацію про баланс акаунту, ціни на активи і так далі.
POST: як правило, метод POST використовується для створення інформації на сервері.
DELETE: спосіб DELETE просить сервер видалити інформацію. Цей метод стане в нагоді для скасування ордерів.
Пошук торгових пар та правил торгівлі
Настав час створити перший запит! Нам потрібно отримати інформацію про торгові пари, якими можна торгувати на біржі, та правила торгівлі:
ОТРИМАЙТЕ /exchangeInfo
Для цього запиту не потрібні додаткові параметри - його можна скопіювати і вставити в адресний рядок, щоб отримати відповідь. Однак якщо запити мають кілька параметрів, Postman дозволяє легко їх переглядати і змінювати.
Щоб завантажити запит, виберіть Market > Exchange Information (Ринок > Інформація про біржу). Відкриється наступна вкладка:
Більше нічого робити не потрібно, просто натисніть Send (Надіслати).
У верхньому виділеному розділі знаходиться важлива інформація:
статус відповіді (200 означає успіх, 400–499 означає помилку);
час отримання відповіді (менше секунди);
розмір відповіді (~22 Кбайт).
У другому розділі знаходиться основна частина відповіді. Текст подано структуровано, щоб на нього було легше дивитися. У ньому міститься інформація про біржу, а також про пари, якими можна торгувати, та їх мінімальні/максимальні суми.
Здається, інформації дуже багато, але такий формат дуже спрощує роботу програмістів. При написанні скриптів для взаємодії буде легко знайти властивості певних елементів.
Перевірка балансу облікового запису
Давайте перевіримо, які активи у нас є та скільки їх:
GET /аккаунт
Запит можна знайти у розділі Trade > Account Information (Торгівля > Інформація про обліковий запис). Натисніть на нього – відкриється сторінка, аналогічна до попередньої. Однак буде дві нові змінні: timestamp (штамп часу) та signature (підпис). Підпис – це захід безпеки. Оскільки ви запитуєте конфіденційну інформацію, необхідно підтвердити, що ви є власником облікового запису.
Штамп часу повідомляє серверу, коли був надісланий запит. Через збій мережі сервер може отримати запит набагато пізніше, ніж передбачалося. мілісекунд.
Postman генерує обидва поля користувача. Натисніть Send (Надіслати), щоб отримати відповідь. У розділі балансів буде шість активів: BNB, BTC, BUSD, ETH, LTC та TRX. Баланс буде поділено на доступний та заблокований. Ми ще нічого не блокували, тому всі активи мають бути доступними.
Вітаємо з (неіснуючим) багатством!
Як дізнатися поточну ціну торгової пари
Дізнатися поточну ціну активу можна у різний спосіб. Найпростіший – використовувати наступний запит:
ОТРИМАЙТЕ /api/v3/ticker/24hr
Цей запит надає інформацію про ціни на активи за останні 24 години. Знайдіть його у розділі Market > 24hr Ticker Price Change Statistics (Ринок > Статистика зміни ціни торгової пари за 24 години). За умовчанням змінною виступає торгова пара BTCUSDT.
Можна надіслати запит одразу, щоб побачити детальну інформацію про ціни. Також можна змінити торгову пару (BNBBUSD, LTCUSDT та інші) або зняти позначку зі змінною, щоб отримати дані для 40 пар.
Також є простіший запит Market > Symbol Price Ticker (Ринок > Тікер ціни торгової пари), який показує поточну ціну активу:
ОТРИМАЙТЕ /api/v3/price
Як і в попередньому випадку, можна змінити змінну торгової пари або повністю видалити її та отримати останню ціну для всіх пар.
Перевірка поточної глибини книги ордерів
Глибина книги ордерів (також звана глибиною ринку або DOM) може багато розповісти про ринок.
ОТРИМАТИ api/v3/depth
Коли ми відправляємо його зі значеннями за замовчуванням (Market > Order Book, тобто Ринок > Книга ордерів), ми отримуємо відповідь із бід-цінами та аск-цінами BTCUSDT. Сервер тестової мережі видає не так багато даних, як сервер цієї мережі, тому нижче наведено скріншот того, що можна побачити в реальному середовищі:
У виділеному розділі вище вказано першу бід-ціну. Оскільки ми розглядаємо книгу BTCUSDT, верхня кількість — це ціна, яку хтось готовий заплатити за вашу BTC. Нижче вказано кількість, яку цей користувач хоче купити. Виходить, ордер вимагає 0,999 BTC за курсом 9704,65 USDT за BTC. Далі ціна пропозиції знижується: нижче за списком є покупці, які хочуть заплатити менше.
Верхня пропозиція буде найвигіднішою. Однак, якщо ви намагаєтеся продати, наприклад, 3 BTC, то за найкращою ціною зможете продати лише 0,999 BTC. Доведеться приймати наступні (дешевші) пропозиції, доки ордер не буде виконаний повністю.
Нижче наведена інформація про аск-ціни. Вони схожі на бід-ціни, за винятком того, що в цьому розділі представлені ордери на продаж BTC за USDT.
Розміщення тестового ордера
Тепер ми розмістимо ордер тесту.
POST api/v3/order/test
Хоча ми використовуємо засоби тестової мережі, насправді цей запит не розміщує ордер. Так можна тестувати ордери до їхнього фактичного розміщення. Запит розташований у розділі Trade > Test New Order (TRADE) (Торгівля > Тест нового ордера (TRADE)).
На цей раз задіяно набагато більше параметрів. Давайте розглянемо зазначені:
symbol (Торгова пара) - ми вже стикалися з ним раніше. Це пара, яку ви хочете торгувати.
side (дія) – тут потрібно вибрати BUY (купити) або SELL (продати). У парі BTCUSDT BUY дозволяє купити BTC за USDT, а SELL продати BTC за USDT.
type (тип) — тип ордера, який потрібно розмістити. Можливі значення (докладніше посилання):
МЕЖА
РИНОК
STOP_LOSS
STOP_LOSS_LIMIT
TAKE_PROFIT
TAKE_PROFIT_LIMIT
LIMIT_MAKER
timeInForce - цей параметр визначає спосіб виконання ордера:
GTC (діє до скасування) - найпопулярніший вибір. Ордер діятиме доти, доки не буде виконаний або поки ви його не скасуєте.
FOK (виконати або скасувати) — FOK дає біржі вказівку виконати ордер одразу і повністю Якщо біржа не може цього зробити, ордер негайно скасовується.
IOC (негайно або скасувати) - ордер повинен бути виконаний відразу, повністю або частково. На відміну від FOK, ордери не скасовуються, якщо можуть бути виконані лише частково.
quantity — кількість активу, яку ви хочете купити або продати.
price (ціна) - ціна, за якою ви хочете продати. Для пари BTCUSDT вона виявляється у USDT.
NewClientOrderId - ідентифікатор ордера. Це необов'язкове поле, але можна вказати ідентифікатор, який полегшить запит пізніше. В іншому випадку біржа згенерує ID випадковим чином.
Тепер створимо тестовий ордер. Ми використовуємо автоматично згенеровані значення: лімітний ордер для продажу 0,1 BTC за USDT за ціною $9000. Натисніть Send (Надіслати). У разі успіху ми отримаємо {} як відповідь.
Розміщення реального ордера
Настав час дізнатися, як розміщувати справжній ордер.
POST /api/v3/order
Перейдіть до розділу Trade > New Order (Торгівля > Новий ордер). Параметри тут такі самі, як у тестових ордерів. Давайте залишимо всі значення як є, але змінимо ціну продажу на $40 000. Скоригуйте ціну та натисніть Send (Надіслати).
У разі успіху прийде відповідь із подробицями про ордер.
Перевірка статусу відкритого ордера
У попередньому розділі ми отримали підтвердження, що ордер розміщено, але як його тепер перевірити?
ОТРИМАЙТЕ /api/v3/openOrders
Запит знаходиться в розділі Trade > Current Open Orders (USER_DATA) (Торгівля > Поточні відкриті ордери (USER_DATA)). За замовчуванням вибрано BTCUSDT. Якщо ви натиснете Send (Надіслати), то отримаєте інформацію про ваші відкриті ордери BTCUSDT (на даному етапі ви побачите тільки той, який ми розмістили раніше). Якщо не вказати торгову пару, тоді прийде інформація про всі відкриті ордери.
ОТРИМАЙТЕ /api/v3/allOrders
Trade > All Orders (USER_DATA) (Торгівля > Всі ордери (USER_DATA)) дасть огляд всіх ордерів, а не тільки відкритих. Тут потрібно вказати торгову пару. orderId, startTime, endTime та limit – необов'язкові параметри, які допоможуть уточнити пошук. Зараз вони не потрібні, тож приберіть з них галочки. Натисніть Send (Надіслати) — з'явиться та сама відповідь, що й раніше. Тут також відображаються закриті та скасовані ордери, якщо вони є.
Нарешті, можна запросити конкретні ордери за допомогою:
ОТРИМАЙТЕ /api/v3/order
Запит знаходиться в розділі Trade > Query Order (USER_DATA) (Торгівля > Запит ордера (USER_DATA)). Необхідно вказати orderId або origClientOrderId (необов'язковий тег "newClientOrderId", який можна додати до ордерів). Зніміть позначку з orderId. Для origClientOrderId вкажемо тег за замовчуванням - my_order_id_1. Заповніть поле та натисніть Send (Надіслати).
Скасування ордера
Якщо через деякий час ціль у $40 000 здасться надто оптимістичною, ордер можна скасувати. У цьому випадку потрібно використати:
ВИДАЛИТИ /api/v3/order
Це запит у розділі Trade > Cancel Order (Торгівля > Скасувати ордер), який дозволить виділити ордери для скасування. Зніміть позначку з параметрів orderId та newClientOrderId і задайте для origClientOrderId значення «my_order_id_1».
Після надсилання запиту ви отримаєте відповідь з інформацією про ордер. Якщо прокрутити вниз до розділу status (статус), можна побачити, що він дійсно скасовано. або GET/api/v3/order з origClientOrderId.
Розміщення ордера з миттєвим виконанням
Попередній лімітний ордер не був виконаний, тому що він спрацював би тільки при досягненні ціни BTC $40 000. Ринковий ордер дозволяє купувати/продавати за будь-якій поточній ціні. Він виконується миттєво.
Для цього давайте повернемося до розділу Trade > New Order (Торгівля > Новий ордер). Ми продемонструємо тип відповіді (newOrderRespType) - параметр, який налаштовується залежно від бажаної відповіді. Тут є три варіанти: ACK, RESULT чи FULL. Приклади кожного запиту знаходяться за посиланням . Ми виберемо ACK, який просто підтвердить, що ордер було отримано.
Нижче можна побачити, що ми збираємося надіслати ринковий ордер на продаж BNB за BUSD за поточною ринковою ціною.
Зверніть увагу, що у відповіді міститься досить мало інформації:
Можна переконатися, що ордер був виконаний за допомогою /api/v3/allOrders.
Перевірка угод
Тепер давайте розглянемо запит для перевірки угод:
ОТРИМАЙТЕ /api/v3/myTrades
Він знаходиться в розділі Trade > Account Trade List (USER_DATA) (Торгівля > Список угод облікового запису (USER_DATA)). Такий запит дозволяє перевірити кожну угоду із певною торговою парою. Щоб побачити угоди з торговою парою за замовчуванням (BTCUSDT), просто зніміть позначку параметрів startTime, endTime і fromId. У відповіді буде до 500 угод - змініть параметр limit (ліміт), щоб побачити більше.
Налагодження за допомогою Postman
У Postman можна додатково розкрити необроблений HTTP-запит та відповідь.
Це меню відкриє консоль Postman, яка виведе деталі кожного запиту.
Резюме
Метою цього посібника було розповісти, як працювати з API Binance без написання коду. Тепер ви знаєте, як запросити та надіслати інформацію.
У наступних частинах цієї серії ми познайомимо вас із основними концепціями кодування, які автоматизують купівлю та продаж криптовалют та інших цифрових активів.
Якщо у вас залишилися питання, перейдіть до спільнота розробників Binance або ознайомтеся з документацією.