> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# TWAP

> Разбиение крупного ордера по времени, чтобы он забирал ликвидность по мере пополнения стакана, — с догоном при недоборе порций и рандомизацией против предсказуемости.

Крупный ордер, взятый разом, платит за собственное влияние на цену: он идёт по стакану, и каждый съеденный уровень хуже предыдущего. Ордер TWAP вместо этого растягивает тот же объём во времени, забирая порцию через равные интервалы, чтобы между ними стакан успевал пополниться.

Размен здесь явный. Вы принимаете **ценовой риск на окне исполнения** — рынок может уйти против вас, пока вы набираете, — в обмен на отказ от влияния на цену, которое дало бы исполнение разом.

<h2 id="parameters">
  Параметры
</h2>

| Параметр              | Значение                                                               |
| --------------------- | ---------------------------------------------------------------------- |
| **Общий объём**       | Полное количество к исполнению, задаётся в активе или в валюте расчёта |
| **Длительность**      | На какой срок растянуть — от 5 минут до 24 часов                       |
| **Интервал**          | Время между порциями                                                   |
| **Рандомизация**      | Менять объёмы порций вместо отправки одинаковых                        |
| **Только уменьшение** | Ограничить ордер закрытием существующей позиции                        |

Из длительности и интервала:

$$
N = \frac{\text{длительность}}{\text{интервал}} + 1 \qquad
\text{базовая порция} = \frac{Q}{N}
$$

Первая порция уходит сразу при запуске, затем на каждом интервале и ещё раз в конце окна.

<h2 id="validation-before-it-starts">
  Проверка перед запуском
</h2>

TWAP отклоняется сразу, если он заведомо не сможет отработать так, как задан:

* Порции должны быть достаточно крупными, чтобы быть допустимыми ордерами: общий объём, поделённый по расписанию, не может оказаться ниже минимального размера ордера на рынке
* Порции не должны превышать максимальный размер ордера на рынке
* Полный объём должен обеспечиваться начальной маржой
* Если задано «только уменьшение», общий объём не должен превышать текущую позицию

Ранний отказ здесь важен. TWAP, который на середине обнаруживает, что его порции ниже минимума, оставляет вас с частично исполненным ордером, и аккуратно довести его до конца уже не получится.

<h2 id="execution-and-catch-up">
  Исполнение и догон
</h2>

Каждая порция отправляется как рыночный ордер с **ограничением проскальзывания 3%**. Порции попадают в первый блок после истечения очередного интервала, поскольку исполнением движет блокчейн, а не системные часы.

Если порция исполнилась меньше запланированного — тонкий стакан, достигнуто ограничение проскальзывания, — недобор не теряется. Расписание всё время сверяется с тем, сколько уже должно быть исполнено:

$$
\text{цель} = \frac{t_{\text{прошло}}}{t_{\text{длительность}}} \times Q
$$

Когда фактическое исполнение отстаёт от цели, следующие порции увеличиваются, чтобы догнать:

