Skip to content

Instantly share code, notes, and snippets.

@naviarh
Created July 24, 2018 10:29
Show Gist options
  • Save naviarh/f56bb9a7f29a1fc619ad986d2990f6a2 to your computer and use it in GitHub Desktop.
Save naviarh/f56bb9a7f29a1fc619ad986d2990f6a2 to your computer and use it in GitHub Desktop.
binance.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "binance.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"[View in Colaboratory](https://colab.research.google.com/gist/naviarh/f56bb9a7f29a1fc619ad986d2990f6a2/binance.ipynb)"
]
},
{
"metadata": {
"id": "VR4Z4giXonUF",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "3983bb20-fd17-426d-8da4-08cf0476e027"
},
"cell_type": "code",
"source": [
"# Put these at the top of every notebook, to get automatic reloading and inline plotting\n",
"%reload_ext autoreload\n",
"%autoreload 2\n",
"%matplotlib inline\n",
"!pwd"
],
"execution_count": 18,
"outputs": [
{
"output_type": "stream",
"text": [
"/content\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "ClqoCwqZorzm",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 59
},
"outputId": "d2a52414-6f07-4a5c-a6b7-7749d79cdb8b"
},
"cell_type": "code",
"source": [
"import subprocess, os\n",
"os.uname()"
],
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"posix.uname_result(sysname='Linux', nodename='fc4718bea57e', release='4.14.33+', version='#1 SMP Wed Jun 20 01:36:48 PDT 2018', machine='x86_64')"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"metadata": {
"id": "Aj8QQgstqVsD",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# API BINANCE\n",
"\n",
"from: https://bablofil.ru/binance-api/"
]
},
{
"metadata": {
"id": "TI1NOVOjqcCc",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### api class for binance"
]
},
{
"metadata": {
"id": "KrIcewkSo2nm",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"#!/usr/bin/env python3\n",
"# -*- coding: utf-8 -*-\n",
"\n",
"import time\n",
"import json\n",
"import hmac\n",
"import hashlib\n",
"import requests\n",
"import urllib\n",
"\n",
"#from urllib.parse import urlparse, urlencode\n",
"#from urllib.request import Request, urlopen\n",
"\n",
"# Ключ и секрет\n",
"key = ''\n",
"secret = ''\n",
"\n",
"# АПИ Binance\n",
"class Binance:\n",
"\n",
" methods = {\n",
" # public methods\n",
" 'ping': {'url':'api/v1/ping', 'method': 'GET', 'private': False},\n",
" 'time': {'url':'api/v1/time', 'method': 'GET', 'private': False},\n",
" 'exchangeInfo': {'url':'api/v1/exchangeInfo', 'method': 'GET', 'private': False},\n",
" 'depth': {'url': 'api/v1/depth', 'method': 'GET', 'private': False},\n",
" 'trades': {'url': 'api/v1/trades', 'method': 'GET', 'private': False},\n",
" 'historicalTrades': {'url': 'api/v1/historicalTrades', 'method': 'GET', 'private': False},\n",
" 'aggTrades': {'url': 'api/v1/aggTrades', 'method': 'GET', 'private': False},\n",
" 'klines': {'url': 'api/v1/klines', 'method': 'GET', 'private': False},\n",
" 'ticker24hr': {'url': 'api/v1/ticker/24hr', 'method': 'GET', 'private': False},\n",
" 'tickerPrice': {'url': 'api/v3/ticker/price', 'method': 'GET', 'private': False},\n",
" 'tickerBookTicker': {'url': 'api/v3/ticker/bookTicker', 'method': 'GET', 'private': False},\n",
" # private methods\n",
" 'createOrder': {'url': 'api/v3/order', 'method': 'POST', 'private': True},\n",
" 'testOrder': {'url': 'api/v3/order/test', 'method': 'POST', 'private': True},\n",
" 'orderInfo': {'url': 'api/v3/order', 'method': 'GET', 'private': True},\n",
" 'cancelOrder': {'url': 'api/v3/order', 'method': 'DELETE', 'private': True},\n",
" 'openOrders': {'url': 'api/v3/openOrders', 'method': 'GET', 'private': True},\n",
" 'allOrders': {'url': 'api/v3/allOrders', 'method': 'GET', 'private': True},\n",
" 'account': {'url': 'api/v3/account', 'method': 'GET', 'private': True},\n",
" 'myTrades': {'url': 'api/v3/myTrades', 'method': 'GET', 'private': True},\n",
" }\n",
"\n",
" def __init__(self, API_KEY = key, API_SECRET = secret):\n",
" self.API_KEY = API_KEY\n",
" self.API_SECRET = bytearray(API_SECRET, encoding='utf-8')\n",
"\n",
" def __getattr__(self, name):\n",
" def wrapper(*args, **kwargs):\n",
" kwargs.update(command=name)\n",
" return self.call_api(**kwargs)\n",
" return wrapper\n",
"\n",
" def call_api(self, **kwargs):\n",
"\n",
" command = kwargs.pop('command')\n",
" api_url='https://api.binance.com/'+self.methods[command]['url']\n",
"\n",
" payload = kwargs\n",
" headers = {}\n",
"\n",
" if self.methods[command]['private']:\n",
" payload.update({'timestamp': int(time.time() * 1000)})\n",
"\n",
" sign = hmac.new(\n",
" key=self.API_SECRET,\n",
" msg=urllib.parse.urlencode(payload).encode('utf-8'),\n",
" digestmod=hashlib.sha256\n",
" ).hexdigest()\n",
"\n",
" payload.update({'signature':sign})\n",
" headers = {\"X-MBX-APIKEY\": self.API_KEY}\n",
"\n",
" if self.methods[command]['method'] == 'GET':\n",
" api_url += '?'+urllib.parse.urlencode(payload)\n",
"\n",
" response = requests.request(method=self.methods[command]['method'], url=api_url, data=\"\" if self.methods[command]['method'] == 'GET' else payload, headers=headers)\n",
" return response.json()\n"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "Rjl8hapbqlVM",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## Публичные запросы"
]
},
{
"metadata": {
"id": "kruSWeBgrwlD",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Инициализируем API"
]
},
{
"metadata": {
"id": "0og7If7ur3Kz",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"binance = Binance()"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "Q7SjtQZxrYtM",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Проверка связи\n",
"\n",
"Возвращает пустой словарь\n",
"{}\n",
"\n",
"Ссылка для просмотра в браузере https://api.binance.com/api/v1/ping\n",
"\n",
"Вес - 1"
]
},
{
"metadata": {
"id": "lYwBiSxjpkPT",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "fa21d5e2-245c-4433-ace1-0d262f14a93e"
},
"cell_type": "code",
"source": [
"binance.ping()"
],
"execution_count": 22,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{}"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"metadata": {
"id": "QvpNFQCKsEES",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Получение времени биржи\n",
"\n",
"Возвращает словарь с текущим временем\n",
"\n",
"Ссылка для просмотра в браузере https://api.binance.com/api/v1/time\n",
"\n",
"Вес - 1"
]
},
{
"metadata": {
"id": "ZaV1LXymp4_f",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "07c1182b-3f97-4da5-e185-f4d6201c491e"
},
"cell_type": "code",
"source": [
"binance.time()"
],
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'serverTime': 1532426399220}"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
}
]
},
{
"metadata": {
"id": "QUUuUN_ktI3J",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Настройки и лимиты биржи\n",
"\n",
"Возвращает структуру данных\n",
"\n",
"Ссылка для просмотра в браузере https://api.binance.com/api/v1/exchangeInfo\n",
"\n",
"Вес - 1"
]
},
{
"metadata": {
"id": "z8lFZ913p-Ts",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"binance.exchangeInfo()"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "LGf-cjdttyny",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Открытые ордера на бирже\n",
"\n",
"Метод позволяет получить книгу ордеров. \n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v1/depth?symbol=ETHBTC\n",
"\n",
"Метод позволяет получить книгу ордеров.\n",
"\n",
"**Принимает параметры:**\n",
"\n",
"- Обязательные:\n",
"\n",
"**symbol** - пара \n",
"\n",
"- Необязательные:\n",
"\n",
"**limit** - кол-во возвращаемых записей от 5 до 1000 (по умолчанию 100). Допустимые значения: 5, 10, 20, 50, 100, 500, 1000. Еще можно указать 0, но он может вернуть большое кол-во данных.\n",
"\n",
"Вес зависит от параметра limit. При лимите от 5 до 100 вес будет равен 1. Для параметра 500 вес составит 5. Для параметра 1000 вес будет 10."
]
},
{
"metadata": {
"id": "WmCbcbvEua2Z",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 374
},
"outputId": "328d7f89-00e4-4828-f649-eb4381e37850"
},
"cell_type": "code",
"source": [
"binance.depth(\n",
" symbol='BNBBTC',\n",
" limit=10\n",
")"
],
"execution_count": 28,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'asks': [['0.00149990', '218.59000000', []],\n",
" ['0.00150000', '30.66000000', []],\n",
" ['0.00150020', '35.00000000', []],\n",
" ['0.00150050', '4.03000000', []],\n",
" ['0.00150080', '50.00000000', []],\n",
" ['0.00150100', '3097.52000000', []],\n",
" ['0.00150110', '44.00000000', []],\n",
" ['0.00150170', '11.23000000', []],\n",
" ['0.00150180', '0.01000000', []],\n",
" ['0.00150200', '8.98000000', []]],\n",
" 'bids': [['0.00149800', '11.21000000', []],\n",
" ['0.00149790', '6.48000000', []],\n",
" ['0.00149760', '6.66000000', []],\n",
" ['0.00149740', '11.53000000', []],\n",
" ['0.00149730', '8.77000000', []],\n",
" ['0.00149720', '56.69000000', []],\n",
" ['0.00149710', '3.00000000', []],\n",
" ['0.00149700', '1.00000000', []],\n",
" ['0.00149680', '1.00000000', []],\n",
" ['0.00149650', '1.00000000', []]],\n",
" 'lastUpdateId': 104460281}"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"metadata": {
"id": "vydW7IZMvU6Z",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Последние (чужие) сделки\n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v1/trades?symbol=ETHBTC\n",
"\n",
"**Принимает параметры:**\n",
"\n",
"- Обязательные:\n",
"\n",
"**symbol** - пара \n",
"\n",
"- Необязательные:\n",
"\n",
"**limit** - кол-во возвращаемых записей (максимум 500, по умолчанию 500).\n",
"\n",
"Вес - 1"
]
},
{
"metadata": {
"id": "aZdcrHpVtmyt",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 323
},
"outputId": "b39e7044-315a-4136-b93a-867b2c602b62"
},
"cell_type": "code",
"source": [
"binance.trades(\n",
" symbol='BNBBTC',\n",
" limit=3\n",
")"
],
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[{'id': 24991465,\n",
" 'isBestMatch': True,\n",
" 'isBuyerMaker': True,\n",
" 'price': '0.00149630',\n",
" 'qty': '2.46000000',\n",
" 'time': 1532426846974},\n",
" {'id': 24991466,\n",
" 'isBestMatch': True,\n",
" 'isBuyerMaker': True,\n",
" 'price': '0.00149630',\n",
" 'qty': '1.21000000',\n",
" 'time': 1532426846974},\n",
" {'id': 24991467,\n",
" 'isBestMatch': True,\n",
" 'isBuyerMaker': True,\n",
" 'price': '0.00149590',\n",
" 'qty': '1.89000000',\n",
" 'time': 1532426846974}]"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"metadata": {
"id": "peV0TRZXw0Es",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Сжатая история сделок\n",
"\n",
"Метод позволяет получить суммарную историю сделок. Сделки, выполненные в одно время по одному ордеру и по одной цене будут представлены одной строкой с объединенным количеством.\n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v1/aggTrades?symbol=ETHBTC\n",
"\n",
"Вес - 1\n",
"\n",
"**Принимает параметры:**\n",
"\n",
"- Обязательные:\n",
"\n",
"**symbol** - пара\n",
"\n",
"- Необязательные:\n",
"\n",
"**fromID** - показывать начиная со сделки № (включительно)\n",
"\n",
"**startTime** - начиная с какого времени (включительно)\n",
"\n",
"**endTime** - заканчивая каким временем (включительно)\n",
"\n",
"**limit** - Кол-во записей (максимум 500, по умолчанию 500)"
]
},
{
"metadata": {
"id": "x6Vz1xfYwaMN",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 289
},
"outputId": "c34547cd-6996-4db6-9d75-e205f0ceb625"
},
"cell_type": "code",
"source": [
"binance.aggTrades(\n",
" symbol='BNBBTC',\n",
" limit=2\n",
")"
],
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[{'M': True,\n",
" 'T': 1532427130725,\n",
" 'a': 21639352,\n",
" 'f': 24991620,\n",
" 'l': 24991620,\n",
" 'm': False,\n",
" 'p': '0.00149850',\n",
" 'q': '55.00000000'},\n",
" {'M': True,\n",
" 'T': 1532427135209,\n",
" 'a': 21639353,\n",
" 'f': 24991621,\n",
" 'l': 24991622,\n",
" 'm': False,\n",
" 'p': '0.00150040',\n",
" 'q': '5.61000000'}]"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
},
{
"metadata": {
"id": "hIoCwORAx45j",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Данные по свечам\n",
"\n",
"Ссылка для просмотра в браузере https://api.binance.com/api/v1/klines?symbol=LTCBTC&interval=5m\n",
"\n",
"Вес – 1\n",
"\n",
"**Параметры**:\n",
"\n",
"- Обязательные:\n",
"\n",
"**symbol** – пара\n",
"\n",
"**interval** – период свечи\n",
"\n",
" Допустимые интервалы:\n",
" • 1m // 1 минута\n",
" • 3m // 3 минуты\n",
" • 5m // 5 минут\n",
" • 15m // 15 минут\n",
" • 30m // 30 минут\n",
" • 1h // 1 час\n",
" • 2h // 2 часа\n",
" • 4h // 4 часа\n",
" • 6h // 6 часов\n",
" • 8h // 8 часов\n",
" • 12h // 12 часов\n",
" • 1d // 1 день\n",
" • 3d // 3 дня\n",
" • 1w // 1 неделя\n",
" • 1M // 1 месяц\n",
"\n",
"- Необязательные:\n",
"\n",
"**limit** – кол-во свечей (максимум 500, по умолчанию 500)\n",
"\n",
"**startTime** – время начала построения\n",
"\n",
"**endTime** – окончание периода\n",
"\n",
"Если не указаны параметры startTime и endTime, то возвращаются самые последние свечи."
]
},
{
"metadata": {
"id": "XxvhCUHmyX8f",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 221
},
"outputId": "53fd98f8-96c4-4459-a486-5bfc20258536"
},
"cell_type": "code",
"source": [
"binance.klines(\n",
" symbol='BNBBTC',\n",
" interval='5m',\n",
" limit=1\n",
")"
],
"execution_count": 35,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[[1532427300000,\n",
" '0.00150080',\n",
" '0.00150100',\n",
" '0.00149920',\n",
" '0.00149920',\n",
" '97.48000000',\n",
" 1532427599999,\n",
" '0.14627406',\n",
" 42,\n",
" '52.08000000',\n",
" '0.07816370',\n",
" '0']]"
]
},
"metadata": {
"tags": []
},
"execution_count": 35
}
]
},
{
"metadata": {
"id": "gGeh96Tqy1Qx",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Статистика за 24 часа\n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v1/ticker/24hr?symbol=BNBBTC\n",
"\n",
"Вес – 1, если указана пара, иначе вес равен (количеству всех торгуемых пар)/2.\n",
"\n",
"**Параметры**:\n",
"\n",
"- Необязательные:\n",
"\n",
"**symbol** – пара\n",
"\n",
"Если symbol не указан, возвращаются данные по всем парам. В этом случае, считается, что вы сделали столько запросов к бирже, сколько вернулось пар."
]
},
{
"metadata": {
"id": "M6C1TxsPxe2L",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 374
},
"outputId": "59306f2d-33ce-4205-de5b-2531548ee58c"
},
"cell_type": "code",
"source": [
"binance.ticker24hr(\n",
" symbol='BNBBTC'\n",
")"
],
"execution_count": 36,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'askPrice': '0.00149880',\n",
" 'askQty': '47.51000000',\n",
" 'bidPrice': '0.00149710',\n",
" 'bidQty': '54.00000000',\n",
" 'closeTime': 1532427558244,\n",
" 'count': 79780,\n",
" 'firstId': 24912030,\n",
" 'highPrice': '0.00157070',\n",
" 'lastId': 24991809,\n",
" 'lastPrice': '0.00149880',\n",
" 'lastQty': '0.40000000',\n",
" 'lowPrice': '0.00146030',\n",
" 'openPrice': '0.00156810',\n",
" 'openTime': 1532341158244,\n",
" 'prevClosePrice': '0.00156810',\n",
" 'priceChange': '-0.00006930',\n",
" 'priceChangePercent': '-4.419',\n",
" 'quoteVolume': '1792.03342756',\n",
" 'symbol': 'BNBBTC',\n",
" 'volume': '1171258.18000000',\n",
" 'weightedAvgPrice': '0.00153001'}"
]
},
"metadata": {
"tags": []
},
"execution_count": 36
}
]
},
{
"metadata": {
"id": "EUkpkuNYzUQQ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Последняя цена по паре (или парам)\n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/price?symbol=BNBBTC\n",
"\n",
"Вес - 1\n",
"\n",
"**Параметры**:\n",
"\n",
"- Необязательные:\n",
"\n",
"**symbol** – пара\n",
"\n",
"Если параметр symbol не указан, то возвращаются цены по всем парам."
]
},
{
"metadata": {
"id": "UehzHDd0zNoF",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "72fb2e09-5c61-434b-8e6a-f8bcc7b09118"
},
"cell_type": "code",
"source": [
"binance.tickerPrice(\n",
" symbol='BNBBTC'\n",
")"
],
"execution_count": 37,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'price': '0.00149730', 'symbol': 'BNBBTC'}"
]
},
"metadata": {
"tags": []
},
"execution_count": 37
}
]
},
{
"metadata": {
"id": "RxS_i3_Xzup_",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Лучшие цены покупки/продажи\n",
"\n",
"Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/bookTicker?symbol=BNBBTC\n",
"\n",
"Вес 1\n",
"\n",
"**Параметры**:\n",
"\n",
"- Необязательные:\n",
"\n",
"**symbol** – пара\n",
"\n",
"Если параметр symbol не указан, возвращаются данные по всем парам."
]
},
{
"metadata": {
"id": "qUMEmXw8zopr",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 102
},
"outputId": "27c77688-df56-414c-e5cd-92053cb8ce77"
},
"cell_type": "code",
"source": [
"binance.tickerBookTicker(\n",
" symbol='BNBBTC'\n",
")"
],
"execution_count": 38,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'askPrice': '0.00149700',\n",
" 'askQty': '284.59000000',\n",
" 'bidPrice': '0.00149600',\n",
" 'bidQty': '6.30000000',\n",
" 'symbol': 'BNBBTC'}"
]
},
"metadata": {
"tags": []
},
"execution_count": 38
}
]
},
{
"metadata": {
"id": "7TrKvAse0Asl",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment