🤖 Торговый бот и API криптобиржи


#1

Торговый бот

Начиная с этапа финального тестирования криптобиржи, вы можете использовать торгового бота, представленного по ссылке ниже. Данный бот не является самостоятельным продуктом компании – это простой пример функционирования нашего API, созданный для тестирования криптобиржи Bitzlato однако, он полностью работоспособен и имеет необходимые опции, которые позволят настроить бота для торговли.


В этой теме вы можете оставлять свои вопросы и наблюдения, касающиеся торгового бота и функционирования API криптобиржи Bitzlato.


Ссылка на скачивание: github.com/bitzlato/trade-bot


Как работает торговый бот?

  • Проверяет курсы на kraken каждые 30 секунд.

  • Создает необходимое количество ордеров с заданными параметрами отклонения от курса на покупку и/или продажу.

  • Отменяет свои старые ордера, заменяя новыми

  • Токен передается , как параметр token

  • Интервал обновления --ticker - по умолчанию составляет 30 секунд


Параметры, которые можно изменять в боте:

  • Пары для торговли

  • Объем выставляемого ордера (в долларах США)

  • Количество выставляемых ордеров

  • Переменную отклонения от курса на покупку и/или продажу


API

Ниже представлен список API методов, которые помогут написать своего торгового бота. ВАЖНО : список методов, параметры и формат данных могут изменяться, пока биржа находится в режиме бета-тестирования.


Общее описание

ВАЖНО : Любая величина, представляющая собой количество криптовалюты, всегда передаётся как строка! Точностью операций с деньгами управляет сервер.

ВНИМАНИЕ : все GET -параметры (идущие после ? ) являются опциональными, для параметров limit и skip на сервере при необходимости должны использоваться значения по умолчанию (предположительно, 100 и 0 соответственно, но может зависеть от типа запроса).

Все маршруты, начинающиеся на /api/market/v1/public/ являются публичными и обрабатываются без контроля доступа. Маршруты, начинающиеся на /api/market/v1/private/:userId/ , требуют аутентификации и проверки того, что переданный токен доступа принадлежит пользователю userId.


Получение информации о пользователе

Позволяет получить userId для дальнейшего использования

GET /api/auth/whoami

{
    name: ...,
    userId: ...,
}
  • name - Nickname пользователя

  • userId - числовой идентификатор пользователя


Валютные пары

GET /api/market/v1/public/pairs/

Получение списка валютных пар.

Формат ответа:

[
  {
    id: ...,
    label: ...,
    status: ...,
    price: {
      min: ...,
      max: ...,
      last: ...
    },
    volume: {
      base: ...,
      quote: ...
    },
    priceChange: ...,
  },
  ....
]

Формат описания валютной пары совпадает с форматом ответа маршрута GET /api/market/v1/public/pairs/:id .


GET /api/market/v1/public/pairs/:id

Получение информации о валютной паре с идентификатором id .

Формат ответа:

{
  id: ...,
  label: ...,
  status: ...,
  price: {
    min: ...,
    max: ...,
    last: ...
  },
  volume: {
    base: ...,
    quote: ...
  },
  priceChange: ...,
}
  • id - идентификатор валютной пары в формате :(base)-:(quote) , где base - это базовая валюта, а quote - котируемая валюта

  • label - отображаемое наименование валютной пары, может совпадать с id , но может и отличаться

  • status - статус валютной пары, возможные значения: active , frozen

  • price - информация о биржевом курс по данной валютной паре

  • price.min - максимальная цена за последние 24 часа

  • price.max - минимальная цена за последние 24 часа

  • price.last - цена последней сделки

  • volume - объём торгов по данной валютной паре за последние 24 часа

  • volume.base - объём в базовой валюте

  • volume.quote - объём в котируемой валюте

  • priceChange - изменение цены за 24 часа, знак является индикатором направление изменения


Работа с публичными ордерами

GET /api/market/v1/public/orders/:pair/:offerType

Получение списка активных (открытых) ордеров.

Результат должен быть отсортирован по цене:

для bid от наибольшего к наименьшему

для ask от наименьшего к наибольшему

Параметры запроса:

  • pair - идентификатор валютной пары
  • offerType - тип ордера, возможные варианты: bid или ask

Формат ответа:

{
  data: [
    {
      id: ...,
      pair: ...,
      offerType: ...,
      amount: ...,
      price: ...
    },
    ...
  ],
  maxCount: ...
}
  • data - массив с описаниями ордеров, которые должные быть отсортированы по data.price : в случае bid по возрастанию, а в случае ask по убыванию.

  • data.pair - идентификатор валютной пары

  • data.offerType - тип ордера, возможные варианты: bid или ask

  • data.amount - размер ордера в базовой валюте

  • data.price - цена базовой валюты в котируемой

  • maxCount - максимальное колличество записей, которое может вернуть сервер (фактическое колличество может быть меньше)


GET /api/market/v1/public/trades/:pair/

Получение списка последних сделок (см. order_logs ). Параметры запроса:

  • :pair - идентификатор валютной пары

Формат ответа:

{
  data: [
    {
      id: ...,
      amount: {
         base: ...,
         quote: ...
      },
      price: ...,
      date: ...,
      type: ...
    },
    ...
  ],
  maxCount: ...
}
  • data - массив с описаниями последних сделок

  • data.id - идентификатор сделки

  • data.amount - описание размера сделки

  • data.amount.base - размер сделки в базовой валюте

  • data.amount.quote - размер сделки в котируемой валюте

  • data.price - цена базовой валюты в котируемой

  • data.date - дата совершения сделки

  • data.side - тип сделки sell или buy определяется по типу более нового ордера

  • maxCount - максимальное колличество записей, которое может вернуть сервер (фактическое колличество может быть меньше)


