ru
Feedback
АЛГОтрейдинг | ALKO_trading | CRYPDE | HFT

АЛГОтрейдинг | ALKO_trading | CRYPDE | HFT

Открыть в Telegram

Crypto algorithmic trading. High-Frequency arbitrage & market-making. #crypto #trading #hft https://crypde.com/ contact hello@crypde.com

Больше
835
Подписчики
+224 часа
+37 дней
+3430 день

Загрузка данных...

Привлечение подписчиков
июль '26
июль '26
+31
в 0 каналах
июнь '26
+65
в 0 каналах
Get PRO
май '26
+57
в 1 каналах
Get PRO
апрель '26
+67
в 0 каналах
Get PRO
март '26
+170
в 2 каналах
Get PRO
февраль '26
+29
в 0 каналах
Get PRO
январь '26
+82
в 0 каналах
Get PRO
декабрь '25
+21
в 0 каналах
Get PRO
ноябрь '25
+35
в 0 каналах
Get PRO
октябрь '25
+56
в 0 каналах
Get PRO
сентябрь '25
+18
в 0 каналах
Get PRO
август '25
+46
в 0 каналах
Get PRO
июль '25
+25
в 0 каналах
Get PRO
июнь '25
+26
в 0 каналах
Get PRO
май '25
+18
в 0 каналах
Get PRO
апрель '25
+11
в 0 каналах
Get PRO
март '25
+5
в 0 каналах
Get PRO
февраль '25
+5
в 0 каналах
Get PRO
январь '25
+9
в 0 каналах
Get PRO
декабрь '24
+7
в 0 каналах
Get PRO
ноябрь '24
+19
в 0 каналах
Get PRO
октябрь '24
+12
в 0 каналах
Get PRO
сентябрь '24
+6
в 0 каналах
Get PRO
август '24
+18
в 0 каналах
Get PRO
июль '24
+5
в 0 каналах
Get PRO
июнь '24
+3
в 0 каналах
Get PRO
май '24
+6
в 0 каналах
Get PRO
апрель '24
+131
в 0 каналах
Get PRO
март '24
+39
в 0 каналах
Get PRO
февраль '24
+115
в 0 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
22 июля0
21 июля+2
20 июля0
19 июля0
18 июля0
17 июля+1
16 июля0
15 июля+1
14 июля+2
13 июля0
12 июля0
11 июля+1
10 июля+1
09 июля0
08 июля+1
07 июля+1
06 июля+3
05 июля+9
04 июля+1
03 июля+3
02 июля+4
01 июля+1
Посты канала
2
Щас буду ныть, терпите. Хроники алко-симуляции. Я очень очень проебался с симуляцией маркет-даты. Как обычно идея верная, а в реализации допустил баги. --- Баг номер один: Представьте ситуацию что вам летит поток: ts - bbo ts - bbo ts - trade buy ts - bbo ts - bbo ts - trade buy ts - trade buy ts - trade buy ts - bbo и в среднем latency для trade 2 ms, а latency для bbo 1.8 ms. И если взять и просто к ts биржи приплюсовать эти средние latency, то все будет норм, но блять нет. В очень редких случаях так окажется, что bbo будет приходить из будущего. И эти редкие случаи поменяют структуру потока маркет-даты, будет казаться что предиктов нет, как раз потому что сам поток смотрит в будущее. (на самом деле у меня latency это распределение, но даже если сделать фиксированные числа то проблема никуда не денется) --- Баг номер два: float / decimal в маркет-дате. Думаете я не знаю про прикольчики чисел с плавающей точкой? Конечно знаю, но это помешало мне проебаться с ними в очередной раз. Берем timestamp от биржи $x (он обычно обрезан до 1 ms). Добавляем к нему latency, например, 2.1 ms. Получаем в одном случае 1784327611.3758000, а в другом 1784327611.3758001 Сортируем события по времени доставки - и тем самым меняем порядок потока. Ахаха блять, пора переходить на int us. --- Комбо из этих двух багов заставит переделать ВСЕ тесты и пересмотреть ВСЕ решения за последние полгода. Хнык-хнык типа? #hellcode #datastream #chronicles
157
3
Эта картинка идеально иллюстрирует всю суть дебага алготрейдинга: хер пойми шо происходит
Эта картинка идеально иллюстрирует всю суть дебага алготрейдинга: хер пойми шо происходит
287
4
ALKO_trading Chat is being protected by @Safeguard Click below to verify you're human
ALKO_trading Chat is being protected by @Safeguard Click below to verify you're human
1
5
Хотите расскажу самый простой способ филировать toxic flow? Это никогда не стоять на верхушке стакана. То есть вам надо напилить проверку, что если ваш ордер вдруг стал лучшим в стакане - то надо сняться и переставить я глубже. Это не отфильтрует токсичные сделки полностью, но это самый простой и быстрый способ срезать половину говна. В каком-то смысле вы перекраивание ответственность за фильтрацию на того, кто стоит выше вас - его снесут первым. Почему это работает? Потому то токсик это информированный тейкер, и он тейкает обычно именно верхушку стакана. И если верхушка улетает - то пора и нам сниматься. #toxicflow
315
6
Нет текста...
419
7
я не могу это не запостить: турбо-крипто-анал-безнал
я не могу это не запостить: турбо-крипто-анал-безнал
515
8
Как раскладыдвается PNL У меня есть система, которая раскладывает итоговый PNL каждой сделки (и любые группы/срезы) на формулу, по которой я могу понять где была пройобка и почему. Это все встроено в execution и статистика пишется почти real-time. PNL состоит из (считайте сумму всех параметров): 1. jitter main/hedge 2. clamp = как именно я перенес цену hedger в main space и сколько там bps добавилось/отнялось 3. true price = сколько bps добавил trueprice и почему; 4. offset = с каким отступом от trueprice я стоял (сетка ордеров) 5. toxic hedge = насколько hedger был хуже в момент trade 6. toxic fill = насколько hedger был хуже в момент fill (trade time это на hedger'e, а fill у меня) 7. hedger loss = насколько похерился hedger пока я добежал до него по сети; 8. hedger slippage = какое проскальзывание на hedger'e я получил. 9. fees То есть PNL = jitter + clamp + true + offset + toxic hedge + toxic fill + hedger loss + hedger slippage + fee maker main + fee hedger taker. И я вижу каждую из этих колонок в симуляторе и в real-time исполнении, по этим колонками можно понять что происходит. Например - высокий hedger slippage - надо уменьшать сайзы или увеличивать offset или не хеджироваться (если возможно) - hedger loss - у меня не хватает latency чтобы добежать до hedger'a - toxic hedge - в момент когда мне прилелел fill - цена hedger'a уже была в жопе, и я проигрываю потому что не увидел удар со стороны - ищем источник toxic'a - toxic fill - я видел новую цену, но не успел отмениться, надо шлифовать latency cancel. - и тд То есть я не гадаю почему не работает, я знаю причину сразу. #chronicles
500
9
У вас тоже пост на английском стал? какого хера телега его перевела сама?
403
10
Биржи bitmart & bingx вышли на новый уровень wash'a Бля, я не хотел это писать, но раз они УЖЕ это сделали - можно и написать :) Хотя я не исключаю что они это сделали случайно. Занимательная история в духе poloniex size-imbalance, только с фейковыми торгами. 1. Обычно когда биржа рисует торги, то она ставит ордер в стакан, потом сама его тейкает - и получается создается видимость реальной активности. Есть разные способы это красиво маскировать: несколько ордеров за раз, разные сайзы, разный интервал. 2. Но все способы маскировки херовые, потому что все эти fake-трейды не приводят к price discovery: трейд никак не влияет на цену, ни на какой другой бирже это никак не отражается. 3. Но вот у bitmart трейды начали предсказывать движение на binance. При этом я на 100500% уверен что это wash. Но суко как? Не могу сказать что это прям лютый предикт, но примерно EV=60/40 (оно считается по-сложнее, я упростил) 4. Оказалось, что bitmart копирует не только стаканы с других бирж, но и делает wash на основе ленты принтов (трейдов). 5. Например, они по быстрому линку смотрят на ленту принтов okx и у себя рисуют точно такие же трейды. Прикиньте какие хитрецы? 6. В итоге часть трейдов (не все конечно) на 0.5-1 ms будут раньше, чем это отразится на binance. PS: даже если не иметь супер-быстрые линки за много-денег - все равно есть какие-то ну очень извращенные способы получить сигнал с другой биржи быстрее public internet / aws-ali-backbone. #datastream #toxicflow
417
11
Спасибо!
395
12
Премиум подписчики, нажмите пожалуйста сюда - https://t.me/boost/alko_trading
396
13
Нет текста...
426
14
Книга наглядно иллюстрирует как из opensource-решений собирать HFT/low-latency-infra. ЗЫ: все остальные совпадения случайны
Книга наглядно иллюстрирует как из opensource-решений собирать HFT/low-latency-infra. ЗЫ: все остальные совпадения случайны
365
15
Продолжение поста, все не влезло в один: 5. В зависимости от биржи будет разный алгоритм cancel-place: - если на бирже есть команда move - то при росте мы для sell-side делаем cancel+place, для buy-side - move. И наоборот. - но на некоторых move конченный и так нельзя. - нужно делать force cancel: не важно мы сейчас размещаем ордер или нет - cancel шлется всегда досрочно (а это подразумевает адресацию ордеров по clientOrderId, которая на всех биржах разная) - нужно делать parallel cancel: если надо отменить ордера, то сначала делаем cancel в N потоков в разные соединения, потом дожидаемся cancel ack, потом только делаем place. - но на самом деле нихуя, потому что после cancel-ack надо убедиться что у нас есть новая цена и мы никуда не едем, и только потом делалем place. - и надо считать hitrate performance на каждое cancel/place соединение, чтобы знать какое быстрее отменяет, какое быстрее размещает, и рубать слабые. - а потом на некоторых tier1-монетах без линейной апроксимации цены невозможно выставить ордер: то есть надо считать не просто какая цена, а какая цена будет через reaction latency, которая равна скорости hedge > main > hedge. --- 6. И это еще без контроля api limits (о май гад), без мониторинга latency degradation: потому что нельзя ставить ордер, если ты не сможешь его отменить вовремя. Иногда спасает dead switch, но он не у всех есть. --- 7. И это еще без trueprice (toxic flow фильтрации), который возводит этот пиздец в куб. --- Ставь лайк если хоть что-то понял. А если понял все - скорее всего, у тебя уже есть своя такая же ебаная FSM и ты сейчас ловишь в ней race condition. #chronicles
389
16
Сегодня поговорим за алгоритм котирования (алгоритм перестановки ордеров в стакане) Это достаточно адовая FSM-машина, и там есть пачка приколов, которые не сразу понимаешь, а даже если и понял - хер сделаешь быстро. --- 1. На первом уровне hello-world-art: - у нас есть main - биржа где выставляем ордера, где котируем - есть hedger - биржа с fair/reference-price на которую будем бежать хеджироваться - мы берем цену hedger'a, к ней добавляем/отнимаем желаемую высоту и вставляем лимитку в main - как только цена hedger'a поменялась - переставляем лимитку на новую высоту hedger +/- profit На этом экскурсия в beginner-level закончилась, а теперь ебучая жесть: --- 2. Что делать если hedger и main ходят на разных высотах? Надо высчитать jitter - смещение насколько hedge выше/ниже main, и постоянно его учитывать. Правильно оно называется bias - но я называю jitter, и хули вы мне сделаете :) Смещение динамическое, меняется во времени, поэтому надо считать real-time EMA. Надо понять ее период - а это огород математики и симуляций. 2.1. На ебанутых монтетах (почти на всех) этот jitter надо считать в log space, а не линейно. То есть jitter = main/hedge, а не main-hedge. 2.2. На ебанутых монетах (почти на всех) jitter может меняться очень быстро, поэтому нужна защита которая не будет позволять его двигать быстрее условного 1 bps/hour, иначе появится конченный PNL drift: мы купили, потом jitter поменялся, мы продали - и фиксанули минус (или лютый плюс, но на tier1 это будет лютый минус). 2.3. только на один расчет jitter'a можно смело всадить полгода времени, и там не будет конца. --- 3. Нужен механизм main clamp: перенос цены hedger*jitter в main space. И это просто пиздец, я даже не уверен что это поймут: - что делать, если у вас есть hedger, есть jitter (которный защищен от дрейфа и поэтому всегда отстает) - и вы просто берете hedger x jitter, а потом все равно оказывается что спред main выше или ниже? - То есть вы как-бы временно НЕпопадаете в спред - и при размещении ордера вы получите post_only rejected. Шо делать? Это прекрасно если main спред широкий и вы всегда попадаете. А для tier1 вы не попадаете в 90% времени. - Поздравляю, надо одну сторону начинать котировать по main price: например, если main выше hedge, то sell вы будете котировать по main, а buy по hedge. - Поздравляю еще раз, так тоже делать нельзя: потому что если в этот момент hedger прыгнет вверх, то вы продолжаете котировать sell по main (который не меняется), а buy по hedge: вы просто поднимете buy выше, а sell не подвинете - и вас разъебут сразу же. У вас ведь jitter неверный, на самом деле он другой и hedge влияет на main все равно. Надо переносить движение hedger'a в main space, но у вас нет точки отсчета, которую еще хер посчитаешь правильно. --- 4. Нужен порог котирования (tolerance threshold): если цена hedger'a поменялась чуть чуть, то мы пока не переставляем ордера. 4.1. Порог котирования разный для разных монет: - меняется в зависимости от волатильности (привет нужна новая система которая считать real-time волатильность), - меняется от price.tick (привет тем биржам у которых price.tick динамический - вот вам бревно в жопу), 4.2. порог меняется зависимости от строны: если монета растет, то сначала надо отменять sell orders, а buy двигать плавнее, и наоборот. То есть в коде должен быть разный порядок cancel-place в зависимости от стороны. #chonicles
351
17
Как проебаться с EMA. Три раза Блядский йож, третий раз я проебываюсь EMA, из-за чего правильная идея нихера не работает. Я постоянно, ПОСТОЯННО горю на какой-то простейшей математике, поверх которой построена вся система. Сначала был баг в AVG. Потом был баг в EMA. Потом снова был баг в EMA - я уже писал про него, там инициализация была слишком долгая. А теперь бинго: если события прилетают дискретно, то обычную EMA использовать нельзя. Нужна Continuous EMA, она же EMA-DT. Потому что между событиями может пройти 1 ms, а может 500 ms, но обычная EMA считает, будто шаг времени всегда одинаковый. На длинных интервалах типа часа или дня на это плюс-минус похер. А вот если считать EMA в окне 1 секунда или 100 ms - начинается просто пиздец. Ты думаешь, что сглаживаешь данные по времени, а на самом деле сглаживаешь количество событий. В итоге снова надо перепроверять кучу тестов, потому что EMA теперь другая. Правильная идея (не факт). Правильные данные (точно нет). Неправильная формула (всегда да). Алготрейдинг, хули. #bugchain
481
18
Нет текста...
502
19
HFT - это бесконечная куча конечных конченных автоматов состояний (FSM): - свой веб-сокет - десяток FSM; - свой https - еще FSMки; - свой event loop - пара FSM; - управление соединениями - еще FSMки; - моделька тру прайса - тысячи FSM (сотни групп); - перестановшик ордеров - еще пара FSM; - супервизор - десяток FSM; - автоматичекий подбор сетапов - десяток FSM; - риск-менеджер - сотня FSM; - мониторинг - сотня FSM; - jitter - еще пара FSM; - execution - отдельные FSM под каждую биржу; и ты сидишь и бесконечно ловишь нескончаемый поток тупых и не очевижных багов и в голове постоянно context-switch между этими FSM. #hellcode
632
20
Сегодня я познал банальность (фраза не моя, mn - отдаю дань тебе): Представьте ситуацию что вы выставили лимитки вглубь стакана и переставляете их когда поменялась fair price / hedge price / true price. До сегодняшнего дня я переставлял лимитки всегда, как только true price меняется больше чем на price tick. Ну очевидно же, что остальные перестановки не имели смысла - смысл снимать и ставить в ту же цену. Но, я вас обрадую: перестановки на 2 тика, 3 тика, 5 тиков - тоже не имеют смысла. Если переставлять я только после 5 тиков - то количество api запросов падает в 20 раз, а прибыль вырастает в 4. Потому что вы дольше стоите в стакане и получаете лучшее место в очереди прайс уровня. (Это зависит от монеты если шо) Я тут ебусь со сложными моделями фильтрации токсика, предсказанием хеджера наперед, и это все хуйня по сравнению с "просто меньше дергайся" #trueprice
618