<div className="dg" data-dg="twap-catchup">
  <div className="dg-c" style={{aspectRatio:"720 / 286"}}>
    <svg className="dg-w" viewBox="0 0 720 286" aria-hidden="true">
      <path className="dg-rule dg-dash" d="M 400 24 L 400 250" />
    </svg>

    <div className="dg-b dg-plain dg-left" style={{left:"57.2222%",top:"35.6643%",width:"18.8889%",height:"9.7902%"}}><span className="dg-s dg-ink--orange">недобор</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"57.2222%",top:"48.2517%",width:"18.8889%",height:"9.7902%"}}><span className="dg-s dg-ink--sky">догон</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"77.7778%",top:"16.0839%",width:"22.2222%",height:"61.5385%"}}><span className="dg-t">Зачем предел</span><span className="dg-s">Стратегия, отвечающая на неликвидность ростом ордеров, сама становится тем влиянием, которого должна была избежать.</span><span className="dg-n">цель = прошло ÷ длительность × объём</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"61.1111%"}}><div className="dg-n">Шесть порций, всего 6,0 — порция 3 недобирает в тонком стакане</div></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"10.4895%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 1</span><span className="dg-bar-track"><span className="dg-bar-fill dg--blue" style={{left:"0%",width:"33.333%"}} /><span className="dg-bar-val" style={{left:"33.333%"}}>1.00</span></span></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"23.0769%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 2</span><span className="dg-bar-track"><span className="dg-bar-fill dg--blue" style={{left:"0%",width:"33.333%"}} /><span className="dg-bar-val" style={{left:"33.333%"}}>1.00</span></span></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"35.6643%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 3</span><span className="dg-bar-track"><span className="dg-bar-fill dg--orange" style={{left:"0%",width:"13.333%"}} /><span className="dg-bar-val" style={{left:"13.333%"}}>0.40</span></span></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"48.2517%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 4</span><span className="dg-bar-track"><span className="dg-bar-fill dg--sky" style={{left:"0%",width:"40.000%"}} /><span className="dg-bar-val" style={{left:"40.000%"}}>1.20</span></span></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"60.8392%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 5</span><span className="dg-bar-track"><span className="dg-bar-fill dg--sky" style={{left:"0%",width:"40.000%"}} /><span className="dg-bar-val" style={{left:"40.000%"}}>1.20</span></span></div>
    <div className="dg-bar" style={{left:"0.0000%",top:"73.4266%",width:"55.5556%",height:"9.7902%"}}><span className="dg-bar-lead" style={{width:"15.5000%"}}>Порция 6</span><span className="dg-bar-track"><span className="dg-bar-fill dg--sky" style={{left:"0%",width:"40.000%"}} /><span className="dg-bar-val" style={{left:"40.000%"}}>1.20</span></span></div>
    <div className="dg-lbl" style={{left:"55.5556%",top:"90.2098%"}}>3× базового объёма — предел</div>
  </div>
</div>

Важен именно предел. Догонять полезно, догонять без ограничений — нет: стратегия, отвечающая на неликвидность всё более крупными ордерами, сама становится тем влиянием на цену, которого должна была избежать. **Ни одна порция не превышает базовый объём более чем втрое**, поэтому наверстывание идёт постепенно.

Порцию, которая не прошла совсем, пропускают и фиксируют в отчёте. Стратегия не встаёт на паузу: одна неудачная порция в тонкий момент не должна подвешивать остаток ордера.

<h2 id="randomization">
  Рандомизация
</h2>

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

Одинаковые порции через одинаковые интервалы — это шаблон, а шаблон в потоке ордеров — информация для всех, кто наблюдает. Рандомизация убирает регулярность, не меняя общего объёма расписания.

Арифметика остатка при этом продолжает действовать. Рандомизация меняет объёмы, но не позволяет стратегии перебрать или оставить хвост в конце.

<h2 id="when-twap-is-the-right-tool">
  Когда TWAP уместен
</h2>

**Применяйте его**, когда ордер крупный относительно видимой глубины, когда время есть и когда средняя цена за окно — приемлемая цель.

**Не применяйте его**, когда позиция нужна прямо сейчас: TWAP — противоположность срочности. И не применяйте, когда у вас на уме конкретная цена: у TWAP нет ценового ориентира, только расписание по времени. Если цена важнее немедленности, лучше подойдут [ступенчатые ордера](/ru/trading/scale-orders) — они расставляют лимитные ордера в стакане по диапазону цен.

<Warning>
  TWAP не гарантирует полного исполнения. Порции — это рыночные ордера, ограниченные проскальзыванием, и в затяжном одностороннем движении они могут раз за разом недобирать. Догон ограничен сверху, поэтому окно, которое закончилось при ушедшем против вас рынке, может оставить ордер существенно недоисполненным.
</Warning>

<h2 id="where-to-go-next">
  Что дальше
</h2>

<CardGroup cols={2}>
  <Card title="Ступенчатые ордера" href="/ru/trading/scale-orders">
    Разбиение по цене вместо времени.
  </Card>

  <Card title="Рыночные ордера" href="/ru/trading/market-to-limit">
    Ограничение проскальзывания, которому подчиняется каждая порция.
  </Card>

  <Card title="Стакан заявок" href="/ru/trading/order-book">
    Как оценить, крупный ли ваш ордер относительно глубины.
  </Card>

  <Card title="Комиссии" href="/ru/programs/fees">
    Каждая порция — тейкерский ордер и платит тейкерскую комиссию.
  </Card>
</CardGroup>