Работа с собственными ордерами

GET /api/market/v1/private/:userId/orders/:orderId

Получение описания собственного ордера

{
  id: ...,
  pair: ...,
  isActive: ...,
  offerType: ...,
  amount: {
    origin: ...,
    matched: ...,
    rest: ...
  },
  price: ...,
  fee: ...,
  status: ...,
  created: ...
}
  • id - идентификатор ордера

  • pair - идентификатор валютной пары

  • isActive - булев признак того, что ордер активен

  • status - описание статус обработки ордера

  • offerType - тип ордера, возможные варианты: bid или ask

  • price - цена базовой валюты в котируемой

  • amount - описание размера ордера в базовой валюте

  • amount.origin - размер, указанный при создании ордера

  • amount.matched - суммарный размер сделок, совершённых по ордеру

  • amount.rest - сколько осталось до закрытия ордера


DELETE /api/market/v1/private/:userId/orders/:orderId

Отмена ордера.

GET /api/market/v1/private/:userId/orders/?pair=:pair&limit=:limit&skip=:skip

  • pair - идентификатор валютной пары
  • limit - ограничение на количество возвращаемых записей
  • skip - количество записей, которые необходимо пропустить

Получение списка собственных ордеров. Формат ответа:

{
  data: [
    {
      ...
    }
  ],
  total: ...
}
  • data - список описаний ордеров, в формате совпадающем с форматом ответа маршрута GET /api/market/v1/private/:userId/orders/:orderId

  • total - общее количество ордеров, удовлетворяющих условиям фильтрации


POST /api/market/v1/private/:userId/orders/

Создание нового ордера.

Формат запроса:

{
  pair: ...,
  offerType: ...,
  amount: ...,
  price: ...
}
  • pair - идентификатор валютной пары

  • offerType - тип ордера, возможные варианты: bid или ask

  • price - цена базовой валюты в котируемой

  • amount - описание размера ордера в базовой валюте

Формат ответа совпадает с форматом ответа маршрута GET /api/market/v1/private/:userId/orders/:orderId .


POST /api/market/v1/private/:userId/orders/idle

Позволяет оценить результат создание ордера без его фактического создания.

Формат запроса совпадает с форматом запроса маршрута POST /api/market/v1/private/:userId/orders/ .

Формат ответа совпадает с форматом ответа маршрута GET /api/market/v1/private/:userId/orders/:orderId за исключением поля id , которое не может быть определено.


GET /api/market/v1/private/:userId/trades/?orderId=:orderId&pair=:pair&limit=:limit&skip=:skip

Получение истории собственных сделок. Возможные параметры запроса:

  • orderId - идентификатор ордера

  • pair - идентификатор валютной пары

  • limit - ограничение на количество возвращаемых записей

  • skip - количество записей, которые необходимо пропустить


Формат ответа:

{
  data: [
    {
      id: ...,
      pair: ...,
      action: ...,
      amount: {
         base: ...,
         quote: ...
      },
      price: ...,
      date: ...,
      side: ...,
      fee: ...
    }
  ],
  total: ...
}
  • data - массив описаний совершенных сделок

  • data.id - идентификатор сделки

  • data.pair - идентификатор валютной пары

  • data.action - тип действия, возможные варианты: bid или ask

  • data.amount - описание размера сделки

  • data.amount.base - размер сделки в базовой валюте

  • data.amount.quote - размер сделки в котируемой валюте

  • data.price - цена базовой валюты в котируемой

  • data.date - дата совершения сделки

  • data.side - тип сделки sell или buy определяется по типу более нового ордера

  • data.fee - размер комиссии по сделке. Комиссия всегда указывается в той валюте, которую получил пользователь в результате проведения сделки

  • total - общее количество ордеров, удовлетворяющих условиям фильтрации


Статистика

GET /api/market/v1/public/stats/candlestick/:pair?after=:after&before=:before&width=:width

Получение данных для отображения “японских свечей”.

Параметры запроса:

  • pair - идентификатор валютной пары
  • after - ограничение по времени снизу на запрашиваемые данные.
  • before - ограничение по времени сверху на запрашиваемые данные, значение по-умолчанию - текущий момент
  • width - ширина интервала, возможные значения: 1h (один час), 1d (один день). В будущем возможно добавление других значений (см. binance). Значение по умолчанию - 1h .

В случае, когда количество запрашиваемых свеч ( (before - after)/width ) больше 200 (любой разумной цифры, записанной в конфигурационном файле) - возвращать ошибку 400 Bad Request .

Значения after и before должны округляться в меньшую и большую сторону соответственно по границам интервалов. Например, если в запросе width=1h , а after=19:10 (на самом деле в запросе будет unix-time ), то в качестве первой “свечи” необходимо возвращать ту, которая начинается в 19:00.

Формат ответа:

[
  {
    date: ...,
    price: {
      open: ...,
      close: ...,
      high: ...,
      low: ...
    },
    volume: {
      base: ...,
      quote: ...
    }
  },
  ...
]

В массиве находиться список описаний “свечей” со следующими полями:

  • date - дата “создания свечи”, начало интервала времени, соответствующего данной свече

  • price - данные о цене базовой валюты в котируемой в течении интервала

  • price.open - в начале интервала

  • price.close - в конце интервала

  • price.hight - максимум за интервал

  • price.low - минимум за интервал

  • volume - данные об обороте за интервал

  • volume.base - в базовой валюте

  • volume.quote - в котируемой валюте


Найденные пробелы в работе бота и ваши вопросы приветствуются в комментариях!