Руководство по интеграции
### Введение
При маркетмейкинге на волатильных криптоактивах ключевой риск дилера — **инвентарный риск** (inventory risk): накопление слишком большой длинной или короткой позиции, которая обесценится в случае направленного движения цены. Модель **Авелланеда-Стойкова** (Avellaneda-Stoikov) решает эту задачу, сдвигая цену предложения (reservation price) относительно среднего рынка (mid-price) в сторону, противоположную накопленному инвентарю.
### Резервационная цена (Reservation Price)
Вместо симметричного размещения лимитных ордеров вокруг текущей средней цены \(s\), маркетмейкер рассчитывает резервационную цену \(r\):
\[ r(s, q, t) = s - q \gamma \sigma^2 (T - t) \]
Где:
- \(s\) — текущая средняя цена (mid-price),
- \(q\) — текущий инвентарь (количество удерживаемых активов, положительное для лонга, отрицательное для шорта),
- \(\gamma\) — коэффициент неприятия риска (risk aversion),
- \(\sigma\) — волатильность цены актива,
- \(T - t\) — оставшееся время торговой сессии (в крипто-HFT часто принимается за 1 или нормированный шаг).
Когда инвентарь \(q > 0\) (накоплен лонг), резервационная цена \(r\) опускается ниже mid-price. Это заставляет алгоритм сдвинуть биды и аски вниз, тем самым делая продажу более вероятной, а покупку — менее вероятной.
### Оптимальный спрэд (Optimal Spread)
Расстояние от резервационной цены до ордеров покупки (\(\delta^a\)) и продажи (\(\delta^b\)) рассчитывается как:
\[ \delta^a + \delta^b = \gamma \sigma^2 (T - t) + \frac{2}{\gamma} \ln\left(1 + \frac{\gamma}{k}\right) \]
Где \(k\) отражает ликвидность и плотность книги ордеров (измеряется эмпирически по частоте исполнения рыночных ордеров в зависимости от спрэда).
### Практическая реализация в боте
1. **Котирование**: Бот выставляет бид на \(r - \delta^b\) и аск на \(r + \delta^a\).
2. **Динамический асимметричный спрэд**: При росте длинной позиции шаг покупки увеличивается (чтобы реже покупать), а шаг продажи сужается к спреду (чтобы быстрее сбросить инвентарь).
3. **Аварийный лимит**: Если инвентарь превышает `max_inventory` (0.05 BTC), новые лимитные ордера на покупку блокируются (`halt_new_quotes`), а накопленная позиция закрывается рыночным ордером для предотвращения токсичного зависания.
При маркетмейкинге на волатильных криптоактивах ключевой риск дилера — **инвентарный риск** (inventory risk): накопление слишком большой длинной или короткой позиции, которая обесценится в случае направленного движения цены. Модель **Авелланеда-Стойкова** (Avellaneda-Stoikov) решает эту задачу, сдвигая цену предложения (reservation price) относительно среднего рынка (mid-price) в сторону, противоположную накопленному инвентарю.
### Резервационная цена (Reservation Price)
Вместо симметричного размещения лимитных ордеров вокруг текущей средней цены \(s\), маркетмейкер рассчитывает резервационную цену \(r\):
\[ r(s, q, t) = s - q \gamma \sigma^2 (T - t) \]
Где:
- \(s\) — текущая средняя цена (mid-price),
- \(q\) — текущий инвентарь (количество удерживаемых активов, положительное для лонга, отрицательное для шорта),
- \(\gamma\) — коэффициент неприятия риска (risk aversion),
- \(\sigma\) — волатильность цены актива,
- \(T - t\) — оставшееся время торговой сессии (в крипто-HFT часто принимается за 1 или нормированный шаг).
Когда инвентарь \(q > 0\) (накоплен лонг), резервационная цена \(r\) опускается ниже mid-price. Это заставляет алгоритм сдвинуть биды и аски вниз, тем самым делая продажу более вероятной, а покупку — менее вероятной.
### Оптимальный спрэд (Optimal Spread)
Расстояние от резервационной цены до ордеров покупки (\(\delta^a\)) и продажи (\(\delta^b\)) рассчитывается как:
\[ \delta^a + \delta^b = \gamma \sigma^2 (T - t) + \frac{2}{\gamma} \ln\left(1 + \frac{\gamma}{k}\right) \]
Где \(k\) отражает ликвидность и плотность книги ордеров (измеряется эмпирически по частоте исполнения рыночных ордеров в зависимости от спрэда).
### Практическая реализация в боте
1. **Котирование**: Бот выставляет бид на \(r - \delta^b\) и аск на \(r + \delta^a\).
2. **Динамический асимметричный спрэд**: При росте длинной позиции шаг покупки увеличивается (чтобы реже покупать), а шаг продажи сужается к спреду (чтобы быстрее сбросить инвентарь).
3. **Аварийный лимит**: Если инвентарь превышает `max_inventory` (0.05 BTC), новые лимитные ордера на покупку блокируются (`halt_new_quotes`), а накопленная позиция закрывается рыночным ордером для предотвращения токсичного зависания.