Блог им. elogunov

"Как наказать криптобиржу" или "округляем в свою пользу"

"Как наказать криптобиржу" или "округляем в свою пользу"
Речь пойдёт о дефекте округления, который долгое время существовал на одной крипто-бирже из числа Top-10, и позволял зарабатывать сладкий 1 цент с каждого исполненного ордера. Может и сейчас существует. Я там больше не торгую и поэтому поделюсь информацией.

«Зачем тебе этот жалкий 1 цент?», спросите вы. Я считаю, что высокочастотный трейдер должен быть коварным и пользоваться любой возможностью обойти конкурентов. Даже небольшое преимущество превращается в заметные цифры при большом количестве сделок.

Пруфы

Кусочек отчёта из личного кабинета:
"Как наказать криптобиржу" или "округляем в свою пользу"

Кусочек лога робота:
"Как наказать криптобиржу" или "округляем в свою пользу"

Куда смотреть-то?!

Приглядитесь внимательно к столбцам «Balance change» первой таблицы и «vol» второй. Объясняю: биржа снимала со счёта на 1 цент меньше, чем должна была снимать.

Цена: $5809.9902
Кол-во: 0.02500003 BTC
Объем: 5809.9902*0.02500003=145.2499293

Т.е. мы купили BTC на $145.2499293, что ближе к $145.25, показанным в логе робота, но биржа сняла за этот ордер $145.24. Кстати, я торговал с нулевой комиссией (см. столбец «Fee» в первой таблице) :P

Как это работает

Для начала, кусочек кода:
"Как наказать криптобиржу" или "округляем в свою пользу"

А теперь словами.

1. Начинаем мы с того, что вычисляем цену (desiredBidPx) и размер ордера (desiredBidQty) в соответствии со своей моделью котирования.
2. Округляем объём ордера вверх до ближайшего цента:
2.1. Вычисляем объём ордера: (desiredBidPx * desiredBidQty).
2.2. Делим его на шаг изменения кэша ($0.01), чтобы округлять с точностью до цента: (desiredBidPx * desiredBidQty) / PricingMath.CASH_STEP;
2.3. Округляем полученное число вверх (т.е. 14524.99293 превратится в 14525, или 10.3 превратится в 11): Math.ceil((desiredBidPx * desiredBidQty) / PricingMath.CASH_STEP);
2.4. Преобразуем объём обратно в доллары, умножая на шаг изменения кэша: desiredBidVolume=PricingMath.CASH_STEP * Math.ceil((desiredBidPx * desiredBidQty) / PricingMath.CASH_STEP);
3. Итак, у нас есть объём ордера (desiredBidVolume), который является «правильным», и именно столько кэша должна взять за наш ордер биржа. А теперь мы скорректируем размер нашего ордера (desiredBidQty), да так, чтобы биржа ошиблась!
3.1. Делим желаемый объём ордера на цену, по которой хотим его выставить: (desiredBidVolume / desiredBidPx);
3.2. Делим на шаг изменения размера ордера (0.00000001 BTC), чтобы округлить размер ордера с правильным шагом: (desiredBidVolume / desiredBidPx) / PricingMath.QTY_STEP;
3.3. Округляем полученное число вниз (т.е. 10.7 превратятся в 10): Math.floor((desiredBidVolume / desiredBidPx) / PricingMath.QTY_STEP);
3.4. Вычитаем 1. Так надо. Дальше это превратится в 1 шаг по объёму: (Math.floor((desiredBidVolume / desiredBidPx) / PricingMath.QTY_STEP) — 1.0);
3.5. Умножаем на шаг изменения размера ордера: desiredBidQty = PricingMath.QTY_STEP * (Math.floor((desiredBidVolume / desiredBidPx) / PricingMath.QTY_STEP) — 1.0).

Готово!

Таким образом на лишний цент, который с нас не возьмёт биржа, мы купим чуточку сатоши. На моем скриншоте вы можете видеть, что робот выставлял ордера, чуть-чуть отличающиеся от 0.025: всего на 3, 100 и 112 сатоши.

Комментируем, подписываемся, репостим, угадываем криптобиржу! Активнее, товарищи :D
★7 | ₽ 1
25 комментариев
а почему ушёл? 
avatar
Igr,
1. Комиссии стали ненулевыми.
2. Ситуация со Скрипалями. Биржа в юрисдикции UK, я на всякий случай оттуда вывел весь кэш.
3. Есть более интересные занятия :)
avatar
Многа буквов, ниасилил
avatar
Очень круто) Сами такое заметили? 
avatar
Dmitryy, Меня насторожили некруглые объемы ордеров в стакане. И я начал копать :)
avatar
 И я начал копать :)

Eugene Logunov, вы дотошный, таких трейдинг любит вроде =)) Тоже на нашей бирже разоблачал резидентов стакана =))
avatar
100 сатоши это 0,33 рубля. Соот-но 100 сделок +33рубля. Недурно конечно.

