Order amount too small: что это, в чем причина и что делать

Сегодня разберем такую странную на первый взгляд, но очень нужную функцию бота — защиту от непредсказуемой торговли при определенном сочетании настроек бота и требований биржи к ордерам.

Начнем пожалуй с того, что CLOUDBOT — это не часть какой-либо биржи, а отдельный сервис, который взаимодействует с биржей и который является по отношению к бирже внешним сервисом. Бот работает путем запроса данных от биржи, их обработки и отправке бирже команд на действия с ордерами — создание, проверка, отмена. Сейчас нас интересует создание ордеров.

Создание ордеров ботом на бирже технически осуществляется путем подачи ботом команды бирже на создание ордера и передаче внутри команды параметров ордера — его типа (BUY/SELL), количества (amount) и цены (price) ордера.

Поскольку для биржи любой бот является внешним сервисом, биржа тщательно проверяет данные, которые получает. Кроме того, любая биржа предъявляет к этим данным определенные требования. Поскольку и поле «количество», и поле «цена» в ордере являются числовыми дробными значениями, то биржа как минимум выставляет требование к этим полям как к дробным числам. Это требование — точность числа (обычно количество знаков после запятой). Кроме того, это требование для каждой торговой пары может быть своим. Ну и разумеется, у каждой биржи свои требования.

Например, требование может звучать так: для ордеров на паре BTC/USDT допустимая точность поля «количество» — 3 знака после запятой. Это означает, что мы можем создать ордер с количеством 1,3 BTC, можем создать ордер с количеством 0,326 BTC, но НЕ можем создать ордер с количеством 0,3267 BTC. В последнем случае биржа не примет ордер, отвергнет его.

То же самое касается и поля «цена».

Так, с этим прояснили. Теперь второй аспект — комиссии биржи. Как и когда они списываются и как должны учитываться ботом.

Как известно, все биржи берут комиссии за исполнение ордеров. Причем многие (большинство) бирж по умолчанию берут комиссию в той валюте, которую вы получили в результате выполнения ордера (например, при исполнении ордера на покупку в паре BTC/USDT комиссия будет снята в BTC, а при продаже — в USDT). Некоторые биржи позволяют настроить списание комиссии в третьей валюте (об этом ниже).

Теперь смотрим, как бот выполняет цикл «купил-продал» и где он учитывает комиссии (где биржа их снимает).

Допустим, мы работаем по паре BTC/USDT и комиссия биржи составляет 0,1%. Бот выставляет ордер на покупку 1 BTC по цене 48000. Через некоторое время ордер исполняется биржей, биржа забирает свою комиссию в 0,1% от купленного 1 BTC и зачисляет вам на счет 0,999 BTC. Далее бот должен создать ордер на продажу 0,999 BTC по такой цене, что бы после его исполнения и вычета комиссии биржи (на этот раз в USDT) нам на счет упало больше USDT, чем было потрачено на покупку.

Пока все четко и прозрачно. А теперь давайте добавим к нам в расчет требования биржи к точности поля «количество» в 1 знак после запятой.

После покупки бот должен создать ордер на 0,999 BTC, но он этого сделать не может, поскольку требования биржи — только 1 знак после запятой. Бот должен как-то округлить это число. Округлить до 1 он не может, поскольку на счете столько нет и ордер не будет принят из-за недостатка свободных средств. Значит, бот может округлить число только до 0,9. Он при этом выставит в продажу 0,9 BTC, а 0,099 BTC останется на счету неиспользованными и неучтенными. А это, между прочим, 9,9%. Бот в результате продаст битки в минус (ну, то есть выручит меньше USDT, чем потратил) и оставит на счету неучтенными 0,099 BTC.

Для предотвращения такого поведения, в боте работает неотключаемый контроль того, что поле «количество» в ордерах не меньше 3 значащих цифр. Например, если требования биржи к точности поля «количество» ордера 1 знак после запятой, то число с тремя значащими цифрами — это 10,0. Таким образом, бот будет работать только с ордерами, которые больше или равны 10 BTC для приведенного примера. Это позволяет минимизировать максимальную погрешность торгов и не допустить торговли в минус с накоплением неучтенного остатка на счете. В логах бота при срабатывании такой защиты видна ошибка «Order amount too small».

Есть одна биржа из тех, с которыми работает бот, которая предъявляет достаточно грубые требования к точности поля «количество» в ордерах — это BINANCE.

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

Да, на большинстве доступных пар депозит нужен немаленький. Но есть и другой путь — своеобразный лайфхак. О нем дальше.

Некоторые биржи, в частности BINANCE, позволяют настроить снятие комиссии не в валютах торговли, а в некой третьей валюте. У BINANCE это BNB. Включив в настройках аккаунта этот режим, мы получим с точки зрения бота торговлю без комиссии вообще. То есть если бот купил 1 BTC, то на счет тоже упал 1 BTC. Он продал его дороже и получил прибыль. Комиссия же снялась в BNB, и бот этого не видит. Для того, что бы торговать с учетом комиссий, мы эту комиссию, которая снимается теперь в BNB, должны приплюсовать к цене. То есть если у нас комиссия сделки 0,1%, то за цикл купил-продал, когда проходит две сделки, мы имеем две комиссии. Получается, увеличив цену продажи помимо своего профита на 0,2%, мы покроем комиссии — у нас на счету будет в итоге больше USDT, чем наш профит, и на эту разницу мы можем позже откупить BNB, что бы снова использовать ее для уплаты комиссий.

Такой лайфхак возможен потому, что требования биржи к точности поля «цена» гораздо лучше — обычно там много знаков после запятой, и комиссия там вполне органично вписывается без значимых округлений.

Таким образом, подытожим. Для торговли депозитом, которого недостаточно для обычных торгов, нам нужно в настройках бота выставить комиссию биржи 0 (именно ноль, а не пустое поле*), и добавить к желаемому профиту (в процентах) двойную комиссию биржи (тоже в процентах). Как побочный эффект у нас будет завышенный на двойную комиссию профит в отчетах, но это не беда по сравнению с возможностью торговать депозитом на порядок меньшим требуемого.

* Ноль в поле комиссии нужно указывать потому, что если там пустое поле, то бот будет использовать стандартную комиссию биржи по стандартной схеме.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s