Перейти к содержимому






- - - - -

ИМХО API для бирж

Написано Socket32, 04 February 2015 · 1394 Просмотров

Опишу своё видение, как может выглядеть «идеальный» API биржи.
Написав классы практически для всех существующих да и почивших бирж накопился обширный опыт.

Приватное API

Open_orders() - список открытых ордеров на покупку и продажу.
Желательно выдавать сразу список всех ордеров, потому что опрашивать сервер всеми существующими парами на бирже накладно для юзера по времени, для сервера по ресурсам/коннектам/keep alive/расход nonce.

Выдаваемые данные:
Массив, ключи которого пара, например BTC_DOGE, BTC_FLT.
Принимаемые параметры могут быть пара, но опять же лучше 1 запрос со всем массивом чем теребить сервер.
Order_id – цифровой код ордера, удобен для проверки на длину и цифры.
Price – цена покупки/продажи.
Vol – заданный объем покупки/продажи.
Vol_remain – остаток объема, то есть сколько осталось от заданного объема, очень полезен что бы узнать сколько осталось от ордера.
Time – время создания ордера, лучше в unix_time, удобно прибавлять разницу с биржи и своим часовым поясом, очень полезен в случае когда стоит несколько ордеров по одной цене и нужно отменить
Type – тип, покупка sell или продажа buy

********
Balance() – список монет на бирже.
Массив, ключи которого правильные акронимы монет, например DOGE, FLT.
Принимаемые параметры акроним монеты, удобно после покупки получить новый баланс за вычетом комиссии, для вывода.
balance('doge');

Выдаваемые данные:
Balance – монеты не в ордерах.
Hold – монеты в ордерах.
Unconfirmed – монеты в пути, неподтвержденные.

Приватное торговое

********
Buy() – создание ордера на покупку.
Принимаемые параметры: пара, акроним монеты, количество и цена.
buy('btc', 'doge', 8110, 0.00000048);

Выдаваемые данные:
Order_id – цифровой код ордера, удобен для проверки на длину и цифры.

********
Sell() – создание ордера на продажу.
Принимаемые параметры: пара, акроним монеты, количество и цена.
buy('btc', 'doge', 8110, 0.00000048);

Выдаваемые данные:
Order_id – цифровой код ордера, удобен для проверки на длину и цифры.

********
Cancel() – отмена ордера.
Принимаемые параметры: идентификатор ордера - Order_id


Приватное ввод/вывод

********
Deposit() – получения адреса и доп. адреса монеты.
Принимаемые параметры: акроним монеты.

Выдаваемые данные:
Address – уникальные адрес монеты.
Address_addon – доп. адрес монеты, XMR, BNC.

********
Withdraw() – вывод монеты.
Принимаемые параметры: монета, количество, адрес, доп. адрес если требуется.
withdraw(XMR, 24, 'XMR _address', 'XMR_address_addon');

Выдаваемые данные:
TXID – очень нужна вещь, идентификатор транзакции, что бы проверять в проводнике блоков, указывать в письме поддержке в случае проблем.

Приватное, история

Плюшки которые показывают уровень разработчиков биржи и отношение к юзеру.

********
History_withdraw() – история выводов монет.
Принимаемые параметры: монета – необязательно.
Выдаваемые данные:
Address – адрес куда была переведена монета.
Address_addon – доп. адрес.
TXID – транзакция.
Vol – объем.
Time – дата/время вывода.

********
History_trades() – история торгов.
Принимаемые параметры: пара и монета – необязательно.
Выдаваемые данные:
Pair_Coin – торговая пара.
Price – цена покупки/продажи.
Vol – объем покупки/продажи.
Time – время исполнения ордера
Type – тип, покупка sell или продажа buy

********
History_deposit() – история поступлений монет.
Принимаемые параметры: монета – необязательно.
Выдаваемые данные:
Coin – монета.
Vol – количество монет.
Time – дата/время ввода.