Но нам все равно нужен профитный робот скальпер. 
avatar
googlioner, А теперь прикидываем что получится, если делать 4.5% дневного объема торгов и вместо больших ордеров выставлять кучку поменьше, каждый из которых принесёт 1 цент :)
Но вообще у меня спред получался около $5. Так что этот баг был далеко не сутью стратегии.
avatar
А для Дерибита у Вас тоже припасен золотой ключик?
avatar
ch5oh, Не, для Дерибита ничего нету. Я совсем другими вещами занимаюсь, а HFT на крипте — это так, побаловаться.
Запуск на крипте был вызван стечением обстоятельств. Примерно в 2011 я намайнил немножко BTC, но кошелёк затерялся в бэкапах. Незадолго до банкротства MtGox я хотел запустить там бота, но затянул с документами, а потом MtGox обанкротилась. В 2017 цена BTC подросла и у меня появился повод перерыть бэкапы со старых компов и отыскать кошелёк. Нашел биржу, чтобы обкэшить. Посмотрел на API. Достал старого бота, за пару выходных сделал новый шлюз, интерфейс и модель. Поторговал полгода. Закончил 16 декабря 2017 в кэше, т.к. ожидал обвала крипты. Потом биржа подняла комиссии — после этого возобновлять торговлю я уже не планировал. Потом случился инцидент со Скрипалями — и я вывел весь кэш с биржи. Заморачиваться со шлюзами под другие биржи сейчас желания нет — есть задачки поинтереснее.
avatar
ch5oh, Кусочек эквити:

avatar
Нарядно!) 
avatar
А пост про хфт на крипте? Буду благодарен если поделитесь подробностями или идеями
avatar
MTrader, Что именно вас интересует? Про модель / идеи моделей я точно рассказывать не буду, про остальное — подумаю.
Сейчас в планах статья с кучей математики про то, как я прогнозировал развитие пузыря на крипте в 2017.
avatar
Eugene Logunov, у меня больше технически/технологически пока вопрос стоит, если не знаешь как сделать то даже если знаешь модель — это бесполезно) У меня робот через рест апи битмекса и в половине сделок биржа по минут 2-5 не принимает ордера(начало сильной волы), хоть вебсокет и работает. Да и в целом есть же нюансы о которых я даже и не знаю и спросить не могу, но они очень важны. + есть же думаю отжившие модели, или базово неработающие, но если мудрено докрутить то будут работать, тоже услышать интересно куда ваша мысль лежит
avatar

На бинансе пробовал как то — если бы не комис — то было бы очень даже неплохо. писал простого робота, который «присоседивается» к большим лимитникам.Через вэбсокет норм скорость.
avatar
А почему комиссий не было? Маркетмейкер?
avatar
МХ, На некоторых криптобиржах есть скидки за предоставление ликвидности. Т.е. если ваш лимитный ордер начал исполняться не сразу после постановки в стакан — у вас за исполнение этого ордера будет уменьшенная комиссия. Где-то просто в два раза разница, где-то вообще нулевую комиссию дают. У большинства бирж структура комиссии зависит от оборота: чем больше оборот — тем ниже комиссии как для пассивного, так и для агрессивного исполнения.

У меня маркетмейкерского договора с биржей не было. Просто я по рынку практически никогда не бил.

Вот пример структуры комиссий:



avatar
Eugene Logunov, 
Спасибо, я понял что за биржа. Просто криптой немного занимался раньше, и крупных бирж с нулевой комиссией не знаю. Сейчас вроде cobinhood с безусловной нулевой комиссией, но там объемов мало, или есть Okex с вообще отрицательной maker-комиссией.
avatar
МХ, 
и крупных бирж с нулевой комиссией не знаю
Осенью 2017 их было как минимум три штуки. Биржа, о которой идет речь, убрала нулевые комиссии для объёмов меньше 3k BTC/месяц примерно 13 декабря 2017.
avatar
 А сама биржа мутновата на мой взгляд, и больше отношения имеет к нашим соотечественникам, чем к туманному Альбиону. Никогда туда не лез.
avatar
МХ, Я ни в коем случае её не рекомендую. Если уж гиганты вроде BTC-E и MtGox накрылись, а ещё кучу бирж из top-10 регулярно ломают — о каком доверии биржам может идти речь? В криптоиндустрии скаммерсант на скаммерсанте и скаммерсантом погоняет, так что ни на одной бирже нет смысла держать сколь-нибудь значимую сумму. Именно поэтому я «баловался» с несущественной для меня суммой.
avatar
Eugene Logunov, всё верно.

Но при этом вам удалось добиться высокого оборота да ещё и лимитными ордерами. Это и интригует )
avatar
МХ, Да какая уж тут интрига. Любителей лупить по рынку на этих биржах хватает. Всё что нужно — держать котировки не в глубине стакана, а поближе к best prices. Если филлрейт хороший — то и оборот будет высоким.
avatar

теги блога Eugene Logunov

....все тэги



UPDONW