Курсы валют через Power Query
Добрый день, уважаемые читатели блога! Сегодня речь пойдёт снова о загрузке курсов валют, только теперь мы обратимся к криптовалютам.
Основным источником данных о котировках будут служить биржи — Kraken, Binance, Poliniex, Bitterex и прочие. Что их объединяет? Ответ прост — API (application programming interface, программный интерфейс приложения, если по-русски).
Самое забавное, что к этому интерфейсу нельзя обратиться с помощью простого web запроса в Excel. Как мы это делали раньше. Выход есть — использовать Power Query.
Power Query — это специальная технология получения и анализа данных от компании Microsoft. Для Excel 2016 её отдельная установка не требуется (пакет уже включён в программу), для всех остальных версий придётся качать отдельно, также нужно обратить внимание на разрядность вашего офиса (х32, х64).
ССЫЛКА
Скачали, установили и теперь в Excel появится новая вкладка — POWER QUERY.
Вкладка выглядит следующим образом:
В принципе можно рассматривать Power Query как надстройку над вкладкой «Данные», так как у нас расширяется выбор источников получения данных.
Ну что ж, теперь перейдём непосредственно к загрузке. Цель — получить соотношение покупки продажи криптвалютных пар (ETH/BTC). К примеру, нужно загрузить курс с биржи Binance.
Весь труд будет в следующем — найти API биржи и его «руководство пользователя». Для нашей биржи оно находится по адресу:
https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
Базовой точкой входа будет:
https://api.binance.com/
И далее идёт пространное описание возможностей синтаксиса. Экспериментальным путём и опираясь на это руководство пользователя, выяснилось следующее: для получения данных по конкретной паре валют необходимо указать путь до «бегущей строки» биржи и прописать символьное обозначение пары.
Вот так:
https://api.binance.com/api/v3/ticker/price?symbol=ETHBTC
- v3 — версия api биржи;
- ticker — «бегущая строка» котировок;
- price?symbol=ETHBTC — текущая стоимость продажи.
Воспользуемся полученной ссылкой. Переходим на вкладку «Power Query» и нажимаем кнопку «Из интернета» (она самая первая). Перед нами появится окно с запросом источника загрузки данных, в поле «URL адрес» записываем адрес интересующей пары. Для загрузки остальных нужно просто поменять краткие названия криптовалют в конце строки.
Нажимаем «ОК» и попадаем в редактор запроса и представления на листе Excel.
Видим, появился редактор, данные и параметры запроса. Мы находимся на вкладке «Конвертировать». Перейдём на вкладку «Просмотр» и поставим галку «Строка формул», чтобы видеть запрос в привычном представлении.
Возвращаемся на вкладку «Конвертировать» и нажимаем кнопку «В таблицу».
Поскольку нам ничего пока больше не нужно, в появившемся окне нажимаем «Закрыть и загрузить», чтобы данный запрос появился на листе.
В результате получим вот такую картину.
Цель достигнута, курсы подгрузились. Теперь нужно настроить их на автоматическое обновление. Справа у нас есть столбец «Параметры запроса», щелкаем правой кнопкой мышки по нашем запросу и выбираем «Свойства», ставим галку «Быстрая загрузка» -> Ок.
Далее мы оказываемся на вкладке «Конструктор», в блоке кнопок «Данные из внешней таблицы» щёлкаем по треугольнику после кнопки «Обновить», затем выбираем пункт «Свойства подключения». В следующем окне нужно настроить время обновления нашего запроса.
Проставляем галки как на рисунке. Тем самым мы добиваемся автоматического обновления котировок в течение одной минуты, а если нам нужно — можем обновить сами по нажатию кнопки. Нажимаем «ОК».
Готово! Ждём минуту, курс обновляется сам. Теперь котировки будут подгружаться автоматически.
Единственный минус — для большого количества запросов придётся всё создавать ручками, что в свою очередь будет сильно нагружать программу Excel при обновлении курсов криптовалют.
Одним из простых способов получения данных из криптовалютных торговых бирж в программу MS Excel для дальнейшего использования или анализа , это вставка программного кода в сам Excel.
Программа на VBA подключается к бирже через API и в зависимости от того, какие вы хотите получить данные меняете строку подключения. В результате получаете данные в виде стоки, которую в дальнейшем в коде можно распарсить по своему усмотрению.
Вот простой пример получения текущей цены торгуемой пары EOS/ETH с биржи Binance:
Private Sub Workbook_Open() Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") XMLHTTP.Open "GET", "https://api.binance.com/api/v3/ticker/price?symbol=EOSETH", False XMLHTTP.Send If XMLHTTP.statustext = "OK" Then txt = XMLHTTP.responseText Cells(2, 5) = txt txt = Mid(txt, 29, 10) Cells(2, 3) = txt End If XMLHTTP.abort Set XMLHTTP = Nothing End Sub
Эта простенькая программа считываемую строку, для примера, выводит в ячеку MS Excel вот в таком виде:
{«symbol»:»EOSETH»,»price»:»0.02672500″}
Ну а дальше вырезает текущую цену с помощью функции VBA MID начиная с 29 символа и длиной 10 и вставляет в другую ячейку Excel.
Можно конечно нужное значение строки вырезать и другими функциями VBA, например Replace, заменяя ненужные символы пустой строкой, но это дело вкуса каждого.
Например так, в два этапа
txt = Replace(txt,"{""symbol"":""EOSETH"",""price"":""", "") txt = Replace(txt, """}", "")
Вот таким простым способом можно взаимодействовать с криптовалютными биржами через MS Excel на VBA.
Комментарии закрыты
Уже пятый день бьюсь головой об клавиатуру. Чтобы спарсить курсы валют в эксель таблицу. Пробовал и через PQ и даже что то пробовал через Макросы. Но ничего не получается. Нашел куда идет запрос https://www.binance.cc/bapi/c2c/v2/friendly/c2c/adv/search , но так же не могу подключится даже, не то чтобы получить интересующие меня курсы валют. Быть может есть здесь знающий человек, который хотя-бы направление правильно укажет. Изменено: vikttur — 28.09.2021 15:28:54 |
|
Григорий Сперанский, |
|
то что я написал выше это путь куда сайт отправляет запросы, через него парсят курсы, через php. Сам сайт который нужно спарсить — p2p.binance.com |
|
doober Пользователь Сообщений: 2204 |
|
Alemox Пользователь Сообщений: 2183 |
#5 29.09.2021 08:44:34 на USD
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. |
||
Я понял, что это способ получения данных. Еще раз благодарю за это. А как полученную информацию перенести в таблицу? |
|
Нашел исполнителя. Всех благодарю за внимание. Отдельная благодарность Alemox . |
|
Андрей Фавунков Пользователь Сообщений: 2 |
#8 27.05.2022 04:35:31
Доброго времени суток, можете подсказать, как удолось решить эту задачу? |
||
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
#9 27.05.2022 10:56:12 Андрей Фавунков, если в PQ то так:
Вот горшок пустой, он предмет простой… |
||
кто подскажет что за болезнь не могу понять в чем ошибка и как её исправить?? Изменено: Язан Альрифаи — 02.06.2022 10:39:33 |
|
А как парсить в Google Таблицы? Кто-то разобрался? |
|
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
Alex Smirnoff, это лучше спрашивать на форуме по гуглошитсам. Здесь вам не тут. Вот горшок пустой, он предмет простой… |
Андрей Фавунков Пользователь Сообщений: 2 |
#14 30.05.2022 19:07:43
В ютубе найди: IMPORTXML |
||
Юрий М Модератор Сообщений: 60581 Контакты см. в профиле |
Андрей Фавунков, ну что за панибратство? ( |
Кирилл Чернышев Пользователь Сообщений: 5 |
#16 01.06.2022 04:11:46
А что нужно добавить в код чтоб можно было сортировать объявления по лимиту? Изменено: Кирилл Чернышев — 01.06.2022 04:19:42 |
||||
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
Кирилл Чернышев, расшифруйте, пожалуйста, что за лимиты? Я по этому сайту не шарю, просто затащил запрос из vba выше в pq по тупому. Вот горшок пустой, он предмет простой… |
. Изменено: Кирилл Чернышев — 04.06.2022 18:27:50 |
|
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
Кирилл Чернышев, ну, вот тут Николай рассказывает и показывает как затащить параметр с листа в запрос. А дальше уже по аналогии можете подставить полученный параметр в фильтре запроса к апи. Каким образом передается в апи данный параметр от сайта к серверу смотрите в Средствах разработчика браузера. Мне сейчас немножко не до этого. Вот горшок пустой, он предмет простой… |
PooHkrd, Я правильно понимаю в эту строчку добавляю |
|
Robert A Пользователь Сообщений: 4 |
#21 01.06.2022 21:14:58
Для особа не шарющих, подскажите пожалуйста куда этот код вставлять надо?) |
||||
Коля Иванов Пользователь Сообщений: 1 |
PooHkrd, Добрый день! а как в запрос добавить способ оплаты? |
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
Кирилл Чернышев, Коля Иванов, уважаемые товарищи, еще вчера написал, нет у меня щас времени ковыряться с этим вопросом. Используйте Яндекс , там все есть. Когда увидите что именно отправляет на сервер браузер, подкорректируйте пример моего запроса под ваш случай. Вот горшок пустой, он предмет простой… |
PooHkrd, Спасибо, вчера разобрался как это сделать, все просто оказалось, в Исходном коде все есть. |
|
. Изменено: Кирилл Чернышев — 04.06.2022 18:28:37 |
|
Антон Шишков Пользователь Сообщений: 1 |
#27 04.06.2022 16:07:01
привет, как в итоге смог сделать? подскажи пожалуйста |
||
Валерий Ежов Пользователь Сообщений: 1 |
#28 05.06.2022 10:32:27
Подскажи пожалуйста, в Google Sheets через какой инструмент вставлять этот код?) |
||||
Tony Srgv Пользователь Сообщений: 6 |
Всем привет! Истратил неделю. Что делал: Прошу помочь с PowerQuery |
Tony Srgv Пользователь Сообщений: 6 |
#30 06.06.2022 18:53:54 Вопрос решил по PQ — решение было установкой обновления на PQ |
Binance is the biggest cryptocurrency exchange in the world. Use this connector in Excel to access public exchange information, as well as your personal trading data.
Exchange Info
List all available trading pairs on the exchange, as well as additional trading info for each pair.
Fields
- Symbol — symbol for the trading pair, e.g. ETHBTC
- Status — trading status for the pair — PRETRADING / TRADING / POSTTRADING / ENDOFDAY / HALT / AUCTION_MATCH /BREAK.
- Base Asset — base asset that is the quantity of a symbol, e.g. ETH.
- Base Asset Precision — number of digits
- Quote Asset — quote asset that is the price of a symbol, e.g. BTC.
- Quote Asset Precision — number of digits
- Minimum Notional — minimum notional value allowed for an order on a symbol. An order’s notional value is the price * quantity.
- Minimum Price — minimum price allowed.
- Maximum Price — maximum price allowed.
- Tick Size — intervals that a price / stop price can be increased/decreased by.
- Minimum Quantity — minimum quantity allowed.
- Maximum Quantity — maximum quantity allowed.
Order Book
List of open orders for specified symbol (e.g., ETHBTC)
Parameters
- Symbol (required) — symbol for the trading pair (e.g. ETHBTC)
- Limit — limit of orders to retrieve.
Recent Trades List
List most recent orders for a specified currency pair.
Parameters
- Symbol (required) — symbol for the trading pair (e.g. ETHBTC)
- Limit — limit of orders to retrieve
Aggregate Trades List
List compressed, aggregate trades. Trades that fill at the time, from the same order, with the same price will have the quantity aggregated.
Parameters
- Symbol (required) — symbol for the trading pair (e.g. ETHBTC)
- Limit — limit of orders to retrieve
24 hour ticker price change statistics for symbol
24 hour price change statistics for selected symbol.
Parameters
- Symbol (required) — symbol for the trading pair (e.g. ETHBTC)
24 hour ticker price change statistics (all symbols)
Same as above, but for for all available symbols.
Candlestick Data
Trading data for candlestick/k-line charts.
Parameters
- Symbol — Trading pair symbol (e.g. ETHBTC)
Generating candlestick charts with retrieved data
Follow these steps to generate candlestick charts with Excel:
- Select Open time, Volume, High, Low and Close fields. Insert the data.
- Go to Insert tab in Excel, and click the Insert Waterfall or Stock Chart. Choose Volume-Open-High-Low-Close chart.
Open orders (user data)
Retrieves a list of user’s open orders.
This connector requires API key and secret to be entered.
Parameters
- Symbol — Trading pair symbol (e.g. ETHBTC)
All orders (user data)
Retrieves a list of user’s orders (up to 500) — active, canceled, or filled.
This connector requires API key and secret to be entered.
Parameters
- Symbol (required) — Trading pair symbol (e.g. ETHBTC)
- Limit (requiredd) — Maximum number of orders to retrieve (5-500)
Account information (user data)
Retrieves user’s account information.
This connector requires API key and secret to be entered.
Fields
- Maker Commision
- Taker Commission
- Buyer Commision
- Seller Commision
- Can Trade
- Can Withdraw
- Can Deposit
Currency Balances (User data)
Lists balances for all user’s currencies.
This connector requires API key and secret to be entered.
Fields
- Time — Time when balance was checked
- Asset — Symbol for the asset (e.g. BTC)
- Free — Amount available to trade.
- Locked — Amount locked (unavailable to trade).
Access
Add from Manager
The Disqus Connector is available in the Connectors Manager in the top ribbon:
Head over to the Finance Category and install Binance:
Get API keys
To use the Connector you need a Binance API Key. You can create your API Key and Secret in your Account settings.
Contribute
This connector suite is open-sourced on GitHub.
See
Official Documentation
- Binance API
- Alpha Vantage
Resources
- Manager
Задача:
Обновление котировок в таблице Excel с 3 бирж криптовалют: binance.com, wex.nz, bitfenix.com
Описание:
У каждого из трех парсеров свой лист в файле с названием «rates».
При запуске, каждый парсер открывает файл с названием «rates», и на соответствующий лист выводит данные.
Общий парсер с названием «All Coin» просто запускает все эти три парсера по очереди.
Можно настроить под заказ аналогичные парсеры для любой валютной биржи.
Парсеры могут брать все котировки по ссылке, или же запрашивать данные по интересующим вас котировкам, беря данные (ссылки, или валютные пары) из столбца таблицы Excel
- 5798 просмотров
Введение
«Деньги любят счет» — это пословица, как никакая другая, очень точно описывает всю суть успешного распоряжения своими деньгами.
На сегодняшний день существует множество инструментов и сторонних сервисов (Blockfolio, Coinmarketcap, Cryptocompare и т.п.) для ведения учета и контроля своего инвестиционного криптопортфеля.
Также существуют инструменты для работы в Google Sheets. В таблицах есть функция GOOGLEFINANCE(«BTCUSD»), которая позволяет учитывать курс биржи в паре доллара к биткоину. А в аддонах к таблицам можно найти CRYPTOFINANCE. Эта функция опирается на данные CoinMarketCap и подтягивает их по API. Данные обновляются всякий раз, как вы открываете или перезагружаете документ.
У вышеуказанных функций есть свои недостатки, например GOOGLEFINANCE имеет сильно ограниченное число криптовалютных пар. У CRYPTOFINANCE есть большинство криптовалютных пар имеющихся на различных биржах, но есть свои ограничения по количеству запросов. Поначалу я сам пользовался сервисом CRYPTOFINANCE на платной основе. Но в процессе эксплуатации понял что нужно делать что-то своё. Чтобы было максимально гибко, просто и доступно каждому.
В этой статье я покажу как в гугл таблицах простым способом и бесплатно можно получать информацию по криптовалютным парам.
Бесплатный скрипт
Для учёта инвестиций я написал свой собственный скрипт. Скрипт циклично собирает нужную информацию с криптовалютных бирж посредством API которые они предоставляют. Сейчас скрипт поддерживает 7 криптобирж:
- Binance;
- Gateio;
- Bitfinex;
- Poloniex;
- Hotbit;
- Bittrex;
- Kucoin;
- FTX;
- Bybit;
- Huobi;
- OKX.
Логика и пример
Логика здесь предельно простая. Скрипт каждые 5 минут собирает информацию с криптовалютных бирж и обновляет данные в гугл таблице, которую я выложил в открытый доступ — crypto-fans.club coinstat. Таким образом любой желающий может получать актуальную информацию по интересующим его криптовалютам простым копированием данных.
Например, нас интересуют данные с биржи Binance.
Мы создадим новую вкладку в нашей таблице и с помощью формулы перенесём данные из общей таблицы в свою.
- В гугл таблице, где будет наш криптопортфель, создадим новую вкладку под названием cryptodataBinance (название на свое усмотрение).
- В ячейке А1 вводим формулу которая скопирует данные по бирже Binance, из вкладки общего файла, в наш файл с криптопортфелем
=IMPORTRANGE(«https://docs.google.com/spreadsheets/d/1PLLq6YTmFFMklDHedBb_tVR7NVjsQrSVqiUJW2TeuHQ/edit?usp=sharing»; «cryptodataBinance!A1:Z5000»)
Теперь при обновлении скриптом общего файла гугл таблиц, данные будут обновляться и в нашей вкладке в гугл таблице с портфелем. Это как я уже писал выше будет происходить каждые 5 минут.
- Теперь, допустим в нашем криптопортфеле мы хотим вывести значение торгового курса пары BTCBUSD. Для этого, в ячейку где хотите отображать значение курса btcbusd, вносим следующую формулу:
=INDEX(cryptodataBinance!$A$1:$Z, MATCH(«btcusdt»,cryptodataBinance!$B$1:$B,0), 3)
Данная формула ищет во вкладке cryptodataBinance, которую мы создали в нашем файле, торговую пару btcusdt по всему столбцу B. Если торговая пара в столбце найдена, то берутся данные в той же строке только из третьего столбца C, а это именно цена данной торговой пары. Очень просто. Закрепим двумя примерами, так будут выглядеть формулы для Harmony к Binance USD и Ankr к Bitcoin.
=INDEX(cryptodataBinance!$A$1:$Z, MATCH(«onebusd»,cryptodataBinance!$B$1:$B,0), 3)
=INDEX(cryptodataBinance!$A$1:$Z, MATCH(«ankrbtc»,cryptodataBinance!$B$1:$B,0), 3)
Таким образом, с помощью данной формулы мы можем выводить значение курса любой торговой пары, которая есть на Бинансе, нужно только менять в формуле торговые пары.
Пример портфеля
Вот так примерно я оформил свой портфель:
Кстати, если Вас раздражают лишние вкладки в гугл таблицах, то их можно скрыть. Кликаем правой кнопкой по вкладке cryptodataBinance и выбираем Скрыть лист.
Теперь данную вкладку можно будет найти кликнув на кнопку в левом нижнем углу.
Заключение
Данный способ хорош тем, что он требует от пользователя минимальных навыков и знаний, нет лимитов и ограничений, а главное он абсолютно бесплатен. Спасибо за внимание, всем профита.
Если вы уже начали изучать торговлю и пробуете совершать свои первые сделки на бирже Binance, то рано или поздно вы зададитесь вопросом, а как же посмотреть историю собственных сделок и ордеров, чтобы подсчитать прибыль? В данной статье я подробно разберу, как смотреть историю всех типов ордеров, а также сделать экспорт вашей торговли на бирже Binance.
Для того чтобы найти раздел со всеми типами ваших ордеров, нужно войти в аккаунт на бирже Binance и нажать на раздел Ордера.
Для удобства я оставлю прямые ссылки.
- Спотовые ордера и история торговли Binance.
- P2P ордера и история торговли Binance.
- Маржинальные ордера и история торговли Binance.
- Фьючерсные ордера и история торговли Binance.
Затем выбрать тип интересующих вас ордеров в списке.
Как сделать экспорт истории ордеров на Binance
Если вы хотите получить подробную историю ваших ордеров откройте раздел Ордера и выберите необходимый тип ордера для создания выписки, например Спотовый ордер.
После в правом углу нажмите на кнопку Экспорт истории ордеров в правом верхнем углу.
И укажите интересующий вас временной промежуток для экспорта истории ордеров.
Экспорт истории ордеров на Binance по отдельной торговой паре
Если вам необходимо сделать экспорт истории ордеров по конкретной паре, например RUB/BTC нажмите на форму Более 6 месяцев. Укажите интересующий вас временной промежуток. Укажите тип торговой пары и нажмите Сгенерировать.
Возможность получать выписки за период больше чем за полгода и по отдельной паре ограничены в количестве 5 раз в месяц.
Как сделать экспорт истории торговли на Binance
Откройте раздел История торговли(прямая ссылка).
Нажмите на кнопку Экспорт истории сделок в правом верхнем углу.
Укажите интересующий вас временной промежуток торговли и нажмите Экспорт.
Все файлы для экспорта истории будут сгенерированы за пару секунд в формате XLSX и браузер предложит вам открыть или сохранить данный файл.
Как посмотреть историю ордеров через мобильное приложение Binance📲
Если вы используете приложение Binance для смартфонов на базе IOS или Android, то для просмотра истории зайдите в свой аккаунт и откройте пункт Сделка на главной странице.
Далее, в разделе торговли нажмите на иконку файла, чтобы открыть разделы подробной истории.
В открывшемся окне используйте скрол с вкладками Открытые ордера, История ордеров, История Сделок для выбора нужного режима. Если вам необходимо установить фильтр по торговой паре или выбрать период времени — используйте иконки с фильтром и папкой для детальной настройки истории.
На этом все! Удачи и да прибудет с вами прибыль😎.
Вводная информация
В отличии от многих других бирж, Binance лимитирует не только количество запросов к API, но и «вес» запросов. Причем, это не какие-то фиксированные единицы, но целый комплекс (как они заявляют, англ). Например, если вы постоянно запрашиваете свечи но не торгуете, то ваш вес накапливается и вас могут забанить. И вообще они суровые — если вы постоянно перебиваете лучшую цену на минимальную ставку, или создаете/отменяете ордера но не покупаете и продаете и т.п. то вас настигнут санкции. Так что будьте аккуратны при тестировании ботов. Впрочем, пока я тестировал, ничего плохого не случилось, хотя я порой и жестил.
Если вы интересуетесь инвестированием в криптовалюту и хотите уберечься от частых ошибок и потери денег, рекомендую пройти БЕСПЛАТНЫЙ 3-х дневный марафон «Криптоинвестиции» от Школы Практического Инвестрирования. На марафоне вы узнаете актуальные стратегии и инструменты для инвестирования в крипту!
Если биржа захочет вам намекнуть, что пора бы снизить пыл, она вернет 429 ответ сервера. Если вы будете игнорировать этот ответ и ломиться в закрытую дверь, то вас забанят по IP на срок от 2 минут до 3 дней.
Подключение к API биржи идет через https://api.binance.com, для авторизованных запросов нужно отправлять ключ в заголовке X-MBX-APIKEY, и подписывать тело запроса SHA256.
Что бы вы не заморачивались с этим, я написал код, который позволяет все указанные запросы выполнять. Для его работы нужно установить Python версии 3.6+ с официального сайта, потом в командной строке выполнить pip install requests. Создайте папку (для удобства), создайте новый файл binance_api.py, и вставьте туда этот код:
import ssl import time import json import urllib import hmac, hashlib import requests from urllib.parse import urlparse, urlencode from urllib.request import Request, urlopen class Binance(): methods = { # public methods ‘ping’: {‘url’:’api/v1/ping’, ‘method’: ‘GET’, ‘private’: False}, ‘time’: {‘url’:’api/v1/time’, ‘method’: ‘GET’, ‘private’: False}, ‘exchangeInfo’: {‘url’:’api/v1/exchangeInfo’, ‘method’: ‘GET’, ‘private’: False}, ‘depth’: {‘url’: ‘api/v1/depth’, ‘method’: ‘GET’, ‘private’: False}, ‘trades’: {‘url’: ‘api/v1/trades’, ‘method’: ‘GET’, ‘private’: False}, ‘historicalTrades’: {‘url’: ‘api/v1/historicalTrades’, ‘method’: ‘GET’, ‘private’: False}, ‘aggTrades’: {‘url’: ‘api/v1/aggTrades’, ‘method’: ‘GET’, ‘private’: False}, ‘klines’: {‘url’: ‘api/v1/klines’, ‘method’: ‘GET’, ‘private’: False}, ‘ticker24hr’: {‘url’: ‘api/v1/ticker/24hr’, ‘method’: ‘GET’, ‘private’: False}, ‘tickerPrice’: {‘url’: ‘api/v3/ticker/price’, ‘method’: ‘GET’, ‘private’: False}, ‘tickerBookTicker’: {‘url’: ‘api/v3/ticker/bookTicker’, ‘method’: ‘GET’, ‘private’: False}, # private methods ‘createOrder’: {‘url’: ‘api/v3/order’, ‘method’: ‘POST’, ‘private’: True}, ‘testOrder’: {‘url’: ‘api/v3/order/test’, ‘method’: ‘POST’, ‘private’: True}, ‘orderInfo’: {‘url’: ‘api/v3/order’, ‘method’: ‘GET’, ‘private’: True}, ‘cancelOrder’: {‘url’: ‘api/v3/order’, ‘method’: ‘DELETE’, ‘private’: True}, ‘openOrders’: {‘url’: ‘api/v3/openOrders’, ‘method’: ‘GET’, ‘private’: True}, ‘allOrders’: {‘url’: ‘api/v3/allOrders’, ‘method’: ‘GET’, ‘private’: True}, ‘account’: {‘url’: ‘api/v3/account’, ‘method’: ‘GET’, ‘private’: True}, ‘myTrades’: {‘url’: ‘api/v3/myTrades’, ‘method’: ‘GET’, ‘private’: True}, # wapi ‘depositAddress’: {‘url’: ‘wapi/v3/depositAddress.html’, ‘method’:’GET’, ‘private’:True}, ‘withdraw’: {‘url’: ‘wapi/v3/withdraw.html’, ‘method’:’POST’, ‘private’:True}, ‘depositHistory’: {‘url’: ‘wapi/v3/depositHistory.html’, ‘method’:’GET’, ‘private’:True}, ‘withdrawHistory’: {‘url’: ‘wapi/v3/withdrawHistory.html’, ‘method’:’GET’, ‘private’:True}, ‘assetDetail’: {‘url’: ‘wapi/v3/assetDetail.html’, ‘method’:’GET’, ‘private’:True}, ‘tradeFee’: {‘url’: ‘wapi/v3/tradeFee.html’, ‘method’:’GET’, ‘private’:True}, ‘accountStatus’: {‘url’: ‘wapi/v3/accountStatus.html’, ‘method’:’GET’, ‘private’:True}, ‘systemStatus’: {‘url’: ‘wapi/v3/systemStatus.html’, ‘method’:’GET’, ‘private’:True}, ‘assetDust’: {‘url’: ‘sapi/v1/asset/dust’, ‘method’:’POST’, ‘private’:True}, ‘dustLog’: {‘url’: ‘wapi/v3/userAssetDribbletLog.html’, ‘method’:’GET’, ‘private’:True}, ‘assetAssetDividend’: {‘url’: ‘sapi/v1/asset/assetDividend’, ‘method’:’GET’, ‘private’:True}, #sapi ‘marginTransfer’: {‘url’: ‘sapi/v1/margin/transfer’, ‘method’: ‘POST’, ‘private’:True}, ‘marginLoan’: {‘url’: ‘sapi/v1/margin/loan’, ‘method’: ‘POST’, ‘private’: True}, ‘marginLoanGet’: {‘url’: ‘sapi/v1/margin/loan’, ‘method’: ‘GET’, ‘private’: True}, ‘marginRepay’: {‘url’: ‘sapi/v1/margin/repay’, ‘method’: ‘POST’, ‘private’: True}, ‘marginRepayGet’: {‘url’: ‘sapi/v1/margin/repay’, ‘method’: ‘GET’, ‘private’: True}, ‘marginCreateOrder’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘POST’, ‘private’:True}, ‘marginCancelOrder’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘DELETE’, ‘private’:True}, ‘marginOrderInfo’: {‘url’: ‘sapi/v1/margin/order’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAccount’: {‘url’: ‘sapi/v1/margin/account’, ‘method’: ‘POST’, ‘private’:True}, ‘marginOpenOrders’: {‘url’: ‘sapi/v1/margin/openOrders’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAllOrders’: {‘url’: ‘sapi/v1/margin/allOrders’, ‘method’: ‘GET’, ‘private’:True}, ‘marginAsset’: {‘url’: ‘sapi/v1/margin/asset’, ‘method’: ‘POST’, ‘private’:True}, ‘marginPair’: {‘url’: ‘sapi/v1/margin/pair’, ‘method’: ‘POST’, ‘private’:True}, ‘marginPriceIndex’: {‘url’: ‘sapi/v1/margin/priceIndex’, ‘method’: ‘POST’, ‘private’:True}, ‘marginMyTrades’: {‘url’: ‘sapi/v1/margin/myTrades’, ‘method’: ‘GET’, ‘private’:True}, ‘marginMaxBorrowable’: {‘url’: ‘sapi/v1/margin/maxBorrowable’, ‘method’: ‘GET’, ‘private’:True}, ‘marginmaxTransferable’: {‘url’: ‘sapi/v1/margin/maxTransferable’, ‘method’: ‘GET’, ‘private’:True}, #futures ‘futuresExchangeInfo’: {‘url’: ‘fapi/v1/exchangeInfo’, ‘method’: ‘GET’, ‘private’: False, ‘futures’: True}, ‘futuresKlines’: {‘url’: ‘fapi/v1/klines’, ‘method’: ‘GET’, ‘private’: False, ‘futures’: True}, ‘futuresCreateOrder’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘POST’, ‘private’: True, ‘futures’: True}, ‘futuresAccount’: {‘url’: ‘fapi/v1/account’, ‘method’: ‘POST’, ‘private’: True, ‘futures’: True}, ‘futuresBalance’: {‘url’: ‘fapi/v1/balance’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresSymbolPriceTicker’: {‘url’: ‘fapi/v1/ticker/price’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresOrderInfo’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘GET’, ‘private’: True, ‘futures’: True}, ‘futuresCancelOrder’: {‘url’: ‘fapi/v1/order’, ‘method’: ‘DELETE’, ‘private’: True, ‘futures’: True}, } def __init__(self, API_KEY, API_SECRET): self.API_KEY = API_KEY self.API_SECRET = bytearray(API_SECRET, encoding=’utf-8′) self.shift_seconds = 0 def __getattr__(self, name): def wrapper(*args, **kwargs): kwargs.update(command=name) return self.call_api(**kwargs) return wrapper def set_shift_seconds(self, seconds): self.shift_seconds = seconds def call_api(self, **kwargs): command = kwargs.pop(‘command’) base_url =’https://api.binance.com/’ if self.methods[command].get(‘futures’): base_url = ‘https://fapi.binance.com/’ api_url = base_url + self.methods[command][‘url’] payload = kwargs headers = {} payload_str = urllib.parse.urlencode(payload) if self.methods[command][‘private’]: payload.update({‘timestamp’: int(time.time() + self.shift_seconds — 1) * 1000}) payload_str = urllib.parse.urlencode(payload).encode(‘utf-8’) sign = hmac.new( key=self.API_SECRET, msg=payload_str, digestmod=hashlib.sha256 ).hexdigest() payload_str = payload_str.decode(«utf-8») + «&signature=»+str(sign) headers = {«X-MBX-APIKEY»: self.API_KEY, «Content-Type»:»application/x-www-form-urlencoded»} if self.methods[command][‘method’] == ‘GET’ or self.methods[command][‘url’].startswith(‘sapi’): api_url += ‘?’ + payload_str response = requests.request(method=self.methods[command][‘method’], url=api_url, data=»» if self.methods[command][‘method’] == ‘GET’ else payload_str, headers=headers) if ‘code’ in response.text: raise Exception(response.text) return response.json()
Для тестирования методов, создайте в этой же папке второй файл, например, binance_test.py, туда вставьте вот такой код (подставьте свои API ключи):
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘account’, bot.account())
(Или возьмите с гитхаба)
После этого код можно запускать. К примеру, если вы только установили Python и не знаете, что делать, найдите редактор Idle (он устанавливается вместе с питоном), в нем File -> Open, откройте файл binance_test.py и нажмите F5. Код, представленный выше, вернет информацию по вашему аккаунту — подробности ниже.
Еще немного общей информации: практически во всех подписанных запросах необходимо указывать параметр timestamp — это текущее unix-время в милиосекундах. Но, так как некоторые сети бывают перегружены, то ваш запрос может заблудиться и придти позже. Поэтому биржа предоставляет вам временное окно (по умолчанию 5000 милисекунд). Если у вас запросы не успевают придти в это окно, вы можете его расширить с помощью параметра recvWindow. Но, думаю, это мало кому понадобится.
Настройка бот Binance
Настроек не так много, в API_KEY и API_SECRET нужно прописать ключи, которые вы получили на бирже.
В пары нужно прописать соответственно пары, на которые планируете торговать, максимальную сумму, которую планируете тратить, и желаемый процент прибыли. С этим есть некоторый момент, т.к. вы платите комисиию BNB. Я советую ставить 0.003 (0.3%) и выше, но если у вас есть возможность дешево получать BNB, то можно и меньше.
BUY_LIFE_TIME_SEC – через сколько отменять ордер на покупку (если он не исполнен), в секундах.
STOCK_FEE – комиссия биржи, если вдруг решите торговать без BNB.
USE_BNB_FEES = True – если торгуете с BNB, False – в противном случае.
Источник:
Публичные запросы
Проверка связи — /api/v1/ping
Метод для проверки работы API. Возвращает пустой словарь
{}
Ссылка для просмотра в браузере https://api.binance.com/api/v1/ping. Вес — 1 Код для проверки:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.ping())
Получение времени биржи — /api/v1/time
Ссылка для просмотра в браузере https://api.binance.com/api/v1/time Вес — 1 Возвращает словарь с текущим временем:
{ «serverTime»: 1499827319559 }
Код для проверки:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.time())
Настройки и лимиты биржи — /api/v1/exchangeInfo
Ссылка для просмотра в браузере https://api.binance.com/api/v1/exchangeInfo Вес — 1 Возвращает структуру данных:
{ «timezone»: «UTC», «serverTime»: 1508631584636, «rateLimits»: [{ «rateLimitType»: «REQUESTS», «interval»: «MINUTE», «limit»: 1200 }, { «rateLimitType»: «ORDERS», «interval»: «SECOND», «limit»: 10 }, { «rateLimitType»: «ORDERS», «interval»: «DAY», «limit»: 100000 } ], «exchangeFilters»: [], «symbols»: [{ «symbol»: «ETHBTC», «status»: «TRADING», «baseAsset»: «ETH», «baseAssetPrecision»: 8, «quoteAsset»: «BTC», «quotePrecision»: 8, «orderTypes»: [«LIMIT», «MARKET»], «icebergAllowed»: false, «filters»: [{ «filterType»: «PRICE_FILTER», «minPrice»: «0.00000100», «maxPrice»: «100000.00000000», «tickSize»: «0.00000100» }, { «filterType»: «LOT_SIZE», «minQty»: «0.00100000», «maxQty»: «100000.00000000», «stepSize»: «0.00100000» }, { «filterType»: «MIN_NOTIONAL», «minNotional»: «0.00100000» }] }] }
Ключ rateLimits ведет на массив с лимитами — сколько запросов в секунду/минуту/день можно делать. Ключ symbols содержит настройки для каждой пары — рассмотрим одну, ETHBTC
{ «symbol»: «ETHBTC», «status»: «TRADING», «baseAsset»: «ETH», «baseAssetPrecision»: 8, «quoteAsset»: «BTC», «quotePrecision»: 8, «orderTypes»: [ «LIMIT», «LIMIT_MAKER», «MARKET», «STOP_LOSS_LIMIT», «TAKE_PROFIT_LIMIT» ], «icebergAllowed»: true, «filters»: [ { «filterType»: «PRICE_FILTER», «minPrice»: «0.00000100», «maxPrice»: «100000.00000000», «tickSize»: «0.00000100» }, { «filterType»: «LOT_SIZE», «minQty»: «0.00100000», «maxQty»: «100000.00000000», «stepSize»: «0.00100000» }, { «filterType»: «MIN_NOTIONAL», «minNotional»: «0.00100000» } ] }
symbol — непосредственно пара status — TRADING -разрешена торговля baseAsset — базовая валюта baseAssetPrecision — требуемое количество символов базовой валюты после запятой при создании ордера (для цены и количества) quoteAsset — квотируемая валюта quotePrecision — требуемое количество символов квотируемой валюты после запятой при создании ордера (для цены и количества) «orderTypes»: [ «LIMIT», «LIMIT_MAKER», «MARKET», «STOP_LOSS_LIMIT», «TAKE_PROFIT_LIMIT» ] — допустимые виды ордеров по паре icebergAllowed — разрешено ли создание айсбергов (ордеров с невидимой частью) filters — ограничение ордеров PRICE_FILTER — ограничение цены создаваемого ордера. Цена ордера должна быть в диапазоне min_price и max_price, и шаг торговли должен быть кратен tickSize. Да да, тут нельзя ставить ордера с произвольной ценой. LOT_SIZE — ограничение объема создаваемого ордера. Объем должен быть в диапазоне minQty и maxQty, и быть кратен stepSize. MIN_NOTIONAL — итоговая сумма ордера (объем*цена) должна быть выше minNotional. Код для проверки:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(bot.exchangeInfo())
Открытые ордера на бирже — /api/v1/depth
Метод позволяет получить книгу ордеров. Принимает параметры: Обязательные: symbol — пара Необязательные: limit — кол-во возвращаемых записей от 5 до 1000 (по умолчанию 100). Допустимые значения: 5, 10, 20, 50, 100, 500, 1000. Еще можно указать 0, но он может вернуть большое кол-во данных. Вес зависит от параметра limit. При лимите от 5 до 100 вес будет равен 1. Для параметра 500 вес составит 5. Для параметра 1000 вес будет 10. Ссылка для просмотра в браузере: https://api.binance.com/api/v1/depth?symbol=ETHBTC Возвращает значения:
{ «lastUpdateId»: 1027024, «bids»: [ [ «4.00000000», // PRICE «431.00000000», // QTY [] // Ignore. ] ], «asks»: [ [ «4.00000200», «12.00000000», [] ] ] }
bids — это списки цен/объемов на покупку, asks — на продажу. Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘depth’, bot.depth( symbol=’BNBBTC’, limit=5 ))
Последние (чужие) сделки — /api/v1/trades
Принимает параметры: Обязательные: symbol — пара Необязательные: limit — кол-во возвращаемых записей (максимум 500, по умолчанию 500). Вес — 1 Ссылка для просмотра в браузере: https://api.binance.com/api/v1/trades?symbol=ETHBTC Пример ответа:
[ { «id»: 28457, «price»: «4.00000100», «qty»: «12.00000000», «time»: 1499865549590, «isBuyerMaker»: true, «isBestMatch»: true } ]
id — id сделки price — цена qty — количество time — время сделки isBuyerMaker — была ли покупка по указанной покупателем цене, isBestMatch — была ли встречная сделка Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘trades’, bot.trades( symbol=’BNBBTC’, limit=1 ))
Сжатая история сделок — /api/v1/aggTrades
Метод позволяет получить суммарную историю сделок. Сделки, выполненные в одно время по одному ордеру и по одной цене будут представлены одной строкой с объединенным количеством. Вес — 1 Ссылка для просмотра в браузере: https://api.binance.com/api/v1/aggTrades?symbol=ETHBTC Принимает параметры: Обязательные: symbol — пара Необязательные: fromID — показывать начиная со сделки № (включительно) startTime — начиная с какого времени (включительно) endTime — заканчивая каким временем (включительно) limit — Кол-во записей (максимум 500, по умолчанию 500) Возвращает данные:
[ { «a»: 26129, // tradeId строки «p»: «0.01633102», // Цена «q»: «4.70443515», // Количество «f»: 27781, // Первая tradeId «l»: 27781, // Последняя tradeId «T»: 1498793709153, // Время «m»: true, // Was the buyer the maker? «M»: true // Was the trade the best price match? } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘aggTrades’, bot.aggTrades( symbol=’BNBBTC’, limit=1 ))
Данные по свечам – /api/v1/klines
Вес – 1 Ссылка для просмотра в браузере https://api.binance.com/api/v1/klines?symbol=LTCBTC&interval=5m Параметры: Обязательные: symbol – пара interval – период свечи Допустимые интервалы: • 1m // 1 минута • 3m // 3 минуты • 5m // 5 минут • 15m // 15 минут • 30m // 30 минут • 1h // 1 час • 2h // 2 часа • 4h // 4 часа • 6h // 6 часов • 8h // 8 часов • 12h // 12 часов • 1d // 1 день • 3d // 3 дня • 1w // 1 неделя • 1M // 1 месяц
Необязательные: limit – кол-во свечей (максимум 500, по умолчанию 500) startTime – время начала построения endTime – окончание периода Если не указаны параметры startTime и endTime, то возвращаются самые последние свечи. Пример ответа:
[ [ 1499040000000, // Время открытия «0.01634790», // Цена открытия (Open) «0.80000000», // Максимальная цена (High) «0.01575800», // Минимальная цена (Low) «0.01577100», // Цена закрытия (Close) «148976.11427815», // Объем 1499644799999, // Время закрытия «2434.19055334», // Объем квотируемой валюты 308, // Кол-во сделок «1756.87402397», // Taker buy base asset volume «28.46694368», // Taker buy quote asset volume «17928899.62484339» // Ignore ] ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘klines’, bot.klines( symbol=’BNBBTC’, interval=’5m’, limit=1 ))
Статистика за 24 часа — /api/v1/ticker/24hr
Вес – 1, если указана пара, иначе вес равен (количеству всех торгуемых пар)/2. Ссылка для просмотра в браузере: https://api.binance.com/api/v1/ticker/24hr?symbol=BNBBTC Параметры: Необязательные: symbol – пара Если symbol не указан, возвращаются данные по всем парам. В этом случае, считается, что вы сделали столько запросов к бирже, сколько вернулось пар. Пример ответа:
{ «symbol»: «BNBBTC», // пара «priceChange»: «-94.99999800», // изменение цены за сутки «priceChangePercent»: «-95.960», // изменение цены за сутки % «weightedAvgPrice»: «0.29628482», //Средневзвешенная цена «prevClosePrice»: «0.10002000», // Предыдущая цена закрытия «lastPrice»: «4.00000200», // Последняя цена «lastQty»: «200.00000000», // Последний объем «bidPrice»: «4.00000000», // Цена покупки «askPrice»: «4.00000200», // Цена продажи «openPrice»: «99.00000000», // Цена открытия «highPrice»: «100.00000000», // Самая высокая цена «lowPrice»: «0.10000000», // Самая низкая цена «volume»: «8913.30000000», // Объем торгов базовой валюты «quoteVolume»: «15.30000000», // Объем торгов квотируемой «openTime»: 1499783499040, // Время открытия «closeTime»: 1499869899040, // Время закрытия «fristId»: 28385, // Id первой сделки «lastId»: 28460, // Id последней сделки «count»: 76 // Кол-во сделок }
Если пар несколько, то такие словари вкладываются в массив, вот так:
[ { «symbol»: «BNBBTC», … }, { «symbol»: «LTCBTC», … }, ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/24hr’, bot.ticker24hr( symbol=’BNBBTC’ ))
Последняя цена по паре (или парам) — /api/v3/ticker/price
Вес — 1 Параметры: Необязательные: symbol – пара Если параметр symbol не указан, то возвращаются цены по всем парам. Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/price?symbol=BNBBTC Пример ответа:
{ «symbol»: «LTCBTC», «price»: «4.00000200» }
Или (если не указан параметр)
[ { «symbol»: «LTCBTC», «price»: «4.00000200» }, { «symbol»: «ETHBTC», «price»: «0.07946600» } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/price’, bot.tickerPrice( symbol=’BNBBTC’ ))
Лучшие цены покупки/продажи — /api/v3/ticker/bookTicker
Вес 1 Параметры: Необязательные: symbol – пара Если параметр symbol не указан, возвращаются данные по всем парам. Ссылка для просмотра в браузере: https://api.binance.com/api/v3/ticker/bookTicker?symbol=BNBBTC Пример ответа:
{ «symbol»: «LTCBTC», «bidPrice»: «4.00000000», //Лучшая цена покупки «bidQty»: «431.00000000», // Кол-во к покупке «askPrice»: «4.00000200», // Лучшая цена продажи «askQty»: «9.00000000» // Кол-во к продаже }
Или (если не указан параметр):
[ { «symbol»: «LTCBTC», «bidPrice»: «4.00000000», «bidQty»: «431.00000000», «askPrice»: «4.00000200», «askQty»: «9.00000000» }, { «symbol»: «ETHBTC», «bidPrice»: «0.07946700», «bidQty»: «9.00000000», «askPrice»: «100000.00000000», «askQty»: «1000.00000000» } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘ticker/bookTicker’, bot.tickerBookTicker( symbol=’BNBBTC’ ))
Баттлы и турниры
Периодически Binance Futures запускает турниры, суть которых заключается в награждении наиболее активных трейдеров на платформе. Так, в сентябре-октябре было разыграно 1 600 000$ в BNB в турнире по общей командной прибыли. Команда с самым большим объемом торгов за месяц получила приз в размере 5000$ в BNB.
Также Binance запустила новую функцию онлайн-баттлов. Первой торговой парой, запущенной в рамках этой функции, стал бессрочный контракт BTCUSD. Пользователь открывает позицию и соревнуется с другими пользователями, чтобы получить очки. Если он ожидает, что цена через 5 минут увеличится, то выбирает вариант лонг, чтобы обозначить свое мнение. И наоборот, если он ожидает падения стоимости, то выбирает шорт. Как только будет подобран противник, баттл начнется. Результатами боя можно поделиться с друзьями, также они отображаются в таблице лидеров.
Авторизованные запросы:
Создание ордера — /api/v3/order
Для тех, кто будет писать свою библиотеку – обратите внимание, что адрес один и тот же /api/v3/order, но отличается метод – если отправлять данные через POST, это будет создание ордера, через GET – получение информации об ордере, DELETE – отмена ордера. Параметры, соответственно, разные.
Вес – 1 Метод: POST Параметры: Обязательные: symbol – пара side – тип ордера (BUY либо SELL) type – тип ордера (LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT, LIMIT_MAKER) quantity – количество к покупке timestamp – текущее время в миллисекундах (в коде, выложенном здесь, проставляется автоматически, указывать не надо. Необязательные: timeInForce – (GTC, IOC, FOK). По умолчанию GTC. Расшифрую. GTC (Good Till Cancelled) – ордер будет висеть до тех пор, пока его не отменят. IOC (Immediate Or Cancel) – Будет куплено то количество, которое можно купить немедленно. Все, что не удалось купить, будет отменено. FOK (Fill-Or-Kill) – Либо будет куплено все указанное количество немедленно, либо не будет куплено вообще ничего, ордер отменится.
price – цена newClientOrderId – Идентификатор ордера, который вы сами придумаете (строка). Если не указан, генерится автоматически. stopPrice – стоп-цена, можно указывать если тип ордера STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, или TAKE_PROFIT_LIMIT. icebergQty – кол-во для ордера-айсберга, можно указывать, если тип ордера LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT recvWindow – кол-во миллисекунд, которое прибавляется к timestamp и формирует окно действия запроса (см. выше). По умолчанию 5000. newOrderRespType –какую информацию возвращать, если удалось создать ордер. Допустимые значения ACK, RESULT, или FULL, по умолчанию RESULT. Подробности ниже.
В зависимости от типа ордера, некоторые поля становятся обязательными:
Тип ордера Обязательные поля LIMIT timeInForce, quantity, price MARKET quantity STOP_LOSS quantity, stopPrice STOP_LOSS_LIMIT timeInForce, quantity, price, stopPrice TAKE_PROFIT quantity, stopPrice TAKE_PROFIT_LIMIT timeInForce, quantity, price, stopPrice LIMIT_MAKER quantity, price
Ордера типа LIMIT_MAKER – это ордера типа обычного LIMIT, но они отклонятся, если ордер при выставлении может выполниться по рынку. Другими словами, вы никогда не будете тейкером, ордер либо выставится выше/ниже рынка, либо не выставится вовсе. Ордера типа STOP_LOSS и TAKE_PROFIT исполнятся по рынку (ордер типа MARKET), как только будет достигнута цена stopPrice. Любые ордера LIMIT или LIMIT_MAKER могут формировать ордер-айсберг, установив параметр icebergQty. Если установлен параметр icebergQty, то параметр timeInForce ОБЯЗАТЕЛЬНО должен иметь значение GTC.
Для того, что бы выставлять цены, противоположные текущим для ордеров типов MARKET и LIMIT: Цена выше рыночной: STOP_LOSS BUY, TAKE_PROFIT SELL Цена ниже рыночной: STOP_LOSS SELL, TAKE_PROFIT BUY
При создании ордера вернется ответ, в зависимости от параметра newOrderRespType:
newOrderRespType == ACK:
{ «symbol»: «BTCUSDT», «orderId»: 28, «clientOrderId»: «6gCrw2kRUAF9CvJDGP16IP», «transactTime»: 1507725176595 }
newOrderRespType == RESULT:
{ «symbol»: «BTCUSDT», «orderId»: 28, «clientOrderId»: «6gCrw2kRUAF9CvJDGP16IP», «transactTime»: 1507725176595, «price»: «0.00000000», «origQty»: «10.00000000», «executedQty»: «10.00000000», «status»: «FILLED», «timeInForce»: «GTC», «type»: «MARKET», «side»: «SELL» }
newOrderRespType == FULL:
{ «symbol»: «BTCUSDT», «orderId»: 28, «clientOrderId»: «6gCrw2kRUAF9CvJDGP16IP», «transactTime»: 1507725176595, «price»: «0.00000000», «origQty»: «10.00000000», «executedQty»: «10.00000000», «status»: «FILLED», «timeInForce»: «GTC», «type»: «MARKET», «side»: «SELL», «fills»: [ { «price»: «4000.00000000», «qty»: «1.00000000», «commission»: «4.00000000», «commissionAsset»: «USDT» }, { «price»: «3999.00000000», «qty»: «5.00000000», «commission»: «19.99500000», «commissionAsset»: «USDT» }, { «price»: «3998.00000000», «qty»: «2.00000000», «commission»: «7.99600000», «commissionAsset»: «USDT» }, { «price»: «3997.00000000», «qty»: «1.00000000», «commission»: «3.99700000», «commissionAsset»: «USDT» }, { «price»: «3995.00000000», «qty»: «1.00000000», «commission»: «3.99500000», «commissionAsset»: «USDT» } ] }
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) # Создать отложенный ордер на покупку 0.1 LTC за BTC # По курсу 0.1 print(‘createOrder’, bot.createOrder( symbol=’LTCBTC’, recvWindow=5000, side=’BUY’, type=’LIMIT’, timeInForce=’GTC’, quantity=0.1, price=0.1 ))
Тестирование создания ордера: /api/v3/order/test
Вес: 1 Метод: POST Метод позволяет протестировать создание ордера – например, проверить, правильно ли настроены временные рамки. По факту такой ордер никогда не будет исполнен, и средства на его создание затрачены не будут. Параметры такие же, как при создании ордера. Возвращает пустой словарь:
{}
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) # Протестировать отложенный ордер на покупку 0.1 LTC за BTC # По курсу 0.1 print(‘testOrder’, bot.testOrder( symbol=’LTCBTC’, recvWindow=5000, side=’BUY’, type=’LIMIT’, timeInForce=’GTC’, quantity=0.1, price=0.1 ))
Получить информацию по созданному ордеру — /api/v3/order
Вес – 1 Метод – GET Параметры: Обязательные: symbol – пара orderId – ID ордера, назначенный биржей ИЛИ origClientOrderId – ID ордера, назначенный пользователем или сгенерированный (см. создание ордера) Либо orderId либо origClientOrderId необходимо предоставить. timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Необязательные: recvWindow – окно валидности запроса.
Возвращаемое значение:
{ «symbol»: «LTCBTC», «orderId»: 1, «clientOrderId»: «myOrder1», «price»: «0.1», «origQty»: «1.0», // исходное указанное кол-во на покупку/продажу «executedQty»: «0.0», // текущее исполненное кол-во «status»: «NEW», «timeInForce»: «GTC», «type»: «LIMIT», «side»: «BUY», «stopPrice»: «0.0», «icebergQty»: «0.0», «time»: 1499827319559, «isWorking»: true }
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘orderInfo’, bot.orderInfo( orderId=123123, symbol=’LTCBTC’, ))
Отмена ордера — /api/v3/order
Вес – 1 Метод – DELETE Параметры: Обязательные: symbol – пара
orderId – ID ордера, назначенный биржей ИЛИ origClientOrderId – ID ордера, назначенный пользователем или сгенерированный (см. создание ордера) Либо orderId либо origClientOrderId необходимо предоставить.
timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Не обязательные: newClientOrderId – позволяет однозначно определить отмену, если не указано, генерируется автоматически recvWindow – окно валидности запроса. Возвращает:
{ «symbol»: «LTCBTC», «origClientOrderId»: «myOrder1», «orderId»: 1, «clientOrderId»: «cancelMyOrder1» }
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘cancelOrder’, bot.cancelOrder( orderId=123123, symbol=’LTCBTC’, ))
Текущие открытые пользователем ордера — /api/v3/openOrders
Вес – 1 если указана пара, либо (количество всех открытых для торгов пар) / 2. Метод – GET Параметры: Обязательные: timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Не обязательные: Не обязательные: symbol – пара recvWindow – окно валидности запроса.
Если параметр symbol не указан, возвращаются все открытые ордера по всем парам в массиве. В этом случае количество запросов к API считается равным количеству открытых для торговли пар. Возвращает:
[ { «symbol»: «LTCBTC», «orderId»: 1, «clientOrderId»: «myOrder1», «price»: «0.1», «origQty»: «1.0», «executedQty»: «0.0», «status»: «NEW», «timeInForce»: «GTC», «type»: «LIMIT», «side»: «BUY», «stopPrice»: «0.0», «icebergQty»: «0.0», «time»: 1499827319559, «isWorking»: trueO } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) # Все открытые ордера по паре print(‘openOrders’, bot.openOrders( symbol=’LTCBTC’, )) # Все открытые ордера по всем парам print(‘openOrders’, bot.openOrders())
Все ордера пользователя вообще — /api/v3/allOrders
Метод позволяет получить вообще все ордера пользователя – открытые, исполненные или отмененные. Вес – 5 Метод – GET Параметры: Обязательные: symbol – пара timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Не обязательные: orderId – Если указан, то вернутся все ордера, которые >= указанному. Если не указан, вернутся самые последние. limit – кол-во возвращаемых ордеров (максимум 500, по умолчанию 500) recvWindow – окно валидности запроса. Возвращает:
[ { «symbol»: «LTCBTC», «orderId»: 1, «clientOrderId»: «myOrder1», «price»: «0.1», «origQty»: «1.0», «executedQty»: «0.0», «status»: «NEW», «timeInForce»: «GTC», «type»: «LIMIT», «side»: «BUY», «stopPrice»: «0.0», «icebergQty»: «0.0», «time»: 1499827319559, «isWorking»: true } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) # Все ордера по паре print(‘allOrders’, bot.allOrders( symbol=’LTCBTC’, ))
Информация по аккаунту — /api/v3/account
Вес – 5 Метод – GET Параметры: Обязательные: timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Не обязательные: recvWindow – окно валидности запроса. Возвращает:
{ «makerCommission»: 15, «takerCommission»: 15, «buyerCommission»: 0, «sellerCommission»: 0, «canTrade»: true, «canWithdraw»: true, «canDeposit»: true, «updateTime»: 123456789, «balances»: [ { «asset»: «BTC», «free»: «4723846.89208129», «locked»: «0.00000000» }, { «asset»: «LTC», «free»: «4763368.68006011», «locked»: «0.00000000» } ] }
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘account’, bot.account())
Список сделок пользователя — /api/v3/myTrades
Метод позволяет получить историю торгов авторизованного пользователя по указанной паре. Вес – 5. Параметры: Обязательные: symbol – пара timestamp – текущее время (в представленном коде проставляется автоматически, указывать не надо) Не обязательные: limit – кол-во возвращаемых сделок (максимум 500, по умолчанию 500) fromId – с какой сделки начинать вывод. По умолчанию выводятся самые последние. recvWindow – окно валидности запроса. Возвращает:
[ { «id»: 28457, «orderId»: 100234, «price»: «4.00000100», «qty»: «12.00000000», «commission»: «10.10000000», «commissionAsset»: «BNB», «time»: 1499865549590, «isBuyer»: true, «isMaker»: false, «isBestMatch»: true } ]
Пример кода:
from binance_api import Binance bot = Binance( API_KEY=’D7…Ejj’, API_SECRET=’gwQ…u3A’ ) print(‘myTrades’, bot.myTrades( symbol=’LTCBTC’ ))
Свечи на Бинанс
С первого раза непонятно, как включить на этой криптовалютной бирже из Гонконга график в японских свечах (japan candlestick), так как по умолчанию Binance отображает линейный график. Это легко сделать в пару кликов вот таким образом:
Кликните на любой таймфрейм, например — на 15 минут, и вместо линейного графика включатся свечи.
Поддерживаемые коины.
Бинанс ориентируется на мнение пользователей, поэтому регулярно добавляет (на языке трейдеров — листит) новые криптовалюты.
Здесь есть как совсем новые, так и уже набирающие популярность монеты. Поэтому если захотите купить криптовалюту Qtum, Pivx, BAT, Waves, IOTA и десятки других — больше нет смысла делать это на разных кошкльках, обменниках и биржах, всё есть на BINANCE!
• Здесь в графике торгов можно включить МИНУТНЫЕ свечи. Криптотрейдеры оценят по достоинству! • У Бинанс – отличное приложение для iOs и Android, которое можно настроить на вход по отпечатку пальцев (fingerprint → Touch ID)
Перейти на Binance!
WAPI
Ввод и вывод средств
Подробное описание будет чуть позже, пока что примеры с комментариями
from binance_api import Binance bot = Binance( API_KEY=’D7F…Ejj’, API_SECRET=’gwQ…u3A’ ) # Получение адреса для депозита print(bot.depositAddress(asset=’BTC’)) # Вывод средств print(bot.withdraw(asset=’XRP’, address=’1wsdsr234234242′, amount=12)) # История пополнений print(bot.depositHistory(asset=’BTC’)) print(bot.depositHistory()) # История выводов print(bot.withdrawHistory()) print(bot.withdrawHistory(asset=’ETH’)) # Узнать комиссию за вывод print(bot.withdrawFee(asset=’BTC’)) # Состояние аккаунта print(bot.accountStatus()) # Состояние биржи print(bot.systemStatus())
Русскоязычная поддержка
Многие новички считают информацию о наличии ру-саппорта на Бинанс неверной. На самом деле они просто не утруждают себя поисками
Курсы криптовалют меняются практически каждую минуту, причем некоторые колеблются не на один десяток или даже сотню процентов. Иногда требуется отследить текущий курс определенной криптовалюты прямо в Google Таблицах, чтобы выполнить необходимые расчеты, посчитать доходы или убытки.
В рамках этой статьи я расскажу, как справиться с этой задачей двумя разными способами.
Метод 1: Использование функции GOOGLEFINANCE
Использование функции GOOGLEFINANCE уже описано в другой моей статье – в ней рассказывается о конвертировании денежных единиц, не связанных с криптовалютой. Вы можете использовать ее и для биткоина или других токенов, о которых знает Гугл. Для этого можете ввести в поисковике запрос, например, «SHIB to RUB». Если появится форма от Google, значит, этот способ можно использовать для конкретной криптовалюты.
Вам будет достаточно узнать сокращение и в формуле указать, например, BTCRUB, чтобы получить соответствующий курс, который будет время от времени обновляться автоматически, отображая актуальное состояние котировок.
В противном случае, когда форма с котировками отсутствует, понадобится обратиться к следующему методу с импортом XML, о котором я расскажу в следующей инструкции.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Метод 2: Использование функции IMPORTXML
Этот метод более гибкий, поскольку вы можете самостоятельно выбрать сайт или биржу, с которой будете переносить котировки криптовалюты в Google Таблицу с автоматическим обновлением. Второе преимущество данного варианта перед предыдущим – нет ограничений в плане доступных токенов, ведь далеко не все из них представлены Гуглом. В качестве примера я взял сайт CoinMarketCup, поэтому покажу, как получить необходимое значение для дальнейшего использования в таблице.
-
Откройте данный сайт или любой другой, отыщите в списке требуемый токен и перейдите на его страницу.
-
Сайт предлагает выбрать валюту, курс с которой необходимо отображать. Отыщите подходящий вариант и дождитесь загрузки страницы.
-
На русскоязычной версии сайта CoinMarketCup цена автоматически отображается в рублях. Выделите надпись, щелкните по ней правой кнопкой мыши и через контекстное меню перейдите в просмотр кода элемента.
-
Вам необходимо узнать, к какому классу относится это значение. Если будете использовать данный сайт, можете пропустить этот этап, поскольку далее можно будет скопировать мою формулу и вставить ее в свою таблицу. При работе с другими площадками понадобится самостоятельно узнать класс и уже модернизировать формулу под себя.
Теперь перейдите к таблице, выделите для формулы пустую ячейку. Вставьте туда формулу, если собираетесь использовать тот же сайт, о котором я говорю:
=IMPORTXML("https://coinmarketcap.com/ru/currencies/bitcoin/";"//div[contains(@class,'priceValue')]")
Соответственно, «bitcoin» нужно заменить на название того токена, курс которого вы желаете отслеживать. Обратите внимание на то, что при работе с другими площадками название класса понадобится заменить на актуальное, чтобы считывание данных происходило корректно.
Вы можете убрать приставку «ru/» из данной формулы, чтобы получить отображение курса выбранной криптовалюты к доллару.
Дополнительно отмечу, что вы можете использовать ссылку формата https://coinmarketcap.com/currencies/bitcoin/btc/eur/, заменив необходимые названия валют. Это более гибкий вариант, не привязанный к языку страницы и вашей геопозиции.
Разработчики в документации более детально описывают функцию IMPORTXML, которая и является основной при получении необходимых сведений. Вы можете ознакомиться с ее синтаксисом самостоятельно и редактировать под личные потребности.
Если сайт, который вы используете как средство слежения за курсами криптовалют, предоставляет свое API, его можно импортировать в Google Таблицу и получить примерно такой же результат. Я не рассматриваю этот вариант, поскольку для обычных пользователей он не является приоритетным, к тому же значительно он сложнее в реализации, нежели те два метода, которые были рассмотрены выше.