********
History_transfer() – история передачи монет локально, другому пользователю биржи.
Принимаемые параметры: монета – необязательно.
Выдаваемые данные:
Coin – монета.
Vol – количество монет.
Time – дата/время ввода.

Открытое API, без аутентификации

********
Pairs() – список торговых пар, например: BTC_LTC, BTC_DOGE, LTC_DOGE, XRP_DOGE.

Выдаваемые данные:
Массив со всеми существующими торговыми парами.

********
Orders() – список ордеров на покупку и продажу монеты.
Принимаемые параметры: пара и акроним монеты, возможно тип (продажа, покупка) и количество сделок.
orders('btc', 'doge', 'all', 25); //Format: orders('PAIR', 'COIN', ['sell' | 'buy' | 'all', count])

Выдаваемые данные:
Один массив или два со списком ордеров.
Price – цена покупки/продажи.
Vol – объем покупки/продажи.
Type – тип, покупка sell или продажа buy если будет разделение массивов.

********
Summary() – подробная информация о монете, акроним, полное имя, ордера на покупку/продажу.
Самое главное - статус кошелька монеты, часто бывает форк, проблемы с сетью, что бы не потерять монеты, не тратить нервы и время на общение с тех. поддержкой.
Список ордеров на покупку и продажу. Таким образом, отпадает необходимость делать вызовы к Pairs() и Orders() еще одно преимущество – это скорость получения, гораздо быстрее получить один файл с ордерами чем делать десятки запросов по Orders().

Выдаваемые данные:
Массив со всеми монетами, один запрос и полная информация о монетах и статусе получена.


********
History_trade() – история торгов монеты.
Принимаемые параметры: пара и акроним монеты, возможно тип (продажа, покупка) и количество сделок.
history_trade('btc', 'gmc', 'buy', 25); //Format: history_trade('PAIR', 'COIN', ['sell' | 'buy' | 'all', count])

Выдаваемые данные:
Price – цена покупки/продажи.
Vol – заданный объем покупки/продажи.
Time – время исполнения ордера, лучше в unix_time, удобно прибавлять разницу с биржи и своим часовым поясом.
Type – тип, покупка sell или продажа buy

  • 0



ТОгда проще сделать вообще 1 запрос вида birza.com/api/go и в готовом массиве получить АБСОЛЮТНО всю информацию, всем тогда будет хорошо, но матно

    • 0

Да, самое главное то и забыл.

    • 0

Open_orders()

Если выдавать сразу список всех ордеров, то:
1. Корявые кодеры дергают метод постоянно, что вызывает большой поток данных при количестве ордеров больше 300. Большинство ботом работают по простой схеме: создал-отменил-создал точно такой же ордер

2. Если бот работает на разных раныках, и если бот хороший, то с каждым рынком у него своя работа. И при обновлении стаканов на одном маркете, грузить ордера с других маркетов - пустая работа

3. Пункт связанный с 1 пунктом. При большиъ объемах данных, БД будет намного сложнее. Выход конечно есть - репликация, но тогда появляется задержка при чтении, когда ордера записались, но еще не перешли в реплику.

 

History_trades()

 

Забыли про order_id. Без него не отследить с какими ордерами сделка прошла. Остается только сравнивать массивы ордеров ДО сделки, и ПОСЛЕ. Но это пораждает массу других проверок и обработок.

 

History_deposit()

 

Забыли про txid и статус депозита. Желателньо еще и со счетчиком подтверждений.

 

А вообще, я бы предложил создать именно отдельную тему и вносить правки по мере поступления новых предложений. ИМХО, тот факт, что у всех бирж свой формат - дико напрягает. А создание единого формата, например как Fix API - сильно упростило бы жизнь.

    • 0

Август 2017

В П В С Ч П С
  12345
6789101112
13141516171819
202122 23 242526
2728293031  

Последние записи

Последние комментарии

Теги

    Поиск по блогу

    Категории

    Блоги моих друзей