Что Такое API и Как Это Использовать в Партнерском Маркетинге? Что такое api на бирже
Работаем с API биржи EXMO
Криптовалютная биржа Exmo (как и другие крупные биржи) предоставляет пользователям два интерфейса для взаимодействия с его серверами:Автоматизировать взаимодействие с порталом возможно обоими путями, однако, второй путь является более традиционным, и, ко всему прочему, не требующим ввода капчи.Для наглядности и безопасности имеющихся на бирже средств разберем пример автоматизированного подсчета суммы в рублях, которая получится, если в конкретный момент времени при текущих курсах криптовалют обменять их на рубли внутри биржи по усредненному курсу и вывести на Яндекс.Деньги.Алгоритм получается следующий:- Запрос балансов валют в кошельке
- Запрос текущих средних курсов обмена на рубли
- Поочередное умножение балансов на их рублёвые курсы с вычетом комиссии за сделку
- Сложение полученных в п. 3 чисел
- Вычет из суммы комиссии за вывод средств на Яндекс.Деньги
require 'net/https'require 'uri'require 'json'
Опишем класс Exmo и его метод initialize, в котором объявляются переменные класса, содержащие API-ключиclass Exmo def initialize(key,secret) @KEY = key @SECRET = secret end
В двух пунктах алгоритма фигурирует запрос к API. Дабы не повторяться в коде сделаем запрос отдельным методом, и далее просто будем обращаться к нему с разными аргументами, которыми послужат:- название метода (trades - на получение сделок, ticker - статистика цен, и т.д.) - обязательный параметр
- параметры, например валюта + цена + объем для метода order_create (для создания ордера на покупку/продажу)
def request(method, params = {})
Далее для авторизованных запросов требуется специальное число nonce:Дополнительно во всех запросах должен находиться обязательный POST-параметр nonce с инкрементным числовым значением (>0). Это значение не должно повторяться или уменьшаться.
Для этого возьмем текущую дату-время и преобразуем в целое число, таким образом не придется хранить предыдущее число. Сразу же добавим nonce в хэш параметровnonce = Time.now.strftime("%s%6N") params['nonce'] = nonce
Далее распарсим экшен, обрабатывающий API-запросыURL — необходимо использовать следующий адрес https://api.exmo.com/v1/{api_name} где api_name - это наименование API метода
api_name хранится в переменной method полученных аргументовuri = URI.parse(['https://api.exmo.com/v1', method].join('/')) post_data = URI.encode_www_form(params)
Создадим заголовки запроса и добавим их в хэш headersАвторизация осуществляется с помощью отправки на сервер следующих заголовков:Key — Публичный ключ, его нужно взять настройках профиля пользователя(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)Sign — POST данные (param=val¶m1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя
digest = OpenSSL::Digest.new('sha512') sign = OpenSSL::HMAC.hexdigest(digest, @SECRET, post_data) headers = {'Sign' => sign, 'Key' => @KEY}
Далее создадим объекты http и req класса Nethttp = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' req = Net::HTTP::Post.new(uri.path, headers) req.body = post_data
Отправляем запрос и парсим ответ в объект JSONresponse = http.request(req) JSON.load response.body.to_s end
В итоге получаем следующий код:Проверим работу метода request: получим ордера на сделки валютной пары BTC/RUB и выведем первый элемент массиваKEY = "K-dnugio89hgu54h58systopthebest9uh594h54jhp49" SECRET = "S-mekgnbehappy4h8j6hijrtpgh598hji54oho4ihjtu94hj"exmo = Exmo.new(KEY, SECRET)puts exmo.request("trades",{pair: "BTC_USD"})["BTC_USD"][0]
Алгоритм:- Запрос балансов валют в кошельке
- Запрос текущих средних курсов обмена на рубли
- Поочередное умножение балансов на их рублёвые курсы с вычетом комиссии за сделку
- Сложение полученных в п. 3 чисел
- Вычет из суммы комиссии за вывод средств на Яндекс.Деньги
def get_summ_in_rubles
Обратимся к методу request и получим балансы криптовалют на кошельке (user_info) и статистику цен (ticker):user_info = request("user_info") ticker = request('ticker')
Обнуляем переменную суммы денег и запускаем цикл перебора хеша с балансами кошелька:yandex_rub = 0.0 user_info["balances"].each do |key,val|
В случае, если баланс текущей в цикле валюты не равен нулю, то записываем в переменную price стоимость этой валюты в рублях, взятую из хэша tickerunless val == "0" price = ticker["#{key}_RUB"]["avg"]
Получаем рублевый эквивалент баланса текущей валюты из произведения величины баланса на стоимость. Вычитаем 0,2% комиссию за сделку:summ = val.to_f * price.to_f # summ in rubles summ -= summ*0.002 # summ in rubles after exchange
Прибавляем полученное значение к общей сумме и закрываем условие и цикл перебораyandex_rub += summ end end
Вычитаем комиссию 3% за вывод на Яндекс.Деньги и закрываем методyandex_rub -= yandex_rub*0.03 # RUBLES after withdraw end
Проверим:Скрипт можно добавить в Ruby on Rails приложение либо, подключив нужный гем запустить в фоне и обращаться к нему через бота Telegram, например.Полный код:require 'net/https'require 'uri'require 'json'class Exmo def initialize(key,secret) @KEY = key @SECRET = secret enddef request(method, params = {}) nonce = Time.now.strftime("%s%6N") params['nonce'] = nonce uri = URI.parse(['https://api.exmo.com/v1', method].join('/')) post_data = URI.encode_www_form(params) digest = OpenSSL::Digest.new('sha512') sign = OpenSSL::HMAC.hexdigest(digest, @SECRET, post_data) headers = {'Sign' => sign, 'Key' => @KEY} http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' req = Net::HTTP::Post.new(uri.path, headers) req.body = post_data response = http.request(req) JSON.load response.body.to_s end
def get_summ_in_rubles user_info = request("user_info") ticker = request('ticker') yandex_rub = 0.0 user_info["balances"].each do |key,val| unless val == "0" price = ticker["#{key}_RUB"]["avg"] summ = val.to_f * price.to_f # summ in rubles summ -= summ*0.002 # summ in rubles after exchange yandex_rub += summ end end yandex_rub -= yandex_rub*0.03 # RUBLES after withdraw endend
KEY = "K-dnugio89hgu54h58systopthebest9uh594h54jhp49" SECRET = "S-mekgnbehappy4h8j6hijrtpgh598hji54oho4ihjtu94hj"exmo = Exmo.new(KEY, SECRET)summ = exmo.get_summ_in_rublesputs "#{summ.round(2)} RUB (after withdraw to Yandex.Money)"
systop.ru
Работа с API Binance: описание, код и примеры
Вступление
Биржа binance, как и многие другие биржи, предоставляет API - программный интерфейс для автоматизации торговли. В этой статье рассмотрены методы и приведены примеры кода для работы с ними. Официальное описание API (на английском) - здесь. Бот для Binance - здесь.
Вводная информация
В отличии от многих других бирж, Binance лимитирует не только количество запросов к API, но и "вес" запросов. Причем, это не какие-то фиксированные единицы, но целый комплекс (как они заявляют, англ). Например, если вы постоянно запрашиваете свечи но не торгуете, то ваш вес накапливается и вас могут забанить. И вообще они суровые - если вы постоянно перебиваете лучшую цену на минимальную ставку, или создаете/отменяете ордера но не покупаете и продаете и т.п. то вас настигнут санкции. Так что будьте аккуратны при тестировании ботов. Впрочем, пока я тестировал, ничего плохого не случилось, хотя я порой и жестил.
Если биржа захочет вам намекнуть, что пора бы снизить пыл, она вернет 429 ответ сервера. Если вы будете игнорировать этот ответ и ломиться в закрытую дверь, то вас забанят по IP на срок от 2 минут до 3 дней.
Подключение к API биржи идет через https://api.binance.com, для авторизованных запросов нужно отправлять ключ в заголовке X-MBX-APIKEY, и подписывать тело запроса SHA256.
Что бы вы не заморачивались с этим, я написал код, который позволяет все указанные запросы выполнять. Для его работы нужно установить Python версии 3.6+ с официального сайта, потом в командной строке выполнить pip install requests. Создайте папку (для удобства), создайте новый файл binance_api.py, и вставьте туда этот код:
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}, 'withdrawFee': {'url': '/wapi/v3/withdrawFee.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}, } 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 call_api(self, **kwargs): command = kwargs.pop('command') api_url = 'https://api.binance.com/' + 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} if self.methods[command]['method'] == 'GET': 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: print(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. Но, думаю, это мало кому понадобится.
Реклама
Публичные запросы
Проверка связи - /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' ))Реклама
Реклама
Авторизованные запросы:
Создание ордера - /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_LIMITrecvWindow – кол-во миллисекунд, которое прибавляется к 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' ))Реклама
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())
bablofil.ru
У каждой биржи свои приколы (сравнительный обзор API)
У каждой биржи свои приколы, и чем дольше работаешь с биржей, тем больше неприятных (а иногда и приятных) моментов узнаешь. Решил вот поделиться тем, с чем столкнулся :)
Эксмо
При работе с эксмо мне не понравилось несколько вещей:
- Не очень быстрая скорость ответов сервера. Играть на среднесрок и долгосрок я могу и руками, для этого бот честно говоря не очень нужен (ну, разве что подбирать оптимальные точки входа), а вот играть на скорость затруднительно.
- Периодические работы с API. Бывали периоды, когда несколько раз в неделю API не работало от 2 до 4 часов подряд. Да, об этом предупреждают, но господа… Как можно торговать если API то работает, то нет? Самое эпичное отключение произошло в феврале 2018, когда биткойн, который два месяца падал с 19 000$ до 6000$, вдруг начал серьезно и быстро расти и тут отключили API и вообще устроили обновление биржи часов на 1.
- Периодические глюки в работе API. Не знаю, как у них устроено внутри, но бывает, что присылаешь несколько запросов, в каждом из которых новый параметр nonce, и получаешь в ответ ошибку, что такое nonce устарело – и номер показывает то ли не твой, то ли какой-то из будущего. При этом новые запросы продолжают дальше работать. Такое возникает не сказать, что часто, но периодически, и это неправильно.
- Ну и еще мне не нравится, что нет метода, который позволил бы узнать текущее состояние ордера (исполнен, отменен, открыт), приходится комбинировать несколько запросов API что бы выяснить состояние, а это не на руку ни мне, ни бирже. И нельзя официально получить последние свечи - приходится выкручиваться.
- Ну и общий объем торгов не слишком велик по сравнению с другими биржами, из-за этого выставленные ордера могут висеть по несколько часов или дней, торговля выходит неспешной и размеренной.
Полоникс
Мне понравился объем торгов на бирже и количество валютных пар – можно совершать десятки и сотни успешных сделок в день, торгуя по разным парам. Не понравилось:
- Скорость ответа: при торгах ботом приходится время от времени запрашивать через API данные – текущие курсы, открытые ордера, последние сделки и т.п., а так же выставлять ордера и проверять их статус. Так вот, бОльшая часть запросов проходит быстро, но бывают моменты, когда ответы приходят через 2 секунды – я замерял. Т.е. может получиться так, что бот запросил цены – прошло 2 секунды, бот выставил ордер – прошло еще 2 секунды, бот получил уточняющую информацию (об этом ниже) – еще 2 секунды, и т.п.
- Изменение объема и цены торгов. Иногда случается так, что ордер выставляется не совсем по рассчитанной цене и не совсем на указанный объем. Обычно это происходит, когда и цену и объем рассчитываем сами, на своей стороне, и в стакане такой нет. Видимо, это связано с механизмом подбора сходящихся ордеров в стакане – и, в отличии от эксмо, подобранная цена не всегда идет в пользу клиента. Так что, если я решил купить 0.12345678 LTC по курсу 0.87654321, то мне придется после выставления ордера запросить информацию с моих открытых ордеров – и совсем не факт, что числа совпадут. Так же может получиться так, что ордер уже исполнен и смотреть нужно в исполненных – а это еще один лишний запрос.
- Нет достоверного метода API, позволяющего узнать, был ли ордер отменен (и был ли при этом исполнен частично). Приходится юлить – проверять, есть ли он в открытых, есть ли в закрытых, были ли по нему сделки и т.п. А это лишние запросы к API (а кол-во запросов ограничено), и общее замедление работы.
- Ну и в целом про комиссии – я писал об этом отдельную статью, повторюсь вкратце – тот, кто провернул на бирже большую сумму денег может торговать без комиссии – и прогибать цену под себя, а также формировать жестокий флэт и держать его часами, а то и днями. Таким образом тот, кто только входит на биржу, оказывается в невыгодном положении.
Bittrex
У этой биржи очень хорошая скорость – и не похоже, что бы были какие-либо ограничения. Запросы выполняются за миллисекунды, много валютных пар, хороший объем торгов, не так давно входил в топ-10 по нескольким парам (по данным coinmarketcap). Пожалуй, к ним только одна претензия – то, что при получении данных через официальный API данные кешируются на несколько секунд. В итоге бот не владеет ситуацией – последними сделками, открытыми ордерами и т.п. А еще иногда сделка BUY отображается через API как сделка SELL и наоборот, а иногда нормально.. Мистика.
Можно, конечно, воспользоваться неофициальным API (v2.0) но и там есть прикол – он время от времени показывает неправильную информацию. Т.е. она может быть правильная в логике биржи, но бывает так что вы берете последние сделки по BTC-ETH, раз проверили, второй, третий, на четвертый вернулись данные по BTC-ETC, потом опять BTC-ETH и т.п. Звучит как бред, но это действительно так :) Возможно, есть какой-то хитрый способ это обходить, но я так далеко не копал, так что если кто знает, напишите, пожалуйста, в комментариях.
Yobit
У Yobit`а два зеркала, через которые можно получить данные API – и периодически одно из них не работает, т.к. якобы DDOS, и в целом ограничения довольно параноидальные. Вроде как они разрешают 100 запросов в минуту (https://yobit.net/ru/rules/), но по факту блокируют как только далекое предполагаемое кол-во приблизится к этому – например, если сделать 10 запросов за 5 секунд (ого, если он так и дальше продолжит, он сделает 120 запросов в минуту, временный бан).
Так же работают не все методы API (RedeemCoupon, например).
Yobit мог бы стать этаким неуловимым Джо, если бы не это бешеное количество монет и токенов, которые каждый день пампят кто попало, и на которых порой можно поднять 500% за пару часов, так что мыши плакали, кололись, но продолжали юзать АПИ.
Реклама
Liqui
Ликви своеобразная биржа, апи которой иногда работает очень странно – то медленно, то выдает ошибки.
Меня больше всего удивляет политика комиссий за вывод – может глюк, не знаю, но я оттуда давно всё вывел. За вывод USDT комиссия 30 USDT, за вывод BTC 0.0015 BTC, как то многовато, имхо, тем более что на многих биржах комиссию за крипту не берут (не считая майнерской).
С другой стороны, биржа честно мне начисляла монеты после форков.
Приятный бонус, что у ликви есть второе полусекретное апи, откуда тянутся данные для графиков и откуда можно всё вытаскивать стабильно и на хорошей скорости. Его не так сложно найти посмотрев трафик и код страницы.
WEX (бывш. Btc-e)
Одна из старейших бирж не зря держится столько времени, несмотря на арест создателя, вопросов к API практически нет. Более того, Yobit и Liqui слизали методы почти один в один, так что если написан код для Wex, то он практически без изменений будет работать на любой из этих трёх бирж.
Bitfinex
Лютые монстры. Разрешают от 10 до 90 запросов в минуту. 10 в минуту, Карл!! Причем это скорее 10, чем 90. Если ты хочешь отслеживать цену нескольких монет, проверяй раз в минуту, чувак =) Конечно, они пишут, что надо пользоваться веб-сокетами, но и там есть ограничения – нельзя подписаться на столько пар, на сколько нужно, паре на 10й, кажется, начинают тебя футболить. Так что это биржа скорее для тех, кто заряжает миллионы на месяц, и колебания в рамках минутных таймфреймов им точно не интересны.
Впрочем, они и сами об этом говорили – дескать, мы не активируем аккаунты, у которых на счету меньше 10 000 долларов, мы биржа не для новичков («все, у кого нет миллиарда долларов, могут идти в ж…»(с)), потом, конечно, это сняли но тем не менее…
Криптопия
API работает довольно стабильно, минусом показалось то, что опять же нет готового метода узнать текущее состояние ордера, приходится мудрить. Так же мне не нравится формат подачи данных - например, что бы узнать баланс по нужной монете, нужно получить массив словарей, пройтись по каждому и проверить, та ли монета.. Это неудобно.
Так же нельзя офиациально вытащить свечи, приходится считать самому.
А в целом эта биржа, на мой взгляд, новозеландский аналог Йобита, так же куча пар, куча пампов, есть где похимичить.
Bitstamp
Всё бы ничего, но прямого доступа нет (требуется прокси/VPN), а так же для активации API требуется полное подтверждение личности – паспорт, прописка и т.п. И процесс этот может затянуться, так что если планируете заняться арбитражом, лучше позаботиться о регистрации сегодня.
С прямым доступом вообще странная ситуация - сначала IP адрес биржи попал в выгрузку Роскомнадзора, соответственно биржа оказалась запрещенной на территории РФ. Непонятно почему так произошло, и через несколько дней РКН удалил IP из своей базы. Но зато биржа наоборот, запретила доступ гражданам РФ без объяснения причин. Что там творилось за кулисами, конечно неизвестно (но, кажется, догадаться можно).
HitBTC
Европейская биржа, их киллер-фича – использование API по протоколу FIX. Этот протокол используется для обмена данными между разными биржами, с ним работает мета-трейдер и т.п. Если кто писал ботов для традиционных бирж (или планирует писать в дальнейшем), возможно стоит освоить протокол. Но там в разы сложнее чем REST API (хотя и возможностей в разы больше).
Binance
Отдает данные по API не кешируя, сейчас разрешает 1200 запросов в минуту, так же есть сокеты для публичных данных.
Binance молодцы, на мой взгляд, я даже столкнулся с тем, что превысил кол-во обращений в минуту, меня заблочили, а когда я зашел на сайт, то json запросы возвращали код ответа 418 (типа я не биржа, я обычный чайник, отвали, чел).
Боты работают на Binance несколько месяцев без остановки, ни разу не видел замедлений или зависаний. В целом мне нравится, сейчас тусуюсь тут.
А у вас какие-то есть замечания к автоматизированной торговле на биржах? Пишите в комментариях.
bablofil.ru
API Trader - программа для торговли/вывода криптовалют на биржах через API
API Trader — программа для торговли/вывода криптовалют на биржах через API создана в конце февраля 2018 года и работает исключительно по API key с такими биржами как:
- Poloniex
- Bittrex
- Binance
- Yobit
- Exmo
- Bitfinex
- Livecoin
Скачать: GitHub —https://github.com/rig3dev/API-Terminal/releases/
API Trader, позволяющий с помощью API- ключей управлять своей криптовалютой на всех поддерживаемых биржах в режиме реального времени, просто переключаясь между аккаунтами во вкладках.
Достоинства:
Работает с любой криптовалютой, которая есть на бирже.
Мониторинг баланса
Удобное переключение между аккаунтами позволяет перечислять криптовалюту между биржами в пару кликов кликов
Можно сохранить/загрузить профиль или работать с несколькими профилями.
Имеется модуль трейдинга (ручной, «поддержка алгоритмов» ещё в разработке) и модуль отправки монет на другой кошелек(необходимо убедиться, что вы дали доступ для API ключа на вывод средств)
Кому будет полезно? Трейдеру, который мониторит курс не только на мейн-бирже, а и на других. Так как курс на разных биржах может быть разным и тут можно поиметь немного профита)
Скачать: GitHub —https://github.com/rig3dev/API-Terminal/releases/
miningbro.ru
что это такое и зачем нужны?
API (application programming interface) - это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.
API различных продуктов используются программистами для создания приложений, которые будут взаимодействовать друг с другом.
В общем случае данный механизм применяется с целью объединения работы различных приложений в единую систему. Это достаточно удобно для исполнителей. Ведь в таком случае к другому приложению можно обращаться как к «черному ящику». При этом не имеет значения его внутренний механизм – программист может вообще не знать, что такое API.
Функции API
В процессе работы элементы механизма API организуют многоуровневую иерархию. При этом подчиненные компоненты также получают подобную структуру. Внутри стандартной сетевой модели OSI выделяют как минимум 7 внутренних уровней. Они классифицируются от физического уровня трансляции бит до приложений, таких как протоколы HTTP и IMAP. Таким образом API верхнего использует функциональность нижнего.
Одним из важных компонентов организации информации при описании API являются библиотеки функций и классов. В их состав входят описания сигнатур и семантики. Здесь API функции – это просто часть механизма интерфейса.
В этом случае сигнатура выступает как часть общего объявления функции. С ее помощью выполняется идентификация элемента. В различных языках написания программ она представлена разным способом. Тем самым определяется возможностями ее перезагрузки.
При описании языков специалисты стараются различать отдельно сигнатуры вызова и реализации каждой конкретной функции. В этом случае сигнатура вызова определяется с учетом области видимости, имени, последовательности фактических типов аргументов.
Эти компоненты дают возможность компилятору опознать функцию в языке C++. В тех случаях, когда она является методом определенного класса, ее сигнатура включается в имя этого класса.
Семантика же функции представляет программисту описание ее работы, выполняемых действий. Обычно в нее попадают результат вычисления и те параметры, от которых он зависит. В этом случае результат выполнения может включать зависимости не только от аргументов, но и от фактического состояния. И не имеет значения, что это API соединение определяет возможность получения информации.
Типы API
Классификация программных интерфейсов тесно связана с назначением и возможностями приложений, которые через них управляются. Фактически при работе сложной системы часто существуют альтернативные API, позволяющие решить такие же задачи другими средствами.
В отдельные группы выделяют интерфейсы управления графическими компонентами программных модулей (API графических интерфейсов wxWidgets, Qt, GTK и т. п.), операционными системами (Amiga ROM Kernel, Cocoa, Linux Kernel APIruen, OS/2 API, POSIX, Windows API), звуковые (DirectMusic/DirectSound, OpenAL), оконные интерфейсы и так далее. Здесь их разделение определяется уровнем приложения в иерархии и функциональностью. Пользователи компьютерных игр обычно не подозревают, что это графический API обеспечивает им такую быструю отрисовку картинки и поразительную яркость изображений.
К глобальным API часто относят интерфейсы отдельных языков программирования. Но с их помощью можно управлять решением вполне конкретных и локальных задач. Все зависит от реализации определенного алгоритма.
Проблемы, возникающие при работе интерфейсов многоуровневых систем, разделяются на две большие группы:
- Трудности портирования кода программы при переходе от одной API к другой. Они часто появляются при переносе модулей в другие операционные системы.
- Снижения объема функциональности интерфейса при переходе к управлению с более низкого уровня на высокий. В этом случае облегчается выполнение строго определенного класса задач. При этом возможности доступа к элементам управления другими регуляторами теряются. Ведь более низкий уровень позволяет легко управлять базовыми компонентами программы.
API вебмастеров / поисковых систем
Для вебмастеров и программистов особенно важны Web API. Такие системы управления включают в себя комплект HTTP-запросов. В результате получения таких запросов модуль генерирует строго определенную структуру HTTP-ответов. Для транспортировки информации между ними принято использовать форматы XML или JSON.
Фактически в этом случае название Web API будет синонимом обозначения веб-службы. Иными словами, это определенные программные системы со своими интерфейсами. Для получения конкретного доступа к ним используется идентификация в сети по веб-адресу. Например, при передаче данный на сервер применяется серверный API.
В случае построения программных систем на основе сервис-ориентированной архитектуры именно веб-служба является уровнем формирования модулей.
Для обычных пользователей такие службы являются синонимами абсолютно обычных решений в Интернете. Это может быть почта, поисковая система, сервис хранения файлов, социальных закладок и так далее. В случае необходимости тестирования веб-службы на больших объемах разнообразных данных соответствующий API testing предоставляет механизм для такой объемной работы.
При правильной организации любой клиент может использовать такие службы вне зависимости от типа компьютера, вида браузера и места своего нахождения в сети.
Примером использования в рекламе является API Яндекс.Директа. На его базе разработчики создают модули для управления рекламными кампаниями. При обращении к системам продвижения сайтов для повышения параметров SEO API предоставляет механизмы информационного взаимодействия.
Обычно порядок работы интерфейса стараются передать в его названии. Мы можем не найти в поиске, что такое syngestureapisampleapp application. Но из названия понятно, что это пример работы интерфейса для единичного пользователя.
При этом нужно учитывать изменения в интерфейсах, произошедшие после массового внедрения стандартов Web 2.0. В результате был выполнен переход протокола обмена структурированными данными в распределенной вычислительной среде SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) к архитектурному стилю взаимодействия компонентов распределенного приложения в сети REST (сокр. от англ. Representational State Transfer — «передача состояния представления»). Для многих веб-служб, в число которых входят поисковые системы и интернет-магазины, данный переход привел к упрощению архитектуры и ускорению выполнения задач. Правильная организация информационных потоков приводит к тому, что API сайта предоставляет широкие возможности автоматизации последнего.
При этом отдельные компоненты REST функционируют примерно таким же образом, как взаимодействуют между собой серверы и клиенты в Интернете. Хотя работа систем на архитектуре REST до сих пор не имеет единого стандарта, большинство RESTful-реализаций используют конкретные стандарты, такие как HTTP, URL, JSON и XML. Здесь особенно важно, что открытый API – это возможность дополнения и расширения системы взаимодействия.
wiki.rookee.ru
Что такое API и как этим пользоваться?
Готовы узнать все об API? Что такое аффилированный API, и как вы можете этим пользоваться?
Тогда поехали!
Введение
Вы наверное безумец, если не согласны со следующим утверждением:
На сегодняшний день API – повсюду и уже стали привычной частью мира технологий, бизнеса в партнерском маркетинге и тем, без чего мы не сможем обойтись.
Однако, вам кажется, что вы не совсем понимаете что это такое.
Возможно, вам хотелось бы знать, какие приложения используются для API, как ими пользоваться, и как они будут влиять на работу аффилиатов в будущем?
Не беспокойтесь! Эта статья – то, чего вы так долго ждали!
Мы расскажем вам, что такое API, приведем примеры, объясним какие виды API существуют, и как вы можете использовать API в своей работе каждый день.
К концу прочтения статьи вы будете знатоком этой темы!
Хватит вступлений. Начнем, пожалуй!
Что такое API?
Сейчас, скорее всего, вы задаетесь вопросом: “как расшифровывается API?”
API это Application Program Interface или программный интерфейс приложения.
Это определенный набор протоколов, подпрограмм и инструментов для создания программных приложений.
API это то, что позволяет настроить как разные компоненты программы должны эффективно взаимодействовать.
API, который работает по назначению, должен упрощать работу программистов и облегчать разработку определенного продукта.
API: прагматическое использование
API изначально использовался в качестве метода отправки команд и информации определенного формата с одних программ на другие.
Проще говоря, это то, что обеспечивает эффективный процесс коммуникаций между программами, использующими функции и ресурсы друг друга.
API предоставляются теми программами, которые позволяют коммуникации с другими программами.
Представьте, что вы хотите разработать программу.
Вы пишете код и программируете как профессионал.
И что теперь?
Вы также хотите использовать взаимные функции для того, чтобы быть связанным с остальными программами.
Но как?
Просто!
Посмотрите на документацию API, чтобы эффективно собрать информацию и проверить список доступных функций.
Что было до API?
API существовал не всегда. Его появление на рынке стало технологической революцией и внесло много изменений в онлайн мир.
Однако, до этого момента паблишеры просто агрегировали множество различных параграфов определенного содержания и несколько изображений партнерских программ, что представляло собой мерч рекламодателя.
В чем была проблема?
Этот контент мог бы быть идеальным, но сопровождался риском стать устаревшим и содержать недействительные ссылки.
Если бы контент содержал старые ссылки, невозможно было бы обновлять информацию без необходимости просмотра всего сайта вручную и изменения конкретной информации.
С API процесс стал проще, так как API может синхронизировать информацию между программными приложениями.
Как API используются в контексте всемирной паутины?
Во всемирной паутине API позволяют вам легко получить доступ одновременно к нескольким ресурсам, которые доступны только на стороне другого программного приложения, на другом сервере.
Пример того, как используется API:
Знаете, почему вы можете быстро зарегистрироваться в разных приложениях, используя только аккаунт Facebook?
Это происходит благодаря специальному API Facebook. Компании используют код и API для предоставления клиентам быстрого и простого доступа к их платформам.
Что будет, если не использовать API?
Если вы решите не использовать API, приложение может, например, узнать о новой статье Академии Mobidea открыв www.academy.mobidea.com
Затем приложение прочтет веб страницу, как если бы оно было человеком, и интерпретирует контент страницы, в данном случае – Академии.
Та же ситуация с использованием API: приложение находит информацию о веб странице www.academy.mobidea.com , отправив сообщение на API Академии Mobidea.
Сообщение отправляется в формате JSON.
Что такое формат JSON?
Формат JSON (JavaScript Object Notation) это файл открытого стандарта, содержащий объекты данных и соответствующие атрибуты.
Например, когда мы проверяем новые статьи в Академии Mobidea, передаваемый JSON файл выглядел бы так:
article {
title: “Новая статья”,
date: 01/01/2017,
content: “Много текста.”,
author: “Джон Уайт”
}
Далее, после отправки сообщения в формате JSON, API страницы www.academy.mobidea.com реагирует структурированным ответом, похожим на пример выше.
Почему метод передачи информации так важен?
Вот почему: когда вы используете API, веб страница документирует определенную структуру ответа и запроса.
Это значит, что информация остается неизменной, вне зависимости от того, меняет ли веб страница свой внешний вид и дизайн или нет.
Без API приложение определенно должно полагаться на неточный факт, что вебсайт не изменит свой внешний вид.
Что случится, если сайт поменяется, и при этом API не был использован?
Скорее всего приложение перестанет работать!
В силу изменения структуры, дизайна и пользовательского опыта сайта приложение перестанет его распознавать.
Оно просто не сможет понять данные, передаваемые с данного вебсайта.
В итоге, API это более безопасный и надежный вариант.
С ним вы можете быть уверены в том, что приложение продолжит работать с сайтом.
Не имеет значения, если сайт вдруг решил изменить дизайн или структуру – API прочтет его в любом случае.
Типы API
Существует множество различных типов API для приложений, вебсайтов и операционных систем.
Среди определенных классов есть популярные Java API и интерфейсы, которые позволяют определенным субъектам обмениваться информацией на языке программирования Java.
Также есть и Web API.
Самые известные типы API:
- Удаленный вызов процедур (Remote Procedure Call – RPC)
- Простой протокол доступа к объектам (Simple Object Access Protocol – SOAP)
- Передача состояния представления (Representational State Transfer – REST)
Все еще недостаточно?
Больше примеров?
Подумайте о Windows, компьютерной операционной системе, разработанной Microsoft для работы с ПК (персональными компьютерами).
Windows располагает множеством различных наборов API, которые используются как приложениями, так и системным оборудованием.
Более того, Windows – не единственная операционка, которая предоставляет API. Большинство ОС это делают.
Какая цель?
Убедиться в том, что программисты могут создавать приложения, соответствующие конкретной операционной среде.
Веб API также используются сторонними разработчиками программного обеспечения для того, чтобы впоследствии они могли создавать программные решения для пользователей.
Примеры API
Не так сложно найти примеры API.
Почему?
Потому что на сегодняшний день API – обычное дело, технология, популярная во всем интернете, облегчающая процессы обмена информацией.
Гиганты технологий, такие как Twitter, YouTube и Facebook, например, все работают с API.
Twitter использует REST API, которые дают программный доступ для чтения и написания данных Twitter.
У разработчиков есть доступ к ключевым данным Twitter.
К тому же поисковые API дают разработчикам методы для взаимодействия с данными трендов и поиском Twitter.
YouTube также использует API.
Google API позволяет разработчикам программного обеспечения интегрировать видео, показываемые на YouTube, так же, как и функционал приложений или вебсайтов.
Вот некоторые из API YouTube:
YouTube Player API, YouTube Data API, YouTube Live Streaming API, YouTube Analytics API.
Как насчет Facebook? Как используется API в этом случае?
Заметьте, что вы можете оставлять Facebook комментарии на любом сайте и синхронизировать эти комментарии со страницей на Facebook.
API!
Это отличный пример того, как можно использовать API по-максимуму и, к примеру, упростить работу блоггеров.
API позволяет пользователям оставлять комментарии в блоге.
Этот комментарий также появляется на Facebook странице, связанной с этим блогом. И это удобно всем!
Преимущество API
Использование API имеет ряд преимуществ.
Мы не нашли весь их список в алфавитном порядке и поэтому выделили несколько самых важных:
- Они доступны партнерским программам и работают с программами, которые действуют напрямую с покупателями
- API работают с пре-форматированными ссылками, которые загружаются заранее вместе с ID паблишера, тем самым обеспечивая комиссию паблишера с редиректа пользователей на офер
- Они предоставляют данные в реальном времени, которые всегда актуальны и невероятно точны
- Они также предоставляют ответные данные в форматах XML или JSON. Это значит, что паблишер может с легкостью интегрировать необходимый контент.
Как использовать API в партнерском маркетинге?
В партнерском маркетинге API также играет важную роль.
В прошлом программистам приходилось работать с интеграцией SaaS, где большая часть работы выполняется вручную.
Этот процесс был хаотичным и отнимал много времени, останавливая развитие партнерских программ. IT отделы тратили время на рутинные процессы.
API интеграция определенно помогает в работе всем программистам, которые работают в партнерках.
Какие типы аффилированных API используются в Mobidea?
В Mobidea у аффилиатов есть возможность воспользоваться некоторыми API, которые нацелены на то, чтобы пользователи получали информацию как можно быстрее.
На данный момент у нас есть Statistics API, через который пользователи могут проверить статистику, и Offers API, в котором пользователи могут увидеть оферы.
Рассмотрим функциональность этих двух API более подробно!
Mobidea’s Statistics API
API статистики позволяет аффилиатам получать список со статистикой в выбранном формате (XML, JSON) для заданного дня (устанавливается в параметре &date) и доходом, показанным в выбранной валюте.
Список может быть настроен так, чтобы передавать только выбранные поля (дата, время, оператор, код страны, track1..track5, доход).
API оферов Mobidea
API оферов дает пользователям возможность получить список своих оферов в выбранном формате (XML, JSON) с отображаемой выплатой, показанной в выбранной валюте.
Данные в списке можно сортировать по статусу (в ажидании, одобрено или отклонено), категориям оферов и ограничениям.
Более того, пользователь может настроить данные так, чтобы передавать только выбранные поля (имя, описание, статус, категория, выплата, ограничения, иконка, баннеры, URL).
Аффилиаты могут использовать эти ссылки API для импорта данных на разные платформы и просмотра статистики продаж.
Эти API также помогают пользователям принимать различные решения, опираясь на сегмент с большим количеством продаж, на выплату офера или другие подобные детали.
Интегрируя API, предоставленные Mobidea, вы сможете просматривать как оферы, так и статистику, доступные в вашей любимой партнерской программе!
Заключение
Теперь, когда вы знаете, что такое API и как его использовать, важно использовать весь потенциал API.
Мы писали эту статью, желая предоставить вам базовые понятия об API, и как используют эту технологию самые популярные вебсайты по всему миру.
Что теперь?
Воспользуйтесь полученной информацией и API оферов и/или статистики на Mobidea. Таким образом вы сможете всегда получать самую релевантную и необходимую информацию и быть еще более успешными в партнерском маркетинге.
Не забывайте проверять Академию Mobidea, чтобы всегда быть в курсе самых полезных инструментов для вашей работы в партнерском маркетинге!
Пока!
www.mobidea.com
Moon Bot - API ключи
Приложение Moon Bot (в дальнейшем "Бот") взаимодействует с биржей посредством API биржи, для получения доступа к API требуются ключи (API KEYS). Ключи нужно создать в аккаунте Bittrex, раздел "Settings->API Keys":
У ключей должны быть права: READ INFO, TRADE LIMIT, TRADE MARKET. В целях безопасности права WITHDRAW нужно отключить!
При первом запуске Бота требуется ввести API ключи. Ключи состоят из пары Key, Secret. Key - публичный ключ, он используется для регистрации Вашей копии Бота. Secret - приватный ключ, используется для подписи ордеров. Приватный ключ хранится на вашем компьютере локально в зашифрованном виде в файле BotConfig.bcfg, который Бот создает автоматически. В Интернет приватный ключ не передается! Для дополнительной защиты Ваших ключей следует установить пароль, этот пароль будет запрашиваться при каждом запуске Бота. Пароль так же используется только локально.
После установки ключей нажмите кнопку Register Api Key. Если ключи введены верно, то Бот установит соединение с сервером биржи, в окне с настройками отобразится Ваш регистрационный номер, в главном окне появится статус "Connection: OK".
Если соединение установить не удалось, в окне с логом будет код ошибки. В этом случае перепроверьте API ключи; убедитесь, что в системе присутствуют библиотеки ssleay32.dll, libeay32.dll.
При последующих запусках Бота повторно вводить ключи не нужно; соединение с биржей будет установлено автоматически.
Регистрация второго ключа от той же или другой биржи
Для регистрации в PRO версии бота второго комплекта ключей следует получить на бирже новые ключи. На примере бинанса: зайти в раздел API Settings
Ввести любое имя для новых ключей, нажать Create New Key
Ввести код 2ФА авторизации.
Полученные ключи ввести в боте. Бота можно скопировать заранее в отдельную папку, если Вы планируете запускать ботов для разных бирж одновременно; можно регистрировать ключи в том же боте, не копируя его, и переключаться между биржами с помощью выпадающего списка выбора биржи. На картинке ниже выбран бот для бинанса. Чтобы ввести в него новые ключи, нужно:
- Нажать "Зарегистрировать другие ключи"
- Ввести сами ключи
- Нажать "зарегистрировать ключи"
moon-bot.com