Перейти к содержанию
  • запись
    1
  • комментария
    3
  • просмотра
    5 392

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


Socket32

3 075 просмотров

Опишу своё видение, как может выглядеть «идеальный» 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

3 Комментария


Рекомендуемые комментарии

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

Ссылка на комментарий

Open_orders()

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

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

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

 

History_trades()

 

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

 

History_deposit()

 

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

 

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

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...