<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>FactChain</title><generator>teletype.in</generator><description><![CDATA[FactChain]]></description><image><url>https://img1.teletype.in/files/0d/c0/0dc0694d-ab5c-43cf-9541-950b36b6fc6d.png</url><title>FactChain</title><link>https://teletype.in/@factchain</link></image><link>https://teletype.in/@factchain?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=factchain</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/factchain?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/factchain?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 22 Sep 2026 14:07:00 GMT</pubDate><lastBuildDate>Tue, 22 Sep 2026 14:07:00 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@factchain/kyXkyTpqTNC</guid><link>https://teletype.in/@factchain/kyXkyTpqTNC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=factchain</link><comments>https://teletype.in/@factchain/kyXkyTpqTNC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=factchain#comments</comments><dc:creator>factchain</dc:creator><title>УЛЬТИМАТИВНЫЙ ГАЙД НА HFT</title><pubDate>Tue, 15 Sep 2026 12:09:17 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/78/96/78969e61-6748-4ea1-b4c5-045e31463abc.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/99/77/997790cc-f567-465d-a7dc-b50ffe53ee81.png"></img>Не так давно я увидел серию постов на канале ALKO трейдинг, где автор собрал самые важные, на его взгляд, термины для разработки HFT-систем и самого алгоритмического трейдинга. Мне показалось хорошей идеей объяснить вам эти термины в удобном формате.]]></description><content:encoded><![CDATA[
  <figure id="TNUx" class="m_column">
    <img src="https://img2.teletype.in/files/99/77/997790cc-f567-465d-a7dc-b50ffe53ee81.png" width="1672" />
  </figure>
  <p id="x46v">Не так давно я увидел серию постов на канале <a href="https://t.me/alko_trading/1696" target="_blank">ALKO трейдинг</a>, где автор собрал самые важные, на его взгляд, термины для разработки HFT-систем и самого алгоритмического трейдинга. Мне показалось хорошей идеей объяснить вам эти термины в удобном формате.</p>
  <p id="MtmP">Потому что сам по себе список мало помогает. Можно запомнить, что такое очередь заявок, идемпотентность и математическое ожидание, но так и не понять, почему эти вещи встречаются в одной торговой программе.</p>
  <p id="C48w">Поэтому пойдём другим путём. Представим, что мы создаём робота: сначала разберёмся, что происходит на бирже, затем проследим путь данных и заявки, а после перейдём к стратегиям, проверке результатов и риску.</p>
  <p id="AGRS">По дороге станет понятно, какие термины описывают сам рынок, какие помогают не сломать программу, а какие нужны, чтобы не принять случайное везение за работающую стратегию.</p>
  <p id="MWVJ">Во всех примерах будет вымышленный актив ABC. Цены, комиссии, задержки и результаты тоже учебные. Они нужны для объяснения механики, а не показывают доходность какой-либо стратегии.</p>
  <p id="2HMW"><strong>Главная мысль: торговому роботу недостаточно правильно предсказать цену. Он должен получить достоверные данные, успеть действовать, реально исполнить заявку и правильно посчитать результат.</strong></p>
  <hr />
  <p id="VpsD"><strong>1. Что мы вообще собираемся автоматизировать</strong></p>
  <p id="eLyY">Алгоритмическая торговля, или алготрейдинг, означает, что хотя бы часть торговых решений выполняет программа. Например, она сама выбирает момент покупки, рассчитывает объём или разбивает большую заявку на несколько маленьких.</p>
  <p id="Pik9">HFT, High-Frequency Trading, относится к области, где особенно важны короткие временные горизонты, высокая скорость обработки событий и исполнения. Здесь задержка может менять не только удобство работы, но и экономический смысл сделки.</p>
  <p id="AeEo">Представим, что ABC обычно торгуется около 100. В какой-то момент продавец быстро продаёт большой объём, и цена опускается до 99,95. Робот предполагает, что это временное отклонение: продавец закончит, и цена частично восстановится.</p>
  <p id="R5yK">Такая идея называется <strong>Mean Reversion</strong>, возвратом к среднему или некоторому нормальному уровню.<br /><br />Но слово &quot;среднее&quot; здесь опасно понимать буквально. Рынок не обязан возвращаться к вчерашней цене, к круглому числу 100 или к линии на графике. Нормальный уровень тоже может меняться. Поэтому робот должен отличить временное отклонение от ситуации, когда появилась новая информация и актив действительно стал дешевле.</p>
  <p id="FFjB">Если программа покупает любое падение только потому, что &quot;раньше было дороже&quot;, это ещё не модель возврата. Это непроверенное предположение.</p>
  <p id="xKkL">Прежде чем обсуждать, как его проверять, нужно понять, что именно программа видит на бирже.</p>
  <hr />
  <p id="mF8g"><strong>2. У рынка нет одной-единственной цены</strong></p>
  <p id="AQ5G">Представим, что лучший покупатель готов купить ABC по 99,99, а лучший продавец готов продать по 100,01.</p>
  <p id="Aa2R">Лучшее предложение купить называется <strong>Bid</strong>, лучшее предложение продать называется <strong>Ask</strong>. Их разница, 0,02, называется <strong>Bid-Ask Spread</strong>, спредом.</p>
  <p id="1N0J">Посередине находится <strong>Mid Price</strong>:</p>
  <p id="lmIt"><code>Mid = (Bid + Ask) / 2</code></p>
  <p id="mfQo">В нашем случае Mid равен 100.</p>
  <p id="EIVU">Но купить по 100 прямо сейчас может быть невозможно. Mid является удобной точкой отсчёта, а не обещанием исполнения.</p>
  <p id="eOCb">Если вы хотите купить немедленно, обычно придётся взаимодействовать с продавцами на Ask. Если хотите продать немедленно, с покупателями на Bid. Поэтому две программы могут показывать одинаковую &quot;рыночную цену&quot;, но оценивать стоимость входа и выхода по-разному.</p>
  <p id="oiZa">Все ожидающие заявки образуют <strong>Limit Order Book</strong>, или LOB, стакан заявок. В нём находятся не только лучшие цены. Например, покупатели готовы купить 200 ABC по 99,99, ещё 700 по 99,98 и 1500 по 99,97. Это разные уровни <strong>Market Depth</strong>, глубины рынка.</p>
  <p id="IYEQ">С глубиной связана <strong>Liquidity</strong>, ликвидность. Она отвечает на более широкий вопрос: насколько легко совершить нужную сделку без большого ухудшения цены. Важен не только видимый объём, но и то, насколько он устойчив и восстанавливается после сделок.</p>
  <p id="fZ8x">Биржа также определяет <strong>Tick Size</strong>, минимальный шаг цены, и <strong>Lot Size</strong>, допустимый шаг количества. При шаге цены 0,01 нельзя поставить 100,005. При шаге количества 0,1 нельзя отправить 0,15, если правила требуют кратности этому шагу. Минимальный объём заявки и минимальная денежная стоимость могут задаваться отдельными ограничениями. </p>
  <p id="hLXy">Для маленьких изменений удобно использовать базисные пункты, <strong>bps</strong>. Один базисный пункт равен 0,01%. Поэтому 10 bps составляют 0,1%, а при цене 100 движение на 1 bp составляет 0,01.</p>
  <figure id="LBJD" class="m_column">
    <img src="https://img1.teletype.in/files/c1/1f/c11f32f7-c5b6-40e5-998d-e9d1692bb478.png" width="1254" />
  </figure>
  <p id="Fw6f"><strong>Запомнить здесь стоит одно: Mid показывает середину рынка, Bid и Ask показывают условия немедленной продажи и покупки.</strong></p>
  <hr />
  <p id="zqQH"><strong>3. Почему одинаковая цена не означает одинаковую вероятность сделки</strong></p>
  <figure id="EKcB" class="m_column">
    <img src="https://img4.teletype.in/files/fa/fb/fafbf5b4-86aa-4d18-b07a-04b90fa5f877.png" width="1254" />
  </figure>
  <p id="oL2y">Допустим, вы выставили покупку по лучшему Bid. Теперь можно считать, что ближайший продавец продаст именно вам?</p>
  <p id="Fopc">Нет. По этой цене уже могут стоять другие покупатели.</p>
  <p id="cWA8">Порядок исполнения определяет <strong>Matching Engine</strong>, механизм сопоставления заявок на бирже. Он решает, какие встречные заявки можно исполнить и кому достанется доступный объём.</p>
  <p id="pPkl">При <strong>Price-Time Priority</strong> сначала учитывается цена, затем время. Покупатель с более высокой ценой получает преимущество. Среди покупателей с одинаковой ценой раньше обслуживается тот, кто раньше занял очередь. Такой порядок на одном уровне связан с <strong>FIFO</strong>, First In, First Out: первым пришёл, первым обслужили.</p>
  <p id="E1DC">Если до вас по 99,99 уже стояло 10 000 ABC, ваша заявка на 100 ABC окажется позади них. Это ваше <strong>Queue Position</strong>, положение в очереди.</p>
  <p id="2HKq">Очередь постоянно меняется. Одни заявки исполняются, другие отменяются, новые добавляются. Эти изменения называются <strong>Queue Dynamics</strong>. Исчезновение объёма впереди из-за исполнения или отмен называют <strong>Queue Depletion</strong>, уменьшением очереди.</p>
  <p id="bkdU">Но FIFO не является единственным правилом. При <strong>Pro-Rata Matching</strong> доступное исполнение распределяется между заявками в зависимости от их размера. Существуют гибридные алгоритмы, дополнительные приоритеты и специальные правила для отдельных участников. Поэтому модель очереди должна соответствовать конкретной площадке. </p>
  <p id="Smf1">Есть и невидимая часть рынка. <strong>Hidden Liquidity</strong> означает ликвидность, которую публичный стакан не показывает полностью. Например, <strong>Iceberg Order</strong>, айсберг-заявка, может иметь общий объём 10 000, но показывать только 100. После исполнения видимой части появляется следующая. Порядок её приоритета зависит от биржевых правил.</p>
  <p id="3v7x">Получается важная разница: &quot;я стою по лучшей цене&quot; не означает &quot;я стою первым&quot; и тем более не означает &quot;меня обязательно исполнят&quot;.</p>
  <p id="nWv3"><strong>Цена отвечает на вопрос &quot;по сколько&quot;. Очередь отвечает на вопрос &quot;дойдёт ли до нас дело&quot;.</strong></p>
  <hr />
  <p id="6dHL"><strong>4. Как заявкой объяснить бирже, чего мы хотим</strong></p>
  <p id="EcaO">Допустим, ABC нужен нам немедленно.</p>
  <p id="qscn">Можно отправить <strong>Market Order</strong>, рыночную заявку. Мы просим купить по доступным предложениям. Если на ближайшем Ask объёма мало, заявка может пройти по нескольким более дорогим уровням. Срочность повышается, но точная цена заранее не известна. Даже рыночная заявка не отменяет торговые остановки, защитные ограничения и другие правила площадки.</p>
  <p id="QKvh">Другой вариант, <strong>Limit Order</strong>, лимитная заявка. Покупка с лимитом 100 означает: не покупать дороже 100. Продажа с лимитом 100 означает: не продавать дешевле 100. Цена ограничена, но исполнение не гарантировано.</p>
  <p id="dsEr">При этом лимитная заявка необязательно будет ждать в стакане. Если Ask равен 99,98, покупка с лимитом 100 может исполниться сразу.</p>
  <p id="9NfR"><strong>Stop Order</strong>, стоп-заявка, сначала ждёт условия активации. Например: когда выбранная биржей контрольная цена опустится до 95, активировать продажу. После активации это может быть рыночная или лимитная заявка в зависимости от типа. Поэтому стоп на 95 не гарантирует продажу по 95. Если рынок перескочил сразу к 90, доступная цена может оказаться намного хуже. </p>
  <p id="xVAM">Кроме цены, заявке задают срок и способ исполнения.</p>
  <p id="hOQZ">При <strong>IOC</strong>, Immediate or Cancel, биржа исполняет то, что доступно немедленно, и отменяет остаток. Хотели купить 1000, нашли 600, получили 600.</p>
  <p id="FKTU">При <strong>FOK</strong>, Fill or Kill, требуется весь объём немедленно. Если доступно только 600 из 1000, сделка не происходит.</p>
  <p id="1HCK"><strong>GTC</strong>, Good Till Cancelled, оставляет заявку действовать до исполнения или отмены с учётом правил биржи. <strong>GTD</strong>, Good Till Date, задаёт конкретное время окончания. <strong>Day Order</strong> действует в пределах соответствующего торгового дня или сессии.</p>
  <figure id="AkCW" class="m_column">
    <img src="https://img3.teletype.in/files/ea/a1/eaa1ee00-11c8-4d66-81fa-4e476cbc2859.png" width="1254" />
  </figure>
  <p id="cK7n">Эти условия называют инструкциями времени действия заявки. Они отвечают не на вопрос &quot;выгодна ли сделка&quot;, а на вопрос &quot;как долго и при каких условиях биржа должна пытаться её исполнить&quot;.</p>
  <hr />
  <p id="lb4g"><strong>5. Дополнительные условия, которые меняют поведение заявки</strong></p>
  <p id="K5uM">Теперь предположим, что мы хотим именно ждать покупателя или продавца, а не исполняться немедленно.</p>
  <p id="uO5w">Для этого существует <strong>Post-Only</strong>. Такая инструкция требует, чтобы заявка добавила ликвидность, а не сразу забрала чужую. Если цена пересекает встречную сторону, площадка может отклонить, отменить или изменить заявку по своим правилам. Поэтому точное поведение нужно читать в документации, а не выводить из названия.</p>
  <p id="JCGA">Для закрытия позиции полезен <strong>Reduce-Only</strong>. Допустим, у нас куплено 10 контрактов, а программа отправила продажу 20. Без специального ограничения можно не только закрыть покупку, но и открыть продажу ещё на 10. Reduce-Only предназначен для того, чтобы заявка только уменьшала существующую позицию. Порядок обработки нескольких таких заявок тоже зависит от площадки.</p>
  <p id="V8mp">Иногда цену заявки привязывают к рыночному ориентиру. Это <strong>Pegged Order</strong>. Например, заявка должна следовать за лучшим Bid с определённым отступом. <strong>Midpoint Order</strong> ориентируется на середину между Bid и Ask. На некоторых рынках такие заявки взаимодействуют со скрытой ликвидностью.</p>
  <p id="omUk"><strong>Hidden Order</strong> скрывает объём заявки от публичного отображения. Это не делает её невидимой для самой биржи и не гарантирует такой же приоритет, как у отображаемых заявок.</p>
  <p id="7ZZf">Когда нужно поменять цену или количество, используется <strong>Cancel/Replace</strong> либо предусмотренный площадкой механизм изменения. Важно знать, сохраняется ли очередь. Уменьшение объёма, увеличение объёма и изменение цены могут иметь разные последствия.</p>
  <p id="So0Q">Если требуется убрать сразу много заявок, применяется <strong>Mass Cancel</strong>, массовая отмена.</p>
  <p id="BRxr">Наконец, два наших алгоритма могут случайно выставить встречные заявки и заключить сделку друг с другом. Это <strong>Self-Trading</strong>. Механизм <strong>Self-Trade Prevention</strong>, STP, позволяет предотвращать такое сопоставление. Например, биржа отменяет одну из конфликтующих заявок. Какую именно, определяется настройкой и правилами.<br /></p>
  <figure id="uskl" class="m_column">
    <img src="https://img1.teletype.in/files/c8/f6/c8f65ecd-60a1-41df-9e94-76f5e81b241b.png" width="1254" />
  </figure>
  <p id="oola">У всех этих инструкций общий смысл: мы не просто называем цену, а уточняем, <strong>какое поведение биржи для нас допустимо</strong>.</p>
  <hr />
  <p id="sxCW"><strong>6. Кто платит за срочность и откуда берутся торговые издержки</strong></p>
  <p id="a7Ys">Участник, чья заявка добавляет доступную ликвидность, выступает как <strong>Maker</strong>. Участник, который её забирает, как <strong>Taker</strong>.</p>
  <p id="hEM7">Отсюда различие между <strong>пассивными</strong> и <strong>агрессивными</strong> заявками. Пассивная ждёт встречного участника. Агрессивная взаимодействует с уже доступным встречным предложением.</p>
  <p id="MlTu">Это не то же самое, что &quot;лимитная против рыночной&quot;. Лимитная заявка тоже может быть агрессивной. Более того, часть одной заявки иногда исполняется немедленно, а остаток остаётся ждать.</p>
  <p id="9ZlJ">Комиссии для maker и taker могут различаться. Иногда поставщик ликвидности получает <strong>Rebate</strong>, небольшое вознаграждение. Но отрицательная комиссия ещё не означает прибыльную сделку: можно получить выплату за исполнение и потерять намного больше на движении цены.<br /></p>
  <figure id="weGj" class="m_column">
    <img src="https://img1.teletype.in/files/40/0e/400e6071-b2f8-4c38-bd68-760e3341a33f.png" width="1254" />
  </figure>
  <p id="6Mtg">Теперь представим покупку 1000 ABC. Мы увидели Ask 100, но по этой цене доступно только 100 единиц. Остальные пришлось купить дороже. Разница между выбранным ориентиром и фактической ценой исполнения называется <strong>Slippage</strong>, проскальзыванием.</p>
  <p id="rAVf">Здесь важно назвать ориентир. Проскальзывание относительно цены в момент решения и относительно цены в момент прибытия заявки отвечает на разные вопросы.</p>
  <p id="vsuZ">Наша торговля также может сама изменить рынок. Большая покупка съедает предложения продавцов, после чего цены становятся выше. Это связано с <strong>Price Impact</strong> и <strong>Market Impact</strong>. Термины употребляют с пересечением: иногда первым называют изменение цены от потока сделок, а вторым более широкий эффект собственной торговли, включая реакцию других участников. В исследовании нужно прямо определить принятую трактовку. </p>
  <p id="Vd3z"><strong>Комиссия является явным счётом биржи. Проскальзывание и влияние на рынок проявляются в том, какие цены нам действительно достались.</strong></p>
  <p id="Xq79">Поэтому покупка по Bid и продажа по Ask не превращают весь видимый спред в чистую прибыль.</p>
  <hr />
  <p id="bQhO"><strong>7. Почему исполнение может быть плохой новостью</strong></p>
  <figure id="1ES6" class="m_column">
    <img src="https://img3.teletype.in/files/ad/50/ad5015db-b4fa-49f9-b30d-25b955ff38a5.png" width="1254" />
  </figure>
  <p id="CYSG">Мы выставили покупку по 99,99. Нас быстро исполнили. Через мгновение рынок оказался на 99,90.</p>
  <p id="xQ8F">Вроде бы исполнение успешное. Почему результат плохой?</p>
  <p id="dnXg">Потому что момент исполнения выбирали не мы. Мы выбрали цену и согласились ждать. Встречный участник решил продать именно тогда, когда наша цена стала привлекательна для него.</p>
  <p id="dzem">Это <strong>Adverse Selection</strong>, неблагоприятный отбор исполнений.</p>
  <p id="xqhg">Представьте 100 ситуаций. В 90 случаях после нашего сигнала цена растёт на 1 цент. В 10 случаях падает на 3 цента. Средний прогноз выглядит положительно:</p>
  <p id="cX9A"><code>(90 × 1 - 10 × 3) / 100 = 0,6 цента</code></p>
  <p id="VF77">Но наша лимитная покупка исполнилась только в 10 хороших случаях и во всех 10 плохих. Среди реальных исполнений результат уже другой:</p>
  <p id="q4SM"><code>(10 × 1 - 10 × 3) / 20 = -1 цент</code></p>
  <p id="xeA9">Сигнал в среднем был полезным. Полученные нами сделки оказались убыточными.</p>
  <p id="Uk6o">Поток, против которого особенно опасно предоставлять ликвидность, называют <strong>Toxic Flow</strong>, токсичным потоком. Например, более быстрый участник видит новое движение на другой площадке и успевает продать в нашу устаревшую покупку.</p>
  <p id="hAMm">Поэтому <strong>Fill Probability</strong>, вероятность исполнения, рассматривают вместе с <strong>Probability of Adverse Move</strong>, вероятностью неблагоприятного движения. Нас интересует не просто &quot;исполнят ли заявку&quot;, а &quot;что обычно происходит после исполнения именно таких заявок&quot;.</p>
  <p id="GbNO">Причём исполнение может быть частичным. Заказали 1000, получили 120. Это <strong>Partial Fill</strong>. Оставшиеся 880 не следует считать ни купленными, ни автоматически отменёнными.</p>
  <p id="k4sM"><strong>Хорошая модель прогнозирует не только рынок. Она учитывает, какие ситуации рынок разрешит нам реально наторговать.</strong></p>
  <hr />
  <p id="xTtp"><strong>8. Как проверить качество исполнения через Markout</strong></p>
  <p id="LflZ">Чтобы оценить исполнение, посмотрим, куда рынок ушёл после него.</p>
  <p id="8Fv1">Одна распространённая договорённость для <strong>Markout</strong> такая: после покупки сравниваем будущий Mid с ценой исполнения, после продажи наоборот. Положительное значение означает, что выбранный будущий ориентир оказался в нашу пользу.</p>
  <p id="Hj6r">Купили по 99,99. Через 100 миллисекунд Mid равен 100,02. Markout составляет +0,03.</p>
  <p id="FmuM">Купили по 99,99. Через 100 миллисекунд Mid равен 99,96. Markout составляет -0,03.</p>
  <figure id="GMtC" class="m_column">
    <img src="https://img3.teletype.in/files/a6/df/a6df3daa-623c-4836-8f8d-bc3aae9ced6d.png" width="1312" />
  </figure>
  <p id="jOxR">Если измерять результат через 1, 10, 100 миллисекунд, секунду и дальше, получаются <strong>Markout Curves</strong>, кривые результата после исполнения. Они показывают, на каком горизонте наши сделки выглядят хорошими и когда начинает проявляться неблагоприятное движение.</p>
  <p id="xDeR"><strong>Expected Markout</strong> является ожидаемым, средним markout для некоторого класса исполнений. Например, для покупок после определённого дисбаланса стакана.</p>
  <p id="h8wI">Однако markout не равен зафиксированной прибыли. Мы могли оценить позицию по будущему Mid, но ещё не продали её. Для выхода могут понадобиться комиссия, ожидание или пересечение спреда.</p>
  <p id="oIlH">Есть и важная бухгалтерская ловушка. Если мы купили по 99,99, текущий Mid был 100, а будущий стал 99,96, итоговый markout уже содержит первоначальное преимущество +0,01 и последующее движение -0,04.</p>
  <p id="Bn9K">Нельзя сначала взять этот итог -0,03, а затем ещё раз вычесть те же -0,04 как adverse selection.</p>
  <p id="ARcg">То же касается <strong>Expected Value после комиссий</strong>. Нужно выбрать согласованный способ расчёта. Например, оценить вероятность исполнения, ожидаемый результат при исполнении и ещё не включённые издержки выхода. Нельзя складывать названия расходов так, чтобы один убыток учитывался дважды.</p>
  <p id="gbBl"><strong>Удобная проверка: каждой вычитаемой величине должна соответствовать отдельная потеря, которой ещё нет в исходной оценке.</strong></p>
  <hr />
  <p id="hDkV"><strong>9. Заявка живёт дольше, чем вызов функции</strong></p>
  <figure id="2dMr" class="m_column">
    <img src="https://img1.teletype.in/files/c1/43/c1431ebe-d997-4cfb-8ea5-2497e5a1f2da.png" width="1254" />
  </figure>
  <p id="JC57">В коде легко написать: &quot;Отправили заявку, значит она стоит&quot;. Но между этими событиями несколько этапов.</p>
  <p id="NvYc">Сначала заявка существует только в нашей программе. Потом сообщение отправлено. Затем оно может быть получено биржей, проверено, принято и исполнено полностью или частично.</p>
  <p id="oqtc"><strong>Order Acknowledgement</strong>, ACK, подтверждает предусмотренный протоколом этап принятия. Это не обязательно исполнение. При быстром исполнении отдельное подтверждение ожидания в стакане вообще может не предшествовать сообщению о сделке.</p>
  <p id="n200">Если заявка не прошла проверку, приходит отказ с <strong>Reject Code</strong>. Код объясняет причину: неправильный шаг цены, недостаток обеспечения, недопустимый тип заявки, превышение лимита сообщений и так далее.</p>
  <p id="p5HD"><strong>Execution Reports</strong> сообщают о ходе обработки: принятии, частичных и полных исполнениях, отмене, отклонении, исправлении состояния.</p>
  <p id="kxpC">Чтобы не запутаться, заявку представляют как <strong>конечный автомат</strong>, Order State Machine. Это набор состояний и допустимых переходов между ними. Например: создана, отправлена, подтверждена, частично исполнена, полностью исполнена.</p>
  <p id="ug3a">Отмена добавляет отдельное состояние &quot;отмена запрошена&quot;. Оно не равно &quot;отменена&quot;.</p>
  <p id="e3mx">Представим, что наш Cancel ещё едет, а встречная заявка уже исполнила оставшийся объём. Получается <strong>race между Fill и Cancel</strong>, гонка исполнения и отмены. Мы запросили отмену, но биржа раньше обработала сделку. Это нормальный возможный исход, а не обязательно ошибка биржи. </p>
  <p id="zvjV">После отмены остатка также может поздно прийти сообщение о более раннем частичном исполнении. Поэтому &quot;получили отмену&quot; не означает &quot;эта заявка никогда ничего не исполнила&quot;.</p>
  <p id="gS3o"><strong>Команда описывает наше намерение. Отчёт биржи описывает то, что действительно произошло.</strong></p>
  <hr />
  <p id="gS8q"><strong>10. Потерянный ответ не означает потерянную заявку</strong></p>
  <p id="WR4d">Мы отправили покупку 100 ABC. Соединение оборвалось. Ответа нет.</p>
  <p id="ERib">Возможны разные истории: сообщение не дошло, заявка отклонена, заявка стоит, заявка частично исполнена или уже полностью исполнена. Это <strong>неопределённое состояние заявки</strong>, Unknown Order State.</p>
  <figure id="XDXH" class="m_column">
    <img src="https://img2.teletype.in/files/da/20/da2013ca-77d4-47c1-bbbb-02f44e644dd0.png" width="1254" />
  </figure>
  <p id="Y9Cp">Самое опасное решение: автоматически считать, что ничего не произошло, и купить ещё 100.</p>
  <p id="qi64">Для восстановления используют идентификаторы заявок, запросы открытых заявок, историю сделок и потоки отчётов. На институциональных площадках бывает <strong>Drop Copy</strong>, отдельный поток копий торговых сообщений для независимого контроля и учёта.</p>
  <p id="I9hB">Но и сообщения нужно обрабатывать внимательно. <strong>Duplicate Fill</strong> означает повторное получение сведений об одном исполнении. <strong>Late Fill</strong> означает позднее сообщение о реальной сделке. Первое нельзя прибавлять к позиции повторно, второе нельзя выбрасывать только потому, что оно пришло поздно.</p>
  <p id="ONKg">Нужна <strong>Reconciliation</strong>, сверка. Мы сравниваем собственный учёт заявок, сделок и позиций с данными площадки и других авторитетных систем учёта. Это не просто сравнение двух чисел: важны время снимка, полнота событий, последовательность и возможные исправления.</p>
  <p id="CeC5">Если программа считает позицию равной 100, а биржа показывает 120, мы сначала выясняем, какой поток отстал и какие исполнения отсутствуют. Во время сбоя один отдельный снимок тоже может быть запаздывающим.</p>
  <p id="VfxW">Отсюда практическое правило: <strong>пока истинное состояние неизвестно, нельзя продолжать увеличивать риск так, будто позиция точно известна</strong>.</p>
  <hr />
  <p id="KL9X"><strong>11. Что именно биржа показывает в рыночных данных</strong></p>
  <p id="6Cti">Публичные данные бывают разной подробности.</p>
  <p id="GXMJ"><strong>Level 1</strong>, L1, обычно описывает вершину рынка: лучшие Bid и Ask, иногда последнюю сделку и связанные размеры.</p>
  <p id="sT4s"><strong>Level 2</strong>, L2, даёт глубину по нескольким ценовым уровням. Мы видим, сколько суммарного объёма находится на каждой цене.</p>
  <p id="ROSQ"><strong>Level 3</strong>, L3, обычно обозначает более подробные данные об отдельных заявках. Но названия уровней не полностью унифицированы: всегда нужно смотреть состав конкретного потока.</p>
  <p id="mwUj">Более точное различие дают <strong>Market-by-Price</strong>, MBP, и <strong>Market-by-Order</strong>, MBO. MBP сообщает: &quot;На цене 100 стоит 5000&quot;. MBO позволяет увидеть отдельные заявки, из которых складывается этот объём. Это гораздо полезнее для исследования очереди. При этом скрытый объём и специальные правила всё равно могут ограничивать наблюдаемость. </p>
  <p id="Ue4A">Теперь о способе обновления.</p>
  <p id="GwLt"><strong>Snapshot</strong> является снимком состояния. Биржа говорит: &quot;Вот стакан на определённый момент&quot;.</p>
  <p id="aEeH"><strong>Incremental Feed</strong> передаёт изменения. Но здесь есть тонкость: &quot;инкрементальный&quot; означает, что передаются изменения относительно прошлого состояния, а не обязательно числа, которые нужно прибавлять. Одно API сообщает новый абсолютный объём уровня, другое изменение объёма. Перепутать эти варианты означает неправильно собрать стакан.</p>
  <figure id="4ZVb" class="m_column">
    <img src="https://img3.teletype.in/files/ec/3f/ec3f1ebe-c3f4-4854-a0dc-a6fd955ace33.png" width="1254" />
  </figure>
  <p id="hV6w">Наша программа должна соединить снимок и последующие события по правилам протокола. Именно поэтому подписаться на поток ещё недостаточно: нужен корректный сборщик локальной книги. </p>
  <hr />
  <p id="wHvF"><strong>12. Как доказать, что локальный стакан не выдуман</strong></p>
  <figure id="khnR" class="m_column">
    <img src="https://img3.teletype.in/files/64/b8/64b8051a-8be8-4503-8843-86359bc69bdb.png" width="1254" />
  </figure>
  <p id="UMza">Пусть обновления пронумерованы: 1001, 1002, 1003, 1004. Эти номера называются <strong>Sequence Numbers</strong>.</p>
  <p id="lgcn">Мы получили 1001, 1002 и 1004. Пропуск номера позволяет заметить <strong>Gap</strong>, разрыв последовательности. Его обнаружение называется <strong>Gap Detection</strong>.</p>
  <p id="40lZ">В пропущенном сообщении могли удалить лучшую покупку. Если продолжить как обычно, наша программа будет показывать ликвидность, которой больше нет.</p>
  <p id="WBlS">После разрыва нужен <strong>Feed Recovery</strong>, восстановление потока и состояния. В зависимости от биржи можно запросить пропущенные события, получить новый снимок или полностью повторить процедуру синхронизации.</p>
  <p id="tcMP">Отдельная проблема, <strong>Out-of-Order Events</strong>, возникает, когда события приходят не в ожидаемом порядке. Это особенно важно при объединении нескольких соединений или параллельной обработке.</p>
  <p id="F4bx"><strong>Дедупликация сделок и котировок</strong> убирает повторные сообщения. Но нельзя объявлять дублями любые одинаковые цены и объёмы. Две разные сделки могут иметь одинаковые значения. Нужны идентификаторы и правила конкретного потока.</p>
  <p id="MdLb">Если есть два резервных источника одинаковых данных, требуется <strong>Feed Arbitration</strong>: выбрать корректный источник, распознать одинаковые события и переключиться без двойного применения или пропуска.</p>
  <p id="BVK0">Наконец, сообщение может быть правильным, но старым. Это <strong>Stale Quote</strong>, устаревшая котировка. Открытое соединение не доказывает, что цены свежие.</p>
  <p id="5z0c"><strong>Правильный стакан требует трёх вещей: полноты, правильного порядка и свежести.</strong> Проверять только наличие соединения недостаточно. </p>
  <hr />
  <p id="CYFg"><strong>13. Почему время на бирже и время у нас не одно и то же</strong></p>
  <p id="DlYF">У события может быть несколько временных отметок.</p>
  <p id="SQyf"><strong>Exchange Timestamp</strong> ставит биржа. Но важно знать, чему именно соответствует эта отметка: сопоставлению заявок, подготовке сообщения или другому этапу.</p>
  <p id="WX2j"><strong>Receive Time</strong> показывает, когда сообщение получил наш сервер. Поэтому <strong>Exchange Time vs Receive Time</strong> является сравнением разных точек пути, а не двух взаимозаменяемых подписей.</p>
  <p id="qmGt">Если биржа написала 12:00:00.001, а мы получили сообщение в 12:00:00.008, хочется назвать разницу сетевой задержкой 7 миллисекунд. Но это корректно только при достаточно согласованных часах и понятных точках измерения.</p>
  <p id="gT4c"><strong>Clock Skew</strong>, расхождение часов, может полностью исказить картину. Один компьютер спешит на 5 миллисекунд, другой отстаёт на 3. Тогда события начинают выглядеть расположенными в неправильном порядке.</p>
  <p id="vbH7">Точность формата тоже не равна точности измерения. Девять цифр после секунды ещё не доказывают наносекундную точность.</p>
  <p id="WWH7">Для синхронизации применяют протоколы времени, например NTP и PTP. Для измерения длительности внутри процесса полезны монотонные часы: их показания не должны внезапно отступать назад после корректировки календарного времени.</p>
  <p id="tk5p">Особенно важна <strong>Cross-Venue Data Alignment</strong>, согласование данных разных площадок. Нельзя просто соединить строки по ближайшему timestamp и считать, что мы доказали, какая биржа двигается первой. Нужно учитывать часы, сетевые пути, накопление сообщений и смысл временных отметок.</p>
  <figure id="KSCO" class="m_column">
    <img src="https://img2.teletype.in/files/52/2b/522bc64d-3115-4ea5-9cdd-a5463b6aaa9d.png" width="1254" />
  </figure>
  <p id="92Fr">Иначе получится стратегия, которая зарабатывает не на запаздывании рынка, а на ошибке наших часов.</p>
  <hr />
  <p id="LStx"><strong>14. Почему одинаково выглядящие инструменты могут оказаться разными</strong></p>
  <p id="1BoS">Биржи называют поля и инструменты по-разному. Одна пишет <code>bidPrice</code>, другая <code>best_bid</code>, третья <code>b</code>.</p>
  <p id="edTe"><strong>Normalization рыночных данных</strong>, нормализация, приводит эти форматы к общей внутренней модели. Но хороший перевод сохраняет смысл, а не только переименовывает поля.</p>
  <p id="wjGn">Например, количество может означать монеты, контракты или денежный номинал. Если сложить их как одинаковые величины, получится бессмысленная глубина рынка.</p>
  <p id="4DdI"><strong>Symbol Mapping</strong> связывает биржевые обозначения с конкретными экономическими инструментами. BTC/USD, BTC/USDT, поставочный фьючерс и бессрочный контракт связаны с биткоином, но не являются одной и той же вещью.</p>
  <p id="Pstf">Чтобы различать их, используются <strong>Instrument Reference Data</strong>, справочные данные инструмента. В них находятся шаг цены, шаг количества, множитель контракта, валюта расчёта, дата истечения, торговый статус и другие параметры. </p>
  <p id="SnIX">Справочник тоже имеет историю. Сегодня контракт торгуется, завтра истёк. Сегодня шаг цены 0,01, позже другой. Исследование должно использовать параметры, действовавшие в рассматриваемый момент.</p>
  <p id="72tk">Это часть принципа <strong>Point-in-Time Data</strong>: знать не только значение, но и то, когда оно действительно было доступно и применимо.</p>
  <p id="LtAG">Простая проверка: если робот в историческом тесте использует сегодняшний список инструментов, сегодняшние комиссии и исправленные задним числом данные, он может незаметно получить информацию из будущего.</p>
  <hr />
  <p id="xIPN"><strong>15. Как данные добираются до программы: DNS, TCP и UDP</strong></p>
  <p id="HM6K">Прежде чем подключиться к бирже, программа должна найти сервер.</p>
  <p id="97fg">Человек использует имя вроде <code>api.exchange.example</code>, а сеть отправляет пакеты по адресам. <strong>DNS</strong>, Domain Name System, помогает преобразовать имя в нужные сетевые адреса. Ответы могут кэшироваться, адресов может быть несколько, а инфраструктура за именем может меняться.</p>
  <p id="fiWp">Дальше начинается транспорт.</p>
  <p id="q5ZK"><strong>TCP</strong> предоставляет приложению упорядоченный поток байтов. Он обнаруживает потери и восстанавливает передачу. Но TCP не знает, где в этом потоке заканчивается одна ваша бизнес-команда и начинается следующая. Границы сообщений определяет протокол приложения.</p>
  <p id="ihvu">Если потерян участок потока, последующие байты могут уже находиться на компьютере, но приложение не получит их до восстановления правильного порядка. Это одна из причин скачков задержки. При этом подтверждение TCP ещё не означает, что биржевая программа обработала заявку или записала её в надёжное хранилище. </p>
  <p id="UKhu"><strong>UDP</strong> передаёт отдельные датаграммы без встроенной гарантии доставки и порядка. Потерю, повтор или перестановку должно учитывать приложение либо протокол поверх UDP. </p>
  <p id="Oyuw">В рыночных потоках такой подход иногда полезен: новые сообщения продолжают приходить, а пропуск восстанавливается отдельно. Но это не разрешение торговать по повреждённому стакану.</p>
  <p id="HM0k"><strong>TCP помогает восстановить байтовый поток. UDP оставляет больше контроля приложению. Ни один из них сам по себе не гарантирует правильное торговое состояние.</strong></p>
  <hr />
  <p id="76iN"><strong>16. WebSocket, HTTP, gRPC и остальные способы общения</strong></p>
  <p id="koYA"><strong>API</strong> является договором о том, как одна программа обращается к другой: какие команды существуют, какие поля передавать и что означает ответ.</p>
  <p id="95ew">При обычном HTTP-взаимодействии клиент отправляет запрос и получает ответ. Но обмен может быть организован по-разному.</p>
  <p id="6E2z"><strong>WebSocket</strong> устанавливает постоянный канал с сообщениями в обе стороны. Сервер может отправлять обновления без нового запроса на каждое событие. При этом наличие WebSocket не заменяет биржевые правила восстановления стакана. </p>
  <p id="xrHg"><strong>Long Polling</strong> работает иначе. Клиент отправляет запрос, сервер держит его открытым до появления данных или таймаута. После ответа клиент начинает следующий запрос. Это способ имитировать непрерывное получение событий через последовательность запросов.</p>
  <p id="3gwb"><strong>Server-Sent Events</strong>, SSE, позволяют серверу передавать поток событий клиенту через HTTP. Направление такого потока в основном одностороннее. Например, так можно обновлять веб-панель состояния робота.</p>
  <p id="m9Rf"><strong>Webhooks</strong> решают другую задачу: внешний сервис сам обращается к нашему адресу после события. Например, система сборки сообщает, что новая версия готова. Получателю нужно учитывать повторы, подпись запроса и возможную задержку. Это не взаимозаменяемая замена каждому биржевому потоку.</p>
  <p id="ewD6"><strong>HTTP/2</strong> позволяет вести несколько потоков запросов внутри одного соединения. Но если используется TCP, потеря байтов может задерживать данные нескольких потоков на транспортном уровне.</p>
  <p id="yKoe"><strong>HTTP/3</strong> использует QUIC поверх UDP. Важно: это не означает отказ от надёжности. QUIC сам реализует надёжные потоки и другие механизмы. Независимость потоков уменьшает некоторые межпоточные задержки при потерях, но не отменяет перегрузку сети и ожидание недостающих данных внутри конкретного потока. </p>
  <p id="Hq9q"><strong>gRPC</strong> позволяет обращаться к удалённому сервису почти как к набору заранее описанных функций. Обычно используются строгие схемы сообщений и Protocol Buffers, компактный формат сериализации. Это удобно для взаимодействия собственных сервисов, но сетевой вызов всё равно остаётся сетевым вызовом: с задержками, отказами и неопределённым результатом при потере ответа. </p>
  <hr />
  <p id="c7H3"><strong>17. Как не отдать торговый доступ вместе с сетевым трафиком</strong></p>
  <p id="YzyD">Когда между компьютером и сервером работает <strong>TLS</strong>, стороны устанавливают защищённое соединение. Оно помогает проверить сервер и защищает передаваемые данные от чтения и незаметного изменения по пути.</p>
  <p id="sKqM">Это пример <strong>Encryption in Transit</strong>, шифрования данных при передаче. Но оно не защищает от всего. Если API-ключ уже лежит в открытом репозитории или заражён сам сервер, TLS не исправит ситуацию. </p>
  <p id="uJHO">Поэтому отдельно существует <strong>Secrets Management</strong>, управление секретами.</p>
  <p id="EaBG">API-ключи, пароли, сертификаты и токены не должны разъезжаться по исходному коду, логам и скриншотам. Их нужно хранить отдельно, выдавать с минимально необходимыми правами и иметь процедуру замены и отзыва.</p>
  <p id="lAqo">Например, процесс записи рыночных данных не должен получать право выводить деньги. А торговому процессу может быть не нужен доступ к административным действиям аккаунта.</p>
  <p id="8oXc">Есть разница и между хранением секрета и его использованием. Переменная окружения удобнее захардкоженного ключа, но сама по себе не делает секрет недоступным другим процессам, диагностике или ошибочно напечатанной конфигурации.</p>
  <p id="hN4T">Практический вопрос здесь такой: если один компонент скомпрометирован, <strong>какие именно действия сможет выполнить злоумышленник</strong>?</p>
  <p id="36zh">Это гораздо полезнее общего заявления &quot;у нас всё зашифровано&quot;.</p>
  <hr />
  <p id="SDPn"><strong>18. Latency, Throughput и редкие задержки, которые портят всё</strong></p>
  <p id="1cIx">Представим путь реакции на событие.</p>
  <p id="XQj2">Биржа изменила цену. Через 4 миллисекунды событие дошло до нас. Программа потратила 0,2 миллисекунды на обработку и решение. Ещё через 4 миллисекунды заявка добралась обратно. Затем биржа обработала её.</p>
  <p id="8vLQ">Первый участок относится к <strong>Feed Latency</strong>, задержке доставки рыночных данных. Обратный путь к <strong>Order Entry Latency</strong>, задержке доставки заявки. Внутренняя обработка на площадке к <strong>Exchange Processing Latency</strong>.</p>
  <p id="zVXp">Общая <strong>Latency</strong> зависит от того, какие точки мы выбрали началом и концом измерения. Поэтому &quot;задержка 8 миллисекунд&quot; без описания измерения мало что говорит.</p>
  <p id="43yb"><strong>Throughput</strong>, пропускная способность, отвечает на другой вопрос: сколько событий система обрабатывает за единицу времени.</p>
  <p id="ZEfG">Можно быстро обрабатывать каждое событие, но получать их ещё быстрее. Тогда растёт очередь, а вместе с ней возраст реальных решений.</p>
  <p id="KJRc">Среднее значение задержки тоже может обманывать. Допустим, большинство событий обрабатывается за 1 миллисекунду, а некоторые за 100. Для срочной отмены важны именно такие неприятные случаи.</p>
  <p id="il29"><strong>P99 Latency</strong> является 99-м процентилем наблюдений. Примерно 99% измеренных задержек не превышают это значение. Это не максимальная задержка и не обещание, что каждый сотый запрос обязательно будет медленным.</p>
  <p id="XjC6"><strong>Tail Latency</strong>, хвост задержек, описывает редкие медленные случаи. Его полезно смотреть отдельно во время всплесков нагрузки, новостей и восстановления соединений. </p>
  <p id="of6r"><strong>Пропускная способность отвечает &quot;сколько успеем обработать&quot;. Задержка отвечает &quot;насколько поздно отреагируем&quot;. Нужны обе характеристики.</strong></p>
  <hr />
  <p id="6qUa"><strong>19. Таймауты, повторные запросы и идемпотентность</strong></p>
  <p id="IKsz">Программа не может ждать ответа бесконечно. <strong>Timeout</strong>, таймаут, задаёт предел ожидания.</p>
  <p id="HXNB">Но таймаут говорит только: &quot;Мы не получили ожидаемый результат вовремя&quot;. Он не говорит: &quot;Операция точно не выполнена&quot;.</p>
  <p id="P8x9">Отсюда опасность <strong>Retries</strong>, повторных запросов. Повторить чтение справочника обычно проще, чем повторить создание новой покупки.</p>
  <p id="EfvV">Безопасность повторов связана с <strong>Idempotency</strong>, идемпотентностью.</p>
  <p id="T9Lu">Команда &quot;установить температуру 20 градусов&quot; при повторе оставляет то же целевое состояние. Команда &quot;повысить температуру на 5 градусов&quot; каждый раз меняет его заново.</p>
  <p id="T5xV">С заявками аналогично. Повтор команды &quot;создать новую покупку 100&quot; может создать ещё одну покупку. Поэтому API иногда принимает уникальный ключ операции и распознаёт повтор как обращение к уже начатому действию.</p>
  <p id="6Pp4">Однако <strong>Client Order ID сам по себе не гарантирует идемпотентность</strong>. Нужно знать, что обещает биржа: как долго помнит идентификатор, допускает ли повторное использование, что делает при одинаковом ID с другими параметрами и как отвечает на поздний повтор. </p>
  <p id="Ylnh">Если сервис недоступен, частые повторы могут дополнительно перегрузить его. Поэтому используют <strong>Exponential Backoff</strong>: пауза растёт, например 100, 200, 400, 800 миллисекунд. Часто добавляют случайное смещение паузы, чтобы тысячи клиентов не повторяли запрос одновременно. </p>
  <p id="3p83"><strong>Circuit Breaker</strong> идёт дальше. После серии неудач компонент временно перестаёт обращаться к неисправному сервису, затем осторожно проверяет восстановление. Это похоже на автомат, который размыкает проблемную цепь. В торговой системе отказ критического источника может дополнительно запрещать новые рискованные действия. </p>
  <p id="yMux">Но восстановление доступа и повтор старой сделки являются разными задачами. Сигнал мог исчезнуть, пока мы восстанавливали соединение.</p>
  <hr />
  <p id="IAK3"><strong>20. Почему нельзя бесконечно переставлять заявки</strong></p>
  <p id="cri7">Биржа ограничивает поток запросов. Это <strong>Rate Limiting</strong>.</p>
  <p id="YvV7">Лимиты могут учитывать количество сообщений, их условный вес, конкретный метод API, аккаунт, соединение или инструмент. Поэтому &quot;100 запросов&quot; не всегда означает 100 любых действий.</p>
  <p id="cY7U"><strong>Message Rate Limits</strong> ограничивают скорость отправки торговых сообщений. Если весь доступный бюджет потрачен на улучшение котировок, в критический момент может не остаться возможности быстро отменить заявки. Значит, планирование потока является частью безопасности.</p>
  <p id="r0s9">Есть и отношения активности к результату.</p>
  <p id="SJih"><strong>Order-to-Trade Ratio</strong> сравнивает поток заявок или ордерных действий с количеством исполнений. <strong>Cancel-to-Trade Ratio</strong> сравнивает отмены со сделками. Точный состав числителя и знаменателя определяется правилами площадки.</p>
  <p id="ltz5">Представим, что алгоритм отправил 10 000 изменений и получил 10 сделок. Это совсем другой профиль нагрузки, чем 100 изменений и 50 сделок.</p>
  <p id="gRmy">При этом высокий коэффициент сам по себе ещё не объясняет намерение участника. Частые отмены могут быть нормальным управлением риском. Но площадка вправе ограничивать такую нагрузку по своим правилам.</p>
  <p id="U4cm">Для робота отсюда следует конкретное решение: не переставлять заявку при каждом незначительном изменении сигнала. Нужно сравнивать пользу новой цены с потерей очереди, комиссионной моделью и доступным бюджетом сообщений.</p>
  <hr />
  <p id="14ss"><strong>21. Очереди сообщений, Pub/Sub и Backpressure</strong></p>
  <p id="5oAR">Представим, что одно рыночное событие нужно стратегии, риск-модулю, архиву и панели наблюдения.</p>
  <p id="TlCG">Можно заставить источник по очереди ждать каждый компонент. Но тогда медленная панель начнёт тормозить торговлю.</p>
  <p id="OhpE"><strong>Message Queue</strong>, очередь сообщений, разделяет отправку и обработку. Один компонент помещает событие, другой забирает его позже. Для надёжной работы важны подтверждения, повторная доставка, порядок и политика хранения. </p>
  <p id="AQPE"><strong>Pub/Sub</strong>, Publish/Subscribe, описывает публикацию и подписку. Источник публикует событие, заинтересованные потребители его получают. Это не всегда означает, что все подписчики имеют одинаковую гарантию доставки или одинаковый порядок.</p>
  <p id="nNfN">Когда система строится вокруг реакции на такие события, говорят об <strong>Event-Driven Architecture</strong>, событийной архитектуре. Пришёл Fill, обновили позицию. Потерян стакан, запретили новые котировки. Изменились параметры инструмента, обновили проверки.</p>
  <p id="A6LE">Теперь возникает перегрузка: производитель быстрее потребителя.</p>
  <p id="viej"><strong>Backpressure</strong> является не названием самой перегрузки, а механизмом обратного давления. Потребитель сообщает, что не успевает, и система ограничивает производство, передачу или приём данных.</p>
  <p id="BKnE">С биржевым потоком не всегда можно попросить рынок двигаться медленнее. Тогда нужны ограниченные очереди, подходящая архитектура и заранее определённое поведение при отставании.</p>
  <p id="AxKy">Но нельзя бездумно выбрасывать промежуточные изменения стакана. Если каждое необходимо для восстановления состояния, после пропуска книга становится недостоверной. Можно объединять уведомления о пересчёте после корректного применения всех событий или выбирать свежий полный снимок, если протокол это позволяет. Исполнения сделок тоже нельзя отбрасывать как &quot;устаревшие&quot;.</p>
  <p id="jmSu">Если сообщение многократно не обрабатывается, его могут отправить в <strong>Dead Letter Queue</strong>, DLQ. Это отдельное место для проблемных сообщений, которые были отклонены, просрочены или исчерпали допустимые попытки. DLQ не исправляет причину, но не даёт одному сообщению бесконечно блокировать основной поток. </p>
  <hr />
  <p id="D1QC"><strong>22. Кэширование: как ускориться и не начать пользоваться прошлым</strong></p>
  <p id="ExoO"><strong>Caching</strong>, кэширование, означает сохранение данных или результата вычисления для повторного использования.</p>
  <p id="1xtu">Например, шаг цены ABC редко меняется. Нет смысла получать его по сети перед каждой заявкой. Можно хранить локальную копию.</p>
  <p id="Nr9B">Но копия требует правил актуальности. Если биржа изменила шаг, а мы продолжаем использовать старое значение, кэш ускоряет неправильное решение.</p>
  <p id="oxSv">Это проблема <strong>Cache Invalidation</strong>, признания кэша устаревшим.</p>
  <p id="xtRJ">Есть разные подходы. Обновлять после специального события, проверять версию, ограничивать срок хранения или периодически перечитывать источник. У каждого свой компромисс. Срок хранения в пять минут удобен, но означает, что до пяти минут система потенциально использует старое значение.</p>
  <p id="cXdO">Теперь перенесём идею ближе к пользователю. <strong>Edge Caching</strong> хранит копии на пограничных серверах, расположенных ближе к получателю. <strong>CDN</strong>, Content Delivery Network, представляет распределённую сеть доставки контента, где такое кэширование помогает быстрее отдавать файлы и разгружать основной сервер.</p>
  <p id="RzU3">Для сайта со статистикой это полезно. Для текущего состояния позиции опасно без специальной модели актуальности.</p>
  <p id="QjL0">Поэтому вопрос не &quot;использовать ли кэш&quot;. Вопрос: <strong>какое устаревание допустимо для этих конкретных данных</strong>?</p>
  <p id="c6VU">Картинка интерфейса, справочник инструмента, последняя котировка и реальная позиция требуют разных ответов.</p>
  <hr />
  <p id="fkea"><strong>23. Балансировка, прокси и масштабирование</strong></p>
  <p id="DzE1">Допустим, система получает много запросов. Их можно распределить между несколькими серверами. Это <strong>Load Balancing</strong>, балансировка нагрузки.</p>
  <p id="8s32">Перед внутренними сервисами часто стоит <strong>Reverse Proxy</strong>, обратный прокси. Клиент обращается к нему, а он пересылает запрос подходящему внутреннему серверу. Он может завершать TLS-соединение, маршрутизировать и распределять нагрузку.</p>
  <p id="UDiU"><strong>API Gateway</strong> обычно решает более широкий набор задач вокруг API: проверяет доступ, применяет лимиты, выбирает версию сервиса, собирает статистику. На практике возможности этих компонентов могут пересекаться.</p>
  <p id="9J8F">Теперь про увеличение мощности.</p>
  <p id="ISQi"><strong>Vertical Scaling</strong>, вертикальное масштабирование, усиливает одну машину: больше памяти, более подходящий процессор, быстрый диск.</p>
  <p id="x3Jg"><strong>Horizontal Scaling</strong>, горизонтальное масштабирование, добавляет машины или процессы. Например, разные группы инструментов обслуживают разные обработчики.</p>
  <p id="iUgB"><strong>Autoscaling</strong> автоматически меняет число ресурсов в зависимости от нагрузки. Но новый процесс не получает готовый торговый контекст магически. Ему нужны данные, состояние, права владения инструментами и прогрев.</p>
  <p id="TKjd">Поэтому HFT-компонент с очередью заявок и открытой позицией сложнее масштабировать, чем сервер, который просто отдаёт статический файл.</p>
  <p id="lFms">Здесь же появляется <strong>Cost Optimization</strong>, оптимизация расходов. Нужно сравнивать стоимость оборудования, сети и сопровождения с тем, сколько полезного результата даёт улучшение.</p>
  <p id="FRui">Если более дорогой сервер уменьшает задержку, но стратегия после этого не получает лучших сделок, техническое улучшение может не иметь экономической ценности.</p>
  <p id="FK69"><strong>Масштабировать нужно найденное ограничение, а не красивую архитектурную схему.</strong></p>
  <hr />
  <p id="Grt8"><strong>24. База данных: индексы, запросы и соединения</strong></p>
  <p id="19Ej">Допустим, после торгового дня нужно найти все исполнения заявки 123 среди сотен миллионов строк.</p>
  <p id="jar2">Без вспомогательной структуры база может просматривать огромный объём данных. <strong>Database Indexing</strong>, индексация, создаёт структуру для ускоренного поиска, сортировки или отбора.</p>
  <p id="bvls">Индекс похож на указатель в книге: вместо чтения всех страниц можно перейти к нужным. Но он занимает место и требует обновления при изменении данных. Поэтому индекс на каждое поле не является бесплатным ускорением. </p>
  <p id="S5tX"><strong>Query Optimization</strong>, оптимизация запросов, начинается с вопроса, какую работу база действительно выполняет. Иногда проблема в отсутствии индекса, иногда в лишнем объединении таблиц, иногда в запросе всех строк вместо нужного диапазона.</p>
  <p id="FFNx">Типичный неудачный шаблон, <strong>N+1 запросов</strong>. Сначала получаем список 100 заявок одним запросом. Затем отдельно читаем сведения об инструменте для каждой. Вместо нескольких обращений получается 101. Часто это можно заменить объединением данных или пакетным запросом.</p>
  <p id="w5Sq"><strong>Connection Pool</strong>, пул соединений, хранит заранее открытые подключения. Программа берёт подходящее соединение, выполняет работу и возвращает его. Это избавляет от постоянного открытия нового соединения, но слишком маленький пул создаёт ожидание, а слишком большой перегружает базу.</p>
  <p id="M1Ch"><strong>Read Replicas</strong>, реплики для чтения, позволяют вынести часть аналитической нагрузки на копии базы. Но реплика может отставать. Поэтому исторический отчёт и проверку только что исполненной заявки нельзя бездумно направлять на один и тот же запаздывающий источник.</p>
  <hr />
  <p id="CDVd"><strong>25. Партиционирование, шардинг, репликация и изменения схемы</strong></p>
  <p id="9GTT">Большую таблицу можно разделить на части. Например, сделки за каждый месяц хранить в отдельной части общей таблицы. Это <strong>Partitioning</strong>, партиционирование.</p>
  <p id="jM08">Если нужен только вчерашний день, база может не читать остальные месяцы. Но полезность зависит от того, совпадает ли способ разделения с реальными запросами. </p>
  <p id="Yl6S"><strong>Sharding</strong>, шардинг, распределяет разные части данных между отдельными узлами. Например, инструменты первой группы находятся на сервере A, второй на B. Это увеличивает общую ёмкость, но усложняет запросы и операции, затрагивающие сразу несколько частей.</p>
  <p id="DP1P"><strong>Replication</strong>, репликация, делает копии одних и тех же данных. Поэтому шардинг и репликация решают разные задачи: первый делит набор, вторая копирует его.</p>
  <p id="4IYE">Теперь структура данных изменилась. Раньше у заявки была одна временная отметка, теперь отдельно нужны время отправки и время подтверждения.</p>
  <p id="s7q9">Изменение структуры базы называется <strong>Database Migration</strong>, миграцией. <strong>Schema Versioning</strong>, версионирование схем, позволяет определить, какую структуру понимает конкретная программа.</p>
  <p id="RAxQ">Проблема особенно заметна при постепенном обновлении: старая версия ещё работает, новая уже пишет другое поле. Хорошая миграция учитывает временное сосуществование версий.</p>
  <p id="TuY7">Например, сначала добавить новое поле так, чтобы старая программа продолжала работать. Затем обновить запись и чтение, перенести старые данные и только после этого удалить ненужную структуру.</p>
  <p id="T63A"><strong>Откат программы не возвращает автоматически прежнюю структуру и смысл уже записанных данных.</strong></p>
  <hr />
  <p id="Phkv"><strong>26. Когда несколько потоков одновременно меняют одно состояние</strong></p>
  <p id="gfQw">Представим позицию 100. Два потока одновременно получили исполнения по 10.</p>
  <p id="MTQo">Оба прочитали 100, оба посчитали 110, оба записали 110. Правильный результат должен быть 120, но одно обновление потерялось.</p>
  <p id="pCEy">Это <strong>Race Condition</strong>, состояние гонки: результат зависит от порядка операций, который программа не контролирует.</p>
  <p id="ch8y"><strong>Thread Safety</strong>, потокобезопасность, означает, что компонент сохраняет корректность при допустимом конкурентном использовании.</p>
  <p id="oiIf">Один подход, <strong>Pessimistic Locking</strong>, пессимистическая блокировка. Поток захватывает право работать с данными, остальные ждут.</p>
  <p id="bWwR">Другой, <strong>Optimistic Locking</strong>, оптимистическая блокировка. Мы читаем значение вместе с версией и записываем результат только при условии, что версия не изменилась. Если другой поток уже обновил запись, нужно перечитать данные и пересчитать действие.</p>
  <p id="vVQK">Блокировки тоже могут создать проблему. Поток A удерживает ресурс 1 и ждёт ресурс 2. Поток B удерживает ресурс 2 и ждёт ресурс 1. Это <strong>Deadlock</strong>, взаимная блокировка. Оба могут ждать бесконечно без вмешательства или механизма обнаружения. </p>
  <p id="F8jU">Отдельно нужно управлять памятью.</p>
  <p id="uvMs"><strong>Memory Leak</strong>, утечка памяти, возникает, когда память больше не нужна для полезной работы, но остаётся удерживаемой. Это возможно и в языках с автоматической очисткой, если ненужные объекты продолжают оставаться достижимыми.</p>
  <p id="6Ewh"><strong>Garbage Collection</strong>, сборка мусора, автоматически освобождает определённые неиспользуемые объекты. Но она сама потребляет ресурсы и может влиять на задержки. Поэтому в чувствительном пути измеряют не только скорость вычислений, но и частоту выделения памяти, работу сборщика и редкие паузы. </p>
  <hr />
  <p id="Ec2J"><strong>27. Несколько компьютеров: лидер, сетевое разделение и CAP</strong></p>
  <p id="zqtW">Теперь у нас не два потока, а два сервера. Оба способны отправлять заявки от одного счёта.</p>
  <p id="JX1L">Чтобы они не действовали независимо, можно назначить одного активного владельца. <strong>Leader Election</strong>, выбор лидера, определяет, какой узел выполняет ведущую роль.</p>
  <p id="Yy7R">Но что произойдёт, если серверы живы, а связь между ними исчезла?</p>
  <p id="MKA6">Это <strong>Network Partition</strong>, сетевое разделение. Его не следует путать с партиционированием таблицы. Здесь сеть разделила работающие узлы на части, которые не могут надёжно обмениваться информацией.</p>
  <p id="OCzf">Каждая сторона может решить, что другая умерла. Если обе объявят себя лидером, получится два активных отправителя заявок.</p>
  <p id="RoV6">Здесь полезна <strong>CAP-теорема</strong>. Во время такого разделения нельзя одновременно гарантировать строгую согласованность в смысле единого актуального порядка операций и доступность каждого запроса на работающих узлах.</p>
  <p id="nxih">Это не правило &quot;из трёх букв всегда выбирай любые две&quot;. Существенна именно ситуация разделения и конкретные определения гарантий. </p>
  <p id="2UDC"><strong>Eventual Consistency</strong>, согласованность в конечном счёте, допускает временные расхождения копий с последующим схождением при подходящих условиях. Для количества просмотров это может быть приемлемо. Для права отправить следующую заявку такого обещания может быть недостаточно.</p>
  <p id="Pi0W"><strong>Distributed Lock</strong>, распределённая блокировка, координирует владение между машинами. Но истечение блокировки в хранилище не останавливает старый процесс физически. Он мог зависнуть, затем проснуться и продолжить работу.</p>
  <p id="cBFp">Поэтому иногда применяют fencing: каждое новое владение получает более новый номер, а принимающая сторона отвергает команды старого владельца. Но защита существует только там, где получатель действительно умеет её проверять.</p>
  <p id="FO6O"><strong>Выбрать нового лидера недостаточно. Нужно ещё не позволить старому продолжать действовать.</strong></p>
  <hr />
  <p id="dZEz"><strong>28. Распределённая транзакция и Saga: почему сделку нельзя просто отменить назад</strong></p>
  <p id="APiq">Представим перевод 100 между двумя внутренними счетами. Нужно списать с одного и зачислить другому. Нельзя навсегда выполнить только половину.</p>
  <p id="pLu1">В одной базе это решается транзакцией: группа изменений подтверждается или отменяется как единое действие.</p>
  <p id="8Beg"><strong>Distributed Transaction</strong>, распределённая транзакция, пытается согласовать подобное действие между несколькими системами. Например, через двухфазное подтверждение: сначала участники готовятся, затем получают решение зафиксировать результат. Это требует координации и может оставлять ресурсы ожидающими при отказах. </p>
  <p id="Gr1n"><strong>Saga</strong> предлагает другой подход. Большой процесс разбивается на последовательность локальных операций. Для уже выполненных шагов определяются компенсирующие действия.</p>
  <p id="O5Kl">Бытовой пример: забронировали гостиницу, затем не смогли купить билет. Компенсацией может быть отмена брони. Но штраф за отмену никуда не исчезает.</p>
  <p id="zWf7">В торговле ограничение ещё заметнее. Мы купили ABC на одной площадке, но не смогли продать на другой. Компенсацией может быть новая продажа купленного объёма. Это не стирает первую сделку. Новая продажа происходит по текущей цене, может иметь комиссию и сама может не исполниться.</p>
  <p id="NfLp">Поэтому Saga не даёт волшебного &quot;отката рынка&quot;. Она организует процесс восстановления после частично выполненного действия. Компенсация тоже требует обработки ошибок. </p>
  <p id="opcm"><strong>Отмена записи в базе и экономическое закрытие исполненной позиции являются разными операциями.</strong></p>
  <hr />
  <p id="eWd7"><strong>29. Как менять программу, не превращая обновление в эксперимент на деньгах</strong></p>
  <p id="4DJI"><strong>CI/CD</strong> объединяет несколько этапов доставки кода.</p>
  <p id="rY6i"><strong>Continuous Integration</strong>, непрерывная интеграция, регулярно проверяет совместимость изменений: проект собирается, запускаются тесты и автоматические проверки.</p>
  <p id="N3Da"><strong>Continuous Delivery</strong> поддерживает версию в состоянии готовности к выпуску. <strong>Continuous Deployment</strong> дополнительно автоматизирует сам выпуск. Для торговой системы автоматизация не отменяет ограничений доступа и необходимых проверок. </p>
  <p id="fwtB"><strong>Build Cache</strong>, кэш сборки, повторно использует результаты неизменившейся работы. Например, не пересобирает зависимость, исходники которой не менялись.</p>
  <p id="ghh9">Но сначала надо правильно определить зависимости. Иначе кэш может подставить результат, собранный для другой конфигурации.</p>
  <p id="AePX"><strong>Dependency Hell</strong> возникает, когда библиотеки требуют несовместимые версии друг друга. Один компонент ждёт старый интерфейс, другой новый. Поэтому состав зависимостей должен быть воспроизводимым, а обновления проверяемыми.</p>
  <p id="Qdk6"><strong>Semantic Versioning</strong>, семантическое версионирование, предлагает формат вроде 2.4.1: крупный номер для несовместимых изменений публичного интерфейса, средний для совместимых возможностей, младший для совместимых исправлений. Но название версии не заменяет проверки того, как конкретный проект соблюдает эти правила. </p>
  <p id="Jsg6"><strong>API Versioning</strong> относится к изменению договора между программами. Если биржа заменила смысл поля количества, это может быть важнее, чем его название.</p>
  <p id="zJA4"><strong>Infrastructure as Code</strong>, инфраструктура как код, описывает сервера, сеть и настройки воспроизводимыми файлами. Это помогает понять, что развернуто, восстановить окружение и проверять изменения. Но ошибочная конфигурация тоже становится воспроизводимой, поэтому ей нужны проверки. </p>
  <hr />
  <p id="Hpp1"><strong>30. Feature Flags, постепенный выпуск и реальный смысл отката</strong></p>
  <p id="81yX">Представим, что новый алгоритм уже находится в программе, но пока выключен.</p>
  <p id="NGo4"><strong>Feature Flag</strong>, флаг функции, позволяет включить его настройкой. Например, только для одного инструмента или только в режиме наблюдения.</p>
  <p id="x0EL"><strong>Canary Release</strong>, канареечный выпуск, сначала отдаёт новой версии небольшую контролируемую часть работы. Мы сравниваем поведение, ошибки и риск до расширения.</p>
  <p id="QB9u"><strong>Rolling Deployment</strong>, постепенное развёртывание, обновляет экземпляры по очереди, а не одновременно. Поэтому старые и новые версии должны уметь временно сосуществовать. </p>
  <p id="vPh4"><strong>Rollback</strong>, откат, возвращает предыдущую версию или конфигурацию. Но он не отменяет совершённые сделки, отправленные сообщения и изменённые данные. После неудачного торгового выпуска иногда нужно сначала остановить риск и сверить состояние, а уже потом переключать код.</p>
  <p id="Bkuz">Новая версия также может начать с <strong>Cold Start</strong>, холодного старта. Ей ещё нужны полный стакан, история признаков, справочники, позиции и состояние заявок.</p>
  <p id="pTAU">Для контроля существуют <strong>Health Checks</strong>, проверки здоровья. Однако важно разделять два вопроса.</p>
  <p id="8XD3"><strong>Liveness-проба</strong> проверяет, жив ли процесс и не требуется ли его перезапустить. <strong>Readiness-проба</strong> проверяет, готов ли он обслуживать свою задачу. Живой процесс с несобранным стаканом может быть неготовым. </p>
  <p id="jzuN">При этом readiness инфраструктуры не остановит исходящие торговые запросы автоматически. Сам робот должен явно запрещать торговлю, пока условия готовности не выполнены.</p>
  <p id="YQfF">Фоновые операции по расписанию выполняют <strong>Cron-задачи</strong>. Например, ежедневную сверку или обновление справочников. Они должны учитывать повторный запуск, пропуск времени и длительность предыдущего выполнения. Само расписание не гарантирует выполнение ровно один раз.</p>
  <hr />
  <p id="uX3v"><strong>31. Как видеть не только ошибку, но и её причину</strong></p>
  <p id="DV4U"><strong>Monitoring</strong>, мониторинг, следит за заранее выбранными показателями. Например, задержкой, памятью, состоянием соединений и размером позиции.</p>
  <p id="2KgU"><strong>Metrics</strong>, метрики, являются числовыми измерениями. Они хорошо отвечают на вопросы &quot;сколько&quot;, &quot;как часто&quot; и &quot;насколько долго&quot;.</p>
  <p id="LXQc"><strong>Logging</strong>, логирование, записывает конкретные события. Метрика покажет, что выросло число отказов. Лог поможет выяснить, какие заявки отклонялись и с какими причинами.</p>
  <p id="rXb1"><strong>Distributed Tracing</strong>, распределённая трассировка, связывает этапы одной операции между компонентами. Можно увидеть путь от входного события через расчёт решения и риск-проверку до отправки заявки.</p>
  <p id="sMbm">Вместе эти инструменты помогают добиться <strong>Observability</strong>, наблюдаемости: способности по доступным данным исследовать внутреннее поведение системы, в том числе отвечать на вопросы, которые заранее не были сформулированы. </p>
  <p id="b44v"><strong>Alerts</strong>, оповещения, сообщают о состоянии, которое требует внимания. Хорошее оповещение должно помогать действовать. Тысяча одинаковых сообщений &quot;возможна проблема&quot; быстро перестаёт быть полезной.</p>
  <p id="zcYD">Для целей качества существуют <strong>SLI</strong>, <strong>SLO</strong> и <strong>Error Budget</strong>.</p>
  <p id="dqvK">SLI, Service Level Indicator, является измеряемым показателем. Например, долей событий, обработанных быстрее двух миллисекунд.</p>
  <p id="pxNH">SLO, Service Level Objective, задаёт цель: допустим, не менее 99,9% таких событий за выбранное окно.</p>
  <p id="WOvP">Error Budget, бюджет ошибок, описывает допустимое отклонение от этой цели. Это не разрешение терять определённый процент капитала или создавать дубли сделок. Разные виды нарушений должны иметь разные ограничения. </p>
  <p id="4Qh4"><strong>Метрики показывают масштаб проблемы, события помогают восстановить историю, а наблюдаемость позволяет выяснить причину.</strong></p>
  <hr />
  <p id="Fr8V"><strong>32. Что делать, когда система ломается в настоящей работе</strong></p>
  <p id="SlsG"><strong>Production</strong> является рабочим окружением, где происходят реальные действия. <strong>Production Incident</strong>, производственный инцидент, означает нарушение работы, требующее реакции.</p>
  <p id="ieqM">Например, робот продолжает отправлять заявки, хотя рыночные данные устарели.</p>
  <p id="aBzU">Сначала нужно ограничить ущерб. Только затем спокойно разбираться, какая строка кода виновата.</p>
  <p id="K9wB"><strong>On-call</strong>, дежурство, означает заранее определённую ответственность за реакцию на такие ситуации. Нужны не только телефон и уведомления, но и понятные полномочия, инструкции и возможность передать проблему дальше. </p>
  <p id="JXB4"><strong>Backup</strong>, резервная копия, позволяет восстановить данные. Но реплика не заменяет резервную копию: ошибочное удаление может быстро скопироваться на все реплики.</p>
  <p id="nQ6F"><strong>Disaster Recovery</strong>, аварийное восстановление, описывает возврат системы после серьёзной потери. Важно заранее знать, сколько данных допустимо потерять и как быстро нужно восстановить работу. План проверяется реальным восстановлением, а не существованием файла &quot;backup&quot;.</p>
  <p id="moyP"><strong>Failover</strong> переключает работу на резервный компонент. В торговле резерв обязан восстановить права управления, заявки и позицию. Автоматический запуск с пустым состоянием может увеличить риск.</p>
  <p id="cL0v"><strong>Multi-Region Deployment</strong> распределяет компоненты по географическим регионам. Это помогает переживать некоторые региональные отказы, но увеличивает сложность согласования и создаёт разные задержки до биржи. </p>
  <p id="L56z"><strong>Chaos Engineering</strong> проверяет устойчивость контролируемыми сбоями: обрывом соединения, задержкой ответа, остановкой процесса. Для торговой системы такие эксперименты сначала проводят там, где они не создадут неконтролируемого денежного риска.</p>
  <p id="Bm9i"><strong>Надёжность проверяется не тем, что система делает в хороший день, а тем, как она ограничивает ущерб в плохой.</strong></p>
  <hr />
  <p id="KxNe"><strong>33. Акции, облигации, валюты и деривативы: чем именно торгует робот</strong></p>
  <p id="cEsl">До сих пор ABC был абстрактным активом. Но реальные инструменты имеют разную экономику.</p>
  <p id="RITs"><strong>Акция</strong> представляет долю в компании. У неё есть корпоративные события, права владельца и возможные дивиденды. <strong>Облигация</strong> является долговым обязательством: её стоимость связана с платежами, сроками, процентными ставками и риском эмитента. </p>
  <p id="KBGr"><strong>FX</strong> означает валютный рынок. Например, EUR/USD выражает цену одной валюты в другой. Здесь важны единицы котировки, способы расчёта и структура поставщиков ликвидности.</p>
  <p id="OijS"><strong>Криптоактивы</strong> также различаются по устройству и рискам. Даже когда два инструмента связаны с одной монетой, торговля самой монетой и контрактом на её цену не является одной операцией.</p>
  <p id="CkDP"><strong>Индекс</strong> представляет расчётный показатель, построенный по определённой методике. Сам индекс обычно нельзя купить как физический предмет. Можно купить связанный фонд или дериватив.</p>
  <p id="Tl8W"><strong>ETF</strong> является биржевым фондом. Его доля связана с активами фонда и правилами его устройства. Цена доли на бирже и расчётная стоимость соответствующей части активов могут временно различаться.</p>
  <p id="pjg0"><strong>Базовый актив</strong>, underlying, является тем, с чем связан контракт. <strong>Дериватив</strong>, derivative, получает стоимость из условий, относящихся к этому активу, индексу или другому ориентиру.</p>
  <p id="aghp">К деривативам относятся <strong>фьючерсы</strong>, <strong>опционы</strong> и <strong>perpetual futures</strong>, бессрочные контракты. Их нельзя считать просто другим названием монеты: у них свои обязательства, обеспечение и способы расчёта.</p>
  <hr />
  <p id="QPJI"><strong>34. Фьючерс: размер контракта, срок и расчёты</strong></p>
  <p id="lM2j"><strong>Фьючерс</strong> задаёт стандартизованные обязательства по будущим расчётам. Его устройство описано в <strong>Contract Specifications</strong>, спецификации контракта.</p>
  <p id="pfcA">Особенно важен <strong>Multiplier</strong>, множитель. Если одному пункту изменения цены соответствует 10 денежных единиц на контракт, движение на 5 пунктов даёт изменение результата 50 на один контракт. Ошибка в множителе напрямую превращается в ошибку позиции и риска.</p>
  <p id="aabW">У срочного контракта есть дата окончания, <strong>Expiration</strong>. Если нужно сохранить экономическую позицию после неё, участник переходит в следующий контракт. Это <strong>Futures Roll</strong>, перенос позиции между сроками. Обычно он требует закрытия старого и открытия нового контракта, поэтому имеет цены и издержки. </p>
  <p id="jSd0"><strong>Settlement</strong> означает выполнение расчётных обязательств. При <strong>Physical Settlement</strong> может происходить поставка базового актива. При <strong>Cash Settlement</strong> рассчитывается денежная разница по установленной методике.</p>
  <p id="gFPv">Для исследования часто строят <strong>Continuous Futures</strong>, непрерывную историю из нескольких последовательных контрактов. Но это аналитическая конструкция, а не один реальный инструмент, который торговался много лет.</p>
  <p id="UqCE">Способ склейки имеет значение. Если контракты стоят по-разному, простой переход может создать скачок, которого не было в доходности удерживаемой позиции. Корректировка истории, в свою очередь, может изменить старые цены.</p>
  <p id="Wp6X">Поэтому для исполнения нужен реальный контракт с реальной ценой, а для исследования можно использовать специальную непрерывную серию, понимая её методику.</p>
  <p id="nlFU"><strong>График непрерывного фьючерса и история реально совершимых сделок не являются одним и тем же набором данных.</strong></p>
  <hr />
  <p id="ACpR"><strong>35. Margin, Funding, Borrow и стоимость удержания</strong></p>
  <p id="ERel">Для фьючерса обычно не требуется сразу платить всю стоимость базового актива. Но требуется <strong>Margin</strong>, обеспечение.</p>
  <p id="PeXl"><strong>Initial Margin</strong> определяет необходимое обеспечение при открытии. <strong>Maintenance Margin</strong> задаёт уровень, который нужно поддерживать. Если средства становятся недостаточными, могут потребоваться дополнительные деньги, сокращение позиции или принудительное закрытие по правилам соответствующей системы.</p>
  <p id="z2Pd">Обеспечение не является максимальным возможным убытком и не означает, что экономическая позиция равна внесённой сумме. Маленький залог может поддерживать большую чувствительность к движению цены. </p>
  <p id="6xKV">У <strong>Perpetual Futures</strong> нет обычного срока истечения. Для связи цены контракта с ориентиром используется <strong>Funding Rate</strong>, ставка периодических платежей. При положительном финансировании часто платят держатели длинных позиций, но направление, формула и моменты платежей определяются конкретной площадкой. </p>
  <p id="qHO6">Если мы продаём актив, которого у нас нет, на соответствующих рынках может понадобиться заимствование. <strong>Short Locate</strong> означает проверку или подтверждение доступности бумаги для заимствования по применимым правилам. <strong>Borrow</strong> относится к самому заимствованию и его стоимости. Доступность может исчезнуть, а плата вырасти.</p>
  <p id="8cdl"><strong>Dividends</strong>, дивиденды, являются выплатами владельцам акций. Для позиции на продажу экономические последствия могут отличаться: заёмщик может быть обязан компенсировать соответствующую выплату владельцу.</p>
  <p id="Ylm0">Все доходы и расходы от удержания позиции объединяют понятием <strong>Carry</strong>. Сюда могут входить процентный доход, стоимость финансирования, заимствования, дивиденды и другие элементы.</p>
  <p id="DCJd">Поэтому фраза &quot;цена не изменилась&quot; не означает &quot;результат позиции равен нулю&quot;.</p>
  <hr />
  <p id="yOSJ"><strong>36. Basis, Term Structure и кривые доходности</strong></p>
  <p id="p3ey">Если ABC на споте стоит 100, а фьючерс на него 102, между ними есть разница. Это <strong>Basis</strong>, базис. Часто его считают как цену фьючерса минус спот, но знак и способ расчёта нужно заранее закрепить.</p>
  <p id="0xpQ">Разница не обязательно является бесплатной прибылью. Она может отражать стоимость капитала, доходы от владения активом, ограничения заимствования, срок и риск.</p>
  <p id="OPzf"><strong>Interest Rates</strong>, процентные ставки, определяют стоимость денег во времени. Получить 100 сегодня и через год экономически не одно и то же.</p>
  <p id="Rm4c"><strong>Term Structure</strong>, временная структура, показывает зависимость показателя от срока. Например, фьючерс через месяц стоит 101, через три месяца 103, через полгода 104. Нас интересует не только каждая цена отдельно, но и форма всей зависимости.</p>
  <p id="3nGs"><strong>Yield Curve</strong>, кривая доходности, показывает доходности по разным срокам для выбранного набора долговых инструментов или ставок. Она может подниматься, опускаться или иметь более сложную форму.</p>
  <p id="RhBV">Представим стратегию, которая купила ближний контракт и продала дальний. Если весь рынок вырос одинаково, часть направленного движения может взаимно компенсироваться. Но изменение разницы между сроками останется.</p>
  <p id="PptP">Именно поэтому &quot;мы захеджированы&quot; не означает &quot;мы ни от чего не зависим&quot;. Можно убрать часть риска общего движения цены и оставить риск базиса, сроков или ставок.</p>
  <hr />
  <p id="RDAN"><strong>37. Опционы: почему у цены появляется несколько независимых причин двигаться</strong></p>
  <p id="Zoei"><strong>Опцион Call</strong> даёт покупателю право купить базовый актив по установленной цене. <strong>Put</strong> даёт право продать. Установленная цена называется страйком, а за право платят премию.</p>
  <p id="wlc7">У продавца опциона возникает соответствующее обязательство, если выполнены условия исполнения. Поэтому купленный опцион и проданный опцион имеют принципиально разные профили риска.</p>
  <p id="aQK4">Цена опциона зависит не только от текущего базового актива. Важны срок, страйк, ставки, выплаты по активу и оценка будущих колебаний.</p>
  <p id="Gd9u"><strong>Implied Volatility</strong>, подразумеваемая волатильность, получается, когда рыночную цену опциона переводят в параметр модели. Вопрос звучит так: &quot;При какой волатильности эта модель дала бы наблюдаемую цену?&quot;</p>
  <p id="pDJ1">Это не обещание того, насколько сильно рынок действительно будет двигаться.</p>
  <p id="tldg"><strong>Volatility Surface</strong>, поверхность волатильности, описывает, как подразумеваемая волатильность меняется по страйкам и срокам. Это уже не одно число &quot;волатильность ABC&quot;, а целый набор взаимосвязанных оценок.</p>
  <p id="74LV">Для управления чувствительностями используют <strong>Greeks</strong>, греки. Они показывают, как модельная стоимость позиции меняется при небольших изменениях отдельных факторов, когда остальные условно фиксированы. </p>
  <p id="JvVM">Таким образом, робот может правильно предсказать направление базового актива и всё равно получить плохой результат по опциону, если одновременно снизилась подразумеваемая волатильность или истекло слишком много времени.</p>
  <hr />
  <p id="3uhf"><strong>38. Delta, Gamma, Vega, Theta и Rho без магии</strong></p>
  <p id="R1Hm">Начнём с <strong>Delta</strong>. Она показывает чувствительность стоимости к небольшому движению базового актива.</p>
  <p id="tDDF">Допустим, дельта опциона равна 0,5 в выбранных единицах. При небольшом росте базового актива на 1 модельная стоимость опциона изменится примерно на 0,5 при прочих равных. Для позиции результат дополнительно учитывает число контрактов и множитель. </p>
  <p id="3tjs">Но дельта сама меняется. <strong>Gamma</strong> показывает, насколько она чувствительна к движению базового актива. Если после роста дельта увеличилась с 0,5 до 0,6, наш прежний хедж уже не соответствует новой позиции. </p>
  <p id="xXOb"><strong>Vega</strong> описывает чувствительность к подразумеваемой волатильности. Если рынок стал дороже оценивать будущие колебания, опционная позиция может изменить стоимость, даже когда базовый актив стоит на месте.</p>
  <p id="V5ud"><strong>Theta</strong> описывает влияние течения времени при прочих равных. Право, которое заканчивается завтра, экономически отличается от права, которое будет действовать ещё год.</p>
  <p id="tNNz"><strong>Rho</strong> показывает чувствительность к процентной ставке. Она особенно важна там, где стоимость будущих платежей заметно зависит от ставок и срока.</p>
  <p id="XoPM">Для Vega, Theta и Rho критичны единицы: изменение на один процентный пункт, один день или один год не является одной и той же величиной. Перед сложением рисков нужно привести их к общей системе. </p>
  <p id="vw7F"><strong>Греки не предсказывают рынок. Они показывают, какие изменения рынка повредят или помогут нашей позиции.</strong></p>
  <hr />
  <p id="xyF8"><strong>39. Put-Call Parity, Delta Hedging и Gamma Scalping</strong></p>
  <p id="qUDX">У цен связанных опционов существуют ограничения, следующие из их будущих выплат.</p>
  <p id="SLoa"><strong>Put-Call Parity</strong> связывает европейские Call и Put с одинаковыми страйком и сроком, базовый актив и стоимость будущего платежа страйка. В упрощённом случае без дивидендов:</p>
  <p id="jo5X"><code>Call - Put = цена актива - текущая стоимость страйка</code></p>
  <p id="uL77">Почему? Потому что две определённые комбинации активов дают одинаковую выплату в конце срока. Если их цены сильно различаются, возникает возможность обменять одну комбинацию на другую, учитывая реальные издержки и ограничения.</p>
  <p id="DLYs">Теперь <strong>Delta Hedging</strong>, хеджирование дельты. Если опционная позиция реагирует на маленькое движение цены примерно как покупка 100 ABC, можно продать около 100 ABC, чтобы уменьшить суммарную дельту.</p>
  <p id="q58X">Оставшаяся чувствительность называется <strong>Residual Delta</strong>, остаточной дельтой. Но даже нулевая дельта не убирает Gamma, Vega и остальные риски.</p>
  <p id="b4nd"><strong>Gamma Scalping</strong> связан с повторным изменением такого хеджа. У позиции с положительной гаммой при росте цены дельта обычно увеличивается, и для возврата к нейтральности приходится продавать больше базового актива. При падении дельта уменьшается, и часть продажи выкупается.</p>
  <p id="PgtJ">Получается механика, похожая на &quot;продавать после роста, покупать после падения&quot;. Но она не бесплатна. Опционная позиция стоила денег, испытывает временной распад, а хеджирование несёт комиссии и проскальзывание. Важны фактические колебания относительно цены, которую мы заплатили за волатильность.</p>
  <p id="9lvu">Поэтому <strong>Volatility Trading</strong> торгует не только направление, но и относительную стоимость колебаний. А <strong>Options Market Making</strong> должен согласованно котировать множество опционов и управлять всеми этими чувствительностями, а не просто ставить два уровня цены.</p>
  <hr />
  <p id="gZER"><strong>40. Несколько площадок: локальный рынок, общий рынок и Last Look</strong></p>
  <p id="VEE4">Один актив может торговаться на нескольких площадках. <strong>Fragmentation ликвидности</strong> означает, что доступные предложения распределены между ними.</p>
  <p id="Toch"><strong>Локальный стакан</strong> показывает одну площадку. <strong>Консолидированный стакан</strong> объединяет несколько источников в выбранной модели.</p>
  <p id="G0Uc">Однако сложить объёмы одинаково названных инструментов недостаточно. Нужно учитывать валюту расчёта, комиссии, ограничения доступа, задержку, контрактные различия и то, доступен ли нам этот объём.</p>
  <p id="Id67">В американских акциях существует <strong>NBBO</strong>, National Best Bid and Offer, общерыночный ориентир лучших предложений по установленным правилам. <strong>SIP</strong> относится к инфраструктуре консолидации и распространения данных. <strong>Direct Feeds</strong> идут непосредственно от площадок и могут отличаться детализацией и путём доставки. Самодельная сводная цена криптобирж не становится от этого официальным NBBO. </p>
  <p id="gBsg">Иногда консолидированный Bid равен Ask. Это <strong>Locked Market</strong>, закрытый спред. Если Bid выше Ask, получается <strong>Crossed Market</strong>, пересечённый рынок. Между площадками такая картина может отражать реальную краткую возможность, несинхронность или недоступность части котировок. В одном непрерывном стакане совместимые встречные заявки обычно должны сопоставляться, но специальные режимы требуют отдельного рассмотрения.</p>
  <p id="3PZI">На некоторых FX-механизмах существует <strong>Last Look</strong>. После получения запроса поставщик ликвидности выполняет предусмотренную проверку и принимает или отклоняет исполнение. Это не универсальное свойство всех биржевых стаканов. Показанная цена и окончательно принятая сделка здесь требуют различения. </p>
  <hr />
  <p id="b8vs"><strong>41. Где рождается цена: Price Discovery и Lead-Lag</strong></p>
  <p id="wPyu">Представим, что после новой информации сначала меняется площадка A, затем B.</p>
  <p id="jKUM"><strong>Price Discovery</strong>, процесс формирования цены, описывает, как информация участников превращается в рыночную оценку. Некоторые площадки или инструменты могут в конкретных условиях участвовать в этом раньше других.</p>
  <p id="zj7v"><strong>Lead-Lag</strong> означает временное опережение и запаздывание. Например, движение фьючерса статистически помогает предсказывать ближайшее изменение связанного спотового инструмента.</p>
  <p id="xldD">Если программа использует эту связь для торговли, это <strong>Lead-Lag Trading</strong>. Если источник находится на другой площадке, речь также идёт о <strong>Cross-Venue Signal</strong>. Если это другой актив, о <strong>Cross-Asset Signal</strong>.</p>
  <p id="fysA"><strong>Latency Arbitrage</strong> пытается использовать временно устаревшие цены до их обновления. Но видимое расхождение ещё не доказывает доступную прибыль.</p>
  <p id="LF0t">Пока заявка добирается до площадки, цена может исчезнуть. На одной стороне исполнение произойдёт, на другой нет. Комиссии могут съесть разницу. А найденное запаздывание может оказаться ошибкой часов.</p>
  <p id="aTNf">Поэтому исследование должно ответить на три разных вопроса: действительно ли один рынок раньше отражает информацию, доступна ли эта информация нашему процессу вовремя и остаются ли исполнимые цены после нашей задержки.</p>
  <p id="Epy3">Это последовательность доказательств, а не один график с красивым сдвигом.</p>
  <hr />
  <p id="PmXp"><strong>42. Сессии, аукционы и остановки торгов</strong></p>
  <p id="AbsR">Рынок не всегда находится в режиме непрерывного сопоставления.</p>
  <p id="JGtH"><strong>Trading Calendar</strong>, торговый календарь, определяет рабочие дни, праздники и особые расписания. <strong>Trading Sessions</strong> и <strong>Trading Phases</strong> описывают сессии и фазы: предварительный сбор заявок, аукцион, непрерывные торги, закрытие.</p>
  <p id="kQjE">Во время <strong>Opening Auction</strong> заявки сначала собираются, а затем сопоставляются по правилам определения цены открытия. <strong>Closing Auction</strong> помогает сформировать цену закрытия. Там нельзя автоматически применять модель исполнения из обычного непрерывного стакана.</p>
  <p id="O8EX"><strong>Volatility Auction</strong> может включаться при необычном движении цены. Рынок получает время собрать новый набор заявок, прежде чем продолжить работу.</p>
  <p id="TmTw"><strong>Trading Halt</strong> означает остановку торгов. Она может быть связана с новостями, технической ситуацией или установленными ограничениями.</p>
  <p id="aFDy"><strong>Limit Up/Limit Down</strong> и связанные механизмы ценовых границ ограничивают торговлю вне определённых диапазонов. Конкретная реализация различается между рынками: где-то используются динамические диапазоны и паузы, где-то дневные пределы.</p>
  <p id="T7ZM">Все эти вещи относятся к <strong>правилам конкретной биржи</strong>, а не к универсальному абстрактному рынку.</p>
  <p id="GI5M">Для робота календарь определяет допустимость действий. Для исследователя он определяет смысл данных. Отсутствие сделок в закрытую сессию нельзя считать доказательством спокойного ликвидного рынка.</p>
  <hr />
  <p id="fQEr"><strong>43. Из каких наблюдений рождается сигнал</strong></p>
  <p id="J8Sl">Чтобы проверить идею, нужны измеримые признаки.</p>
  <p id="aAVV"><strong>Return</strong>, доходность, описывает изменение цены между моментами. Простой вариант:</p>
  <p id="2v9e"><code>Return = новая цена / старая цена - 1</code></p>
  <p id="0Z06">Движение со 100 до 101 даёт 1%. Но горизонт обязателен: доходность за миллисекунду и за день имеет разный смысл.</p>
  <p id="zAp5"><strong>Mid-Price Returns</strong> используют изменение середины Bid и Ask. Это помогает не путать движение рынка с чередованием сделок по покупке и продаже.</p>
  <p id="yd6j"><strong>Momentum</strong> предполагает продолжение движения. <strong>Mean Reversion</strong> предполагает возврат отклонения к некоторому ориентиру. <strong>Short-Term Reversal</strong> относится к короткому обратному движению после локального импульса.</p>
  <p id="eE0M">Эти идеи могут одновременно существовать на разных горизонтах. После покупки рынок может ещё 20 миллисекунд двигаться вверх, затем частично откатиться в течение секунды.</p>
  <p id="0t3U"><strong>Short-Term Alpha</strong> означает прогнозируемую полезную составляющую изменения на коротком горизонте. Здесь alpha не обязательно равна привычной оценке доходности относительно рыночного индекса: смысл нужно задавать в исследовании.</p>
  <p id="772W">У сигнала есть <strong>Signal Decay</strong>, затухание предсказательной силы. Информация постепенно отражается в цене и перестаёт давать преимущество.</p>
  <p id="jWU9"><strong>Half-Life сигнала</strong> описывает время снижения эффекта примерно вдвое, если такой способ описания подходит. Но это не всегда то же самое, что время возврата отклонения к среднему.</p>
  <p id="T490">Если модель говорит, что отклонение сокращается вдвое за секунду, это не означает, что полезность любой заявки по нему живёт ровно секунду.</p>
  <p id="WmFj"><strong>Сигнал всегда должен иметь объект прогноза, горизонт и точку, относительно которой измеряется результат.</strong></p>
  <hr />
  <p id="6XGo"><strong>44. Order Flow, Trade Flow и три разных дисбаланса</strong></p>
  <p id="IUW2">Стакан можно изучать как фотографию или как фильм.</p>
  <p id="YWxy"><strong>Order Flow</strong> показывает поступление, изменение и отмену заявок. <strong>Trade Flow</strong> показывает состоявшиеся сделки.</p>
  <p id="jr6m">У сделки есть покупатель и продавец, поэтому фраза &quot;объём покупок&quot; без уточнения двусмысленна. Часто имеется в виду сторона агрессора: кто инициировал немедленное исполнение.</p>
  <p id="CFHB"><strong>Signed Volume</strong> присваивает объёму знак. Например, агрессивной покупке плюс, агрессивной продаже минус. Если биржа не даёт сторону напрямую, её приходится оценивать, и такая классификация может ошибаться.</p>
  <p id="JjVs"><strong>Trade Imbalance</strong> сравнивает агрессивные покупки и продажи за окно. Он описывает уже совершённые действия.</p>
  <p id="dwOx"><strong>Queue Imbalance</strong> обычно сравнивает размеры очередей на лучших Bid и Ask. <strong>Order Book Imbalance</strong> может учитывать более широкую глубину и выбранные веса уровней.</p>
  <p id="L60p">Простой вариант дисбаланса:</p>
  <p id="O6Cb"><code>(объём Bid - объём Ask) / (объём Bid + объём Ask)</code></p>
  <p id="M90T">При объёмах 900 и 100 получаем 0,8. Это сильная асимметрия выбранных объёмов, но не 80-процентная вероятность роста.</p>
  <p id="sosZ"><strong>Order Flow Imbalance</strong>, OFI, оценивает направленный вклад изменений книги: добавления, отмены и исполнения на соответствующих сторонах. Он способен отличить два одинаковых текущих стакана, к которым рынок пришёл разными путями. </p>
  <p id="oR1v">Например, сейчас по обе стороны стоит по 1000. Но в первом случае Bid вырос со 100, а Ask уменьшился с 5000. Во втором было наоборот.</p>
  <p id="rM3c"><strong>Текущее равновесие объёмов и направление изменения ликвидности являются разными наблюдениями.</strong></p>
  <hr />
  <p id="Qxq4"><strong>45. Microprice: как сдвинуть середину и не принять оценку за истину</strong></p>
  <p id="Qj45">Обычный Mid не учитывает размеры очередей. Поэтому используют более содержательные оценки.</p>
  <p id="NdU9">Один простой вариант, взвешенная середина:</p>
  <p id="ktyR"><code>(Ask × объём Bid + Bid × объём Ask) / (объём Bid + объём Ask)</code></p>
  <p id="dveT">При Bid 99,99, Ask 100,01, объёме Bid 900 и объёме Ask 100 получаем 100,008.</p>
  <p id="ykMo">Почему большой объём покупателей сдвигает оценку к Ask? В такой простой модели тонкую очередь продавцов легче исчерпать, чем толстую очередь покупателей.</p>
  <p id="H1Q1">Эту оценку часто называют microprice. Но важно не смешивать её со всеми моделями, использующими это название. В более строгих работах <strong>Microprice</strong> строится как оценка ожидаемой будущей средней цены с учётом переходов состояния стакана. Это не просто другое имя одной универсальной формулы. </p>
  <p id="f7XM"><strong>Microprice Signal</strong> может измерять разницу такой оценки и текущего Mid. Например, модельная цена выше середины на 0,008.</p>
  <p id="5XcW">Но наличие разницы ещё не доказывает прибыльную покупку. Видимые объёмы могут отмениться, оценка может быть смещена, а комиссия и исполнение уничтожат небольшой эффект.</p>
  <p id="PxZb">Поэтому сначала задаём формулу или модель, затем проверяем, что её отклонения действительно предсказывают, на каком горизонте и после каких расходов.</p>
  <hr />
  <p id="Sb3I"><strong>46. Волатильность, интенсивность событий и Hawkes Processes</strong></p>
  <p id="7HGD">Для торговли важно не только направление, но и скорость изменений.</p>
  <p id="0nL4"><strong>Volatility Estimation</strong>, оценка волатильности, измеряет масштаб колебаний. <strong>Realized Volatility</strong> строится по фактически наблюдавшимся изменениям, в отличие от подразумеваемой волатильности опционов.</p>
  <p id="Nf6a">На очень коротких горизонтах способ расчёта важен. Например, перескоки сделок между Bid и Ask могут создавать движение последней цены без соответствующего изменения середины рынка.</p>
  <p id="YaXg">Теперь посмотрим не на размер движения, а на частоту событий.</p>
  <p id="WBNB"><strong>Arrival Rate</strong> описывает интенсивность поступления: сколько заявок или сделок ожидается за единицу времени в заданных условиях.</p>
  <p id="HjIq"><strong>Cancellation Intensity</strong> описывает интенсивность отмен. Если видимая глубина велика, но исчезает очень быстро, её устойчивость может быть низкой.</p>
  <p id="vOtz"><strong>Hawkes Processes</strong> позволяют моделировать ситуации, где прошлые события временно увеличивают интенсивность следующих.</p>
  <p id="mafI">Представим базовый уровень две покупки в секунду. После крупной покупки модельная интенсивность на короткое время повышается до пяти событий в секунду, затем постепенно возвращается. Следующее событие может снова увеличить её.</p>
  <p id="tfMW">Это не обещание, что за следующую секунду произойдёт ровно пять покупок. Речь об условной интенсивности случайного процесса.</p>
  <p id="p5jl">В многомерной модели один поток может влиять на другой: например, сделки на интенсивность отмен. Но статистическая связь сама по себе не доказывает конкретную причинную историю. </p>
  <p id="cRl4"><strong>Hawkes полезен там, где важна зависимость частоты событий от недавней истории. Он не заменяет корректные исходные данные и проверку торговой ценности.</strong></p>
  <hr />
  <p id="FM0M"><strong>47. Режимы рынка, Online Learning и калибровка вероятностей</strong></p>
  <p id="Slwu">Один и тот же сигнал может вести себя по-разному в разных условиях.</p>
  <p id="70ql"><strong>Volatility Regime</strong> описывает режим колебаний. <strong>Liquidity Regime</strong> состояние доступной ликвидности. <strong>Spread Regime</strong> характер ширины спреда.</p>
  <p id="SgW0">Можно также различать <strong>Trending Market</strong>, рынок с продолжением движений, и <strong>Mean-Reverting Market</strong>, где выбранные отклонения чаще возвращаются на рассматриваемом горизонте.</p>
  <p id="iuhv"><strong>Normal vs Stressed Market</strong> отделяет обычные условия от напряжённых, например с резким исчезновением ликвидности и ухудшением исполнения.</p>
  <p id="7Bj6"><strong>Regime Detection</strong>, определение режима, пытается распознавать такие состояния. Но оно тоже ошибается и запаздывает. Нельзя считать, что метка &quot;спокойный рынок&quot; автоматически делает риск безопасным.</p>
  <p id="42V7"><strong>Concept Drift</strong> означает изменение связи между признаками и прогнозируемым результатом. Вчера определённый дисбаланс был полезен, сегодня новые участники иначе реагируют на него.</p>
  <p id="Hcek"><strong>Online Learning</strong> обновляет модель по мере поступления данных. Это помогает адаптации, но может и быстро испортить модель, если она обучается на ошибочном потоке или короткой аномалии.</p>
  <p id="MUDb">Отдельно нужна <strong>калибровка вероятностей</strong>. Если модель много раз говорит &quot;вероятность исполнения 80%&quot;, примерно соответствующая доля подобных прогнозов должна заканчиваться исполнением. Хорошее ранжирование ситуаций и честные численные вероятности не являются одним и тем же свойством. </p>
  <p id="8GcI">Поэтому полезно проверять не только общую точность, но и соответствие прогнозов реальным частотам в разных режимах.</p>
  <hr />
  <p id="mdwq"><strong>48. Маркет-мейкинг и управление накопленной позицией</strong></p>
  <p id="emcS"><strong>Market Making</strong>, маркет-мейкинг, предполагает предоставление цен покупки и продажи с управлением возникающим риском.</p>
  <p id="Q63M">Самая простая идея: купить по 99,99 и продать по 100,01. Но обе стороны не обязаны исполниться симметрично.</p>
  <p id="FuSq">Если покупку исполнили пять раз, а продажу ни разу, у нас накопился <strong>Inventory</strong>, запас актива или позиция. <strong>Inventory Management</strong> управляет этим запасом, чтобы стратегия не превратилась из посредника в случайного направленного инвестора.</p>
  <p id="Xecy"><strong>Spread Management</strong> выбирает ширину котировок. Узкий спред может увеличить число исполнений, но оставляет меньший запас на издержки и неблагоприятный отбор.</p>
  <p id="2S9W"><strong>Reservation Price</strong> можно понимать как внутреннюю оценку цены, относительно которой нам сейчас разумно котировать с учётом риска и запаса. Если актив уже сильно накоплен, нам может быть выгоднее продавать его охотнее и покупать осторожнее.</p>
  <p id="OISf"><strong>Inventory Skew</strong> меняет котировки из-за позиции. Например, продажа становится ближе к рынку, покупка дальше.</p>
  <p id="bkJY"><strong>Quote Skew</strong> является более общим смещением котировок. Причиной может быть не только запас, но и прогноз направления.</p>
  <p id="rZ5x"><strong>Dynamic Widening</strong> расширяет котировки при росте неопределённости, волатильности или риска исполнения.</p>
  <p id="bTvM">Предоставление таких заявок относится к <strong>Liquidity Provision</strong>. Немедленное забирание чужой ликвидности к <strong>Liquidity Taking</strong>.</p>
  <p id="Ug0x"><strong>Rebate Capture</strong> пытается использовать выплаты за предоставление ликвидности. Но смысл появляется только тогда, когда выплата превышает связанные потери. Получать rebate на постоянно токсичных исполнениях невыгодно.</p>
  <p id="dcM9"><strong>Маркет-мейкер управляет не двумя ценами, а обменом между вероятностью исполнения, доходом на сделку и риском накопленной позиции.</strong></p>
  <hr />
  <p id="jg3y"><strong>49. Статистический арбитраж и торговля относительной стоимостью</strong></p>
  <p id="H5r3"><strong>Statistical Arbitrage</strong>, статистический арбитраж, ищет воспроизводимые относительные отклонения. Несмотря на слово &quot;арбитраж&quot;, такая стратегия может иметь существенный риск.</p>
  <p id="J2Ah"><strong>Relative-Value Trading</strong>, торговля относительной стоимостью, сравнивает связанные инструменты: какой из них дорог или дёшев относительно другого.</p>
  <p id="WRws"><strong>Pairs Trading</strong>, парная торговля, является частным примером. Допустим, два инструмента обычно связаны определённым соотношением. Один сильно вырос относительно другого. Стратегия продаёт относительно дорогой и покупает относительно дешёвый.</p>
  <p id="o9bZ">Но высокой корреляции цен недостаточно. Два актива могут часто двигаться в одну сторону и при этом не иметь устойчивого отклонения, которое возвращается к прежнему уровню.</p>
  <p id="Z6rz"><strong>Order Flow Prediction</strong> использует изменения заявок и сделок для прогноза ближайшего потока или цены. Такой прогноз может применяться и в пассивной, и в агрессивной торговле.</p>
  <p id="Ih6T"><strong>Event-Driven HFT</strong> реагирует на конкретные события: публикацию данных, изменение связанного рынка, обновление состава индекса. Это следует отличать от Event-Driven Architecture. Первая характеристика относится к торговой идее, вторая к устройству программы.</p>
  <p id="geaC"><strong>Auction Trading</strong> использует особенности аукционов: накопление заявок, ожидаемую цену сопоставления и дисбаланс. Здесь модель исполнения отличается от непрерывного рынка.</p>
  <p id="ZDgC">Все эти семейства могут пересекаться. Одна стратегия может быть одновременно событийной, относительной и основанной на опережающей площадке.</p>
  <p id="FohN">Но они не обязаны быть высокочастотными только потому, что используют знакомые HFT-термины.</p>
  <hr />
  <p id="M891"><strong>50. Межбиржевой, фьючерсный, индексный и треугольный арбитраж</strong></p>
  <p id="7XUj">Начнём с <strong>Cross-Venue Arbitrage</strong>. На площадке A можно купить ABC по 100, на B продать по 101. Теоретическая разница равна 1.</p>
  <p id="hqfe">Практически нужны деньги и активы на соответствующих площадках, доступ к исполнению обеих сторон и учёт расходов. Перевод актива после обнаружения возможности может оказаться слишком медленным.</p>
  <p id="zFYG"><strong>Futures-Spot Arbitrage</strong> сравнивает срочный контракт и базовый актив на споте.</p>
  <p id="BsqR"><strong>Cash-and-Carry</strong> является характерной конструкцией: купить актив и продать относительно дорогой фьючерс, удерживая позицию до подходящего момента или расчёта. Нужно учитывать финансирование, обеспечение, хранение или заимствование и условия поставки. Это может быть совсем не HFT по длительности удержания.</p>
  <p id="9zZd"><strong>Basis Trading</strong> шире: стратегия торгует базисом и его изменением. <strong>Calendar Spread</strong> торгует разницей контрактов разных сроков. Можно почти убрать общую направленность и оставить риск изменения этой разницы.</p>
  <p id="CQ9O"><strong>Index Arbitrage</strong> сравнивает связанный с индексом инструмент и стоимость соответствующей корзины. <strong>ETF Arbitrage</strong> сравнивает цену доли фонда со стоимостью активов и экономикой доступных операций создания или погашения. Не каждый участник имеет одинаковый доступ к этим механизмам.</p>
  <p id="pEVg"><strong>Triangular Arbitrage</strong> проверяет согласованность трёх курсов. Например, обмен из валюты A в B, затем в C и обратно в A должен после издержек давать экономически согласованный результат. Если нет, возникает потенциальная цепочка.</p>
  <p id="YewS">Но три положительно выглядящих обменных курса ещё не гарантируют прибыль: цены и доступный объём могут измениться между исполнениями.</p>
  <p id="StTU"><strong>Арбитражная идея является сравнением связанных выплат. Реализация всё равно несёт риск времени, ликвидности и неполного исполнения.</strong></p>
  <hr />
  <p id="X5dh"><strong>51. Как выбрать площадку и разбить большую задачу</strong></p>
  <p id="SEXo">Допустим, нужно купить 10 000 ABC. Одна большая заявка может дорого пройти по стакану.</p>
  <p id="CcLX"><strong>Order Splitting</strong> разбивает задачу на части. Большую задачу называют родительской, а отдельные заявки <strong>Child Orders</strong>, дочерними.</p>
  <p id="35Xk"><strong>Execution Scheduling</strong> решает, когда выпускать эти части. Можно растянуть исполнение во времени или ускориться при благоприятных условиях. При этом ожидание снижает непосредственное давление на рынок, но оставляет риск изменения цены.</p>
  <p id="Korc"><strong>Venue Selection</strong> выбирает площадку. Лучшая отображаемая цена не обязательно даёт лучший итог: различаются комиссии, объём, скорость, доступность и вероятность исполнения.</p>
  <p id="WHg5"><strong>Smart Order Routing</strong>, SOR, автоматизирует выбор маршрута и распределение объёма между площадками.</p>
  <p id="M8tz"><strong>Queue-Aware Execution</strong> учитывает положение в очереди. Например, наша старая заявка стоит почти первой. Новая цена выглядит немного лучше, но перестановка отправит нас в конец другой очереди.</p>
  <p id="EvvU">Тогда нужно сравнить не только две цены, но и две вероятности исполнения, время ожидания и качество сделок, которые обычно достаются в этих состояниях.</p>
  <p id="zbUd">Получается, исполнение не является механической командой после сигнала. Это отдельная задача оптимизации: <strong>как превратить нужную экономическую позицию в реальные сделки с приемлемыми издержками и риском</strong>.</p>
  <hr />
  <p id="UraL"><strong>52. Математическое ожидание, разброс и связь между величинами</strong></p>
  <p id="TOsG">Теперь проверим, есть ли у стратегии основание работать.</p>
  <p id="Y6DP"><strong>Математическое ожидание</strong> является средним результатом с учётом вероятностей. Если половина сделок приносит 2, а половина отнимает 1:</p>
  <p id="N9ki"><code>0,5 × 2 + 0,5 × (-1) = 0,5</code></p>
  <p id="OjIZ">Но среднее не показывает, насколько результат нестабилен.</p>
  <p id="3Pc4"><strong>Дисперсия</strong>, Variance, измеряет разброс относительно среднего через квадраты отклонений. Квадраты нужны, в частности, чтобы положительные и отрицательные отклонения не уничтожили друг друга. Стандартное отклонение возвращает меру разброса в исходные единицы.</p>
  <p id="zEgp">Две стратегии могут иметь одинаковое ожидание. Одна почти всегда даёт около 0,5. Другая часто зарабатывает 10 и иногда теряет очень много. Для капитала это разные истории.</p>
  <p id="O2xW"><strong>Ковариация</strong> показывает совместное изменение величин. Если два результата склонны одновременно быть выше своих средних, ковариация положительная.</p>
  <p id="XQGj"><strong>Корреляция</strong> нормирует такую связь относительно разбросов. Но она описывает определённый вид зависимости и не доказывает причину.</p>
  <p id="IiVx"><strong>Ложная корреляция</strong> может возникнуть случайно или из-за общего скрытого фактора. Две монеты могут одновременно расти потому, что движется весь рынок, а не потому, что одна надёжно предсказывает другую.</p>
  <p id="Jp9g">Поэтому полезный вопрос не &quot;нашёл ли я красивую корреляцию&quot;, а &quot;какую именно зависимость она показывает и сохранится ли она в новых условиях&quot;.</p>
  <hr />
  <p id="BSZ6"><strong>53. Условная вероятность и Байес на понятном примере</strong></p>
  <p id="3oZ5">Обычная вероятность отвечает: &quot;Как часто происходит возврат цены?&quot;</p>
  <p id="dgDZ"><strong>Условная вероятность</strong> уточняет: &quot;Как часто происходит возврат, когда мы видим конкретный сигнал?&quot;</p>
  <p id="MLLO">Это различие важно, потому что сигнал должен менять исходную оценку.</p>
  <p id="3Rlk">Представим 100 наблюдений. В 40 цена вернулась, в 60 не вернулась.</p>
  <p id="K2nk">Некоторый признак появился в 30 случаях из 40 возвратов и в 12 случаях из 60 невозвратов.</p>
  <p id="QVNk">Значит, признак появился 42 раза. Из них 30 закончились возвратом:</p>
  <p id="sLi2"><code>30 / 42 ≈ 71%</code></p>
  <p id="2xn2">До учёта признака частота возврата составляла 40%. После наблюдения признака в этой выборке оценка стала около 71%.</p>
  <p id="dky8">Это понятная иллюстрация <strong>Bayesian Updating</strong>, байесовского обновления: исходное знание меняется с учётом того, насколько наблюдение характерно для разных вариантов.</p>
  <p id="2fdP">Но нельзя просто произвольно повышать вероятность с 50 до 60, а затем до 80, потому что &quot;сигнал выглядит сильным&quot;. Нужны исходные частоты и условные вероятности либо модель, которая их оценивает.</p>
  <p id="1PZA">Также нельзя считать несколько почти одинаковых сигналов независимыми доказательствами. Если три признака получены из одного изменения стакана, они могут многократно пересказывать одну информацию.</p>
  <p id="HfMM"><strong>Байесовское обновление не создаёт уверенность из воздуха. Оно связывает прежнюю оценку с доказательной силой новых данных.</strong></p>
  <hr />
  <p id="uun5"><strong>54. Проверка гипотез и доверительные интервалы</strong></p>
  <p id="iJix">Мы заметили: после определённого состояния стакана цена через 500 миллисекунд в среднем растёт.</p>
  <p id="zV8c"><strong>Hypothesis Testing</strong>, проверка гипотез, спрашивает, насколько наблюдаемый результат совместим с заданной исходной гипотезой и моделью случайности. Например, с отсутствием среднего эффекта.</p>
  <p id="zsgb">При этом маленький p-value не означает &quot;вероятность того, что гипотеза неверна, равна 99%&quot;. Он оценивает, насколько необычны такие или более экстремальные данные при принятой нулевой гипотезе и предпосылках теста.</p>
  <p id="OpoD"><strong>Confidence Interval</strong>, доверительный интервал, показывает неопределённость оценки через процедуру, которая при повторении экспериментов обладает заданным покрытием.</p>
  <p id="Gz9c">Если метод строит 95-процентные интервалы корректно, в длинной серии таких экспериментов около 95% интервалов будут накрывать истинный параметр. Это не то же самое, что без дополнительных оговорок приписать фиксированному параметру 95-процентную вероятность находиться в уже рассчитанном интервале. </p>
  <p id="kJTP">Для практики смысл простой: оценка &quot;средний эффект 2 bps&quot; должна сопровождаться пониманием того, насколько точно мы её знаем и насколько уместны предпосылки расчёта.</p>
  <p id="xDj0">Далее различаем <strong>Statistical Significance</strong> и <strong>Economic Significance</strong>.</p>
  <p id="31ro">Первое говорит о статистической убедительности эффекта в выбранной процедуре. Второе о его экономической значимости.</p>
  <p id="atRu">Если эффект составляет 0,05 bps, а минимальные реальные издержки 1 bp, очень уверенное обнаружение эффекта ещё не создаёт выгодную торговлю.</p>
  <p id="8UFi"><strong>Нужно доказать не только существование отклонения от нуля, но и достаточный размер полезного результата после расходов.</strong></p>
  <hr />
  <p id="hQYD"><strong>55. Multiple Testing, Data Snooping и переобучение</strong></p>
  <p id="pSRq">Представим, что мы проверили одну идею и получили красивый результат.</p>
  <p id="tbtJ">Теперь другая история: мы проверили 20 000 комбинаций параметров и выбрали самую красивую.</p>
  <p id="qyLu">Во втором случае положительный результат мог появиться просто из-за огромного числа попыток. Это проблема <strong>Multiple Testing</strong>, множественного тестирования.</p>
  <p id="uDdY"><strong>Data Snooping</strong> возникает, когда исследователь снова и снова использует одни данные, адаптируя решение к увиденному. Даже без программной утечки человек постепенно подгоняет систему под историю.</p>
  <p id="3CyW"><strong>P-Hacking</strong> означает подбор вариантов анализа, остановки эксперимента, фильтров или представления результатов ради получения формально убедительной статистики.</p>
  <p id="WoYq"><strong>Overfitting</strong>, переобучение, описывает ситуацию, когда модель слишком хорошо выучила особенности и шум конкретной выборки.</p>
  <p id="bPjU"><strong>Backtest Overfitting</strong> относится к этому эффекту в процессе выбора торговых стратегий и параметров. Мы можем создать систему, которая отлично описывает уже известную траекторию и плохо работает на новых данных.</p>
  <p id="DwWw">Пример: сначала выбрали окно 100 миллисекунд, затем 120, затем 117. Убрали несколько плохих инструментов, исключили вторники, добавили ограничение по времени. Каждый шаг может выглядеть разумным. Но вместе они способны превратить случайную историю в &quot;идеальную стратегию&quot;.</p>
  <p id="EfQP">Защита начинается не с красивого показателя, а с дисциплины исследования: фиксировать попытки, причины изменений и действительно неиспользованные данные.</p>
  <p id="TVnM"><strong>Чем больше вариантов мы посмотрели, тем меньше удивляет один выдающийся результат.</strong></p>
  <hr />
  <p id="Wzbn"><strong>56. Selection Bias, Survivorship Bias и утечка будущего</strong></p>
  <p id="IHyQ"><strong>Selection Bias</strong>, смещение отбора, возникает, когда исследуемая выборка систематически отличается от того мира, к которому мы хотим применить вывод.</p>
  <p id="t1TL">Например, выбрали только дни, когда соединение работало идеально, а потом объявили результат оценкой всей торговой системы.</p>
  <p id="P2Mq"><strong>Survivorship Bias</strong>, ошибка выжившего, является частным случаем. Мы тестируем только сегодняшние живые инструменты и не учитываем те, которые исчезли, обесценились или были исключены из торгов.</p>
  <p id="R1Rs"><strong>Look-Ahead Bias</strong> означает использование информации, которой в момент решения ещё не было.</p>
  <p id="3bqq"><strong>Feature Leakage</strong>, утечка в признаки, может быть менее заметной. Например, окно расчёта средней случайно захватывает будущие события. Или параметры нормализации рассчитаны по всей истории, включая тестовый период. Или итоговая исправленная запись используется так, будто исправление было известно сразу.</p>
  <p id="bRuI">Здесь снова нужен Point-in-Time: когда наблюдение было известно и когда применялось.</p>
  <p id="upq7">Особая история, <strong>Corporate Actions</strong>, корпоративные действия. При дроблении акции два к одному цена условно меняется со 100 на 50, а количество акций удваивается. Это не обычный убыток владельца в 50%.</p>
  <p id="SFm4">Но для исследования исполнения нельзя бездумно заменить реальные исторические цены будущими скорректированными значениями. Полезно отдельно хранить исходные торговые данные, события и правила корректировки.</p>
  <p id="gV6q"><strong>Очистка ошибочных тиков</strong> тоже требует осторожности. Подозрительную цену нужно проверять, а не удалять все сильные движения. Иначе фильтр может выбросить настоящие кризисы и оставить только удобный рынок.</p>
  <hr />
  <p id="9G7i"><strong>57. Нестационарность, автокорреляция и тяжёлые хвосты</strong></p>
  <p id="W77R"><strong>Нестационарность</strong> означает изменение статистических свойств процесса со временем. Средний уровень активности, разброс, связи между инструментами и вероятность исполнения не обязаны быть постоянными.</p>
  <p id="pkoA"><strong>Автокорреляция</strong> связывает ряд с собственным прошлым. Например, положительное изменение может чаще сопровождаться следующим положительным изменением. Но зависимость уровней цен, доходностей и абсолютных доходностей имеет разный смысл.</p>
  <p id="ITQS"><strong>Гетероскедастичность</strong> означает непостоянный условный разброс. Рынок может долго быть спокойным, затем перейти в период сильных колебаний.</p>
  <p id="QIp9"><strong>Fat Tails</strong>, тяжёлые хвосты, описывают более высокую частоту экстремальных наблюдений по сравнению с некоторыми привычными тонкохвостыми моделями, например нормальной. Нельзя автоматически переносить оценку редкости из удобного распределения на реальный рынок. </p>
  <p id="l6zk"><strong>Extreme Value Theory</strong>, теория экстремальных значений, изучает поведение экстремумов и сильных превышений порогов. Она помогает сосредоточиться на хвосте, но всё равно требует предпосылок и достаточной информации. Мало наблюдений в самой опасной области означает большую неопределённость. </p>
  <p id="hs0u"><strong>Bootstrap</strong> оценивает неопределённость повторным формированием выборок из имеющихся данных. Но случайное перемешивание отдельных торговых событий может разрушить временную зависимость. Поэтому для временных рядов используют подходящие блочные варианты.</p>
  <p id="oydt">И ещё ограничение: перестановка уже увиденных спокойных дней не создаёт автоматически кризис, которого в исходных данных не было.</p>
  <p id="ToGJ"><strong>Редкие убытки нельзя надёжно оценивать только тем, что они пока не встретились.</strong></p>
  <hr />
  <p id="ME5F"><strong>58. Walk-Forward, Purging, Embargo и честная проверка</strong></p>
  <p id="Ol1e"><strong>Out-of-Sample Testing</strong> проверяет модель на данных, которые не участвовали в её построении и выборе.</p>
  <p id="M8W7">Но если после каждого результата мы меняем модель и снова смотрим тот же тест, он постепенно становится частью разработки. Называть его &quot;вневыборочным&quot; уже недостаточно.</p>
  <p id="ComK"><strong>Walk-Forward Validation</strong> повторяет естественный ход времени. Обучаемся на прошлом, проверяем на следующем периоде, затем сдвигаемся вперёд. Так виднее, как стратегия переносит изменения рынка. </p>
  <p id="7YnI">У финансовых примеров могут пересекаться интервалы результата. Сигнал в 12:00:00 оценивается по следующей секунде. Сигнал в 12:00:00.100 использует почти тот же будущий участок.</p>
  <p id="rDRg">Если один попал в обучение, другой в проверку, возникает зависимость, которая способна завысить оценку.</p>
  <p id="kC03"><strong>Purged Cross-Validation</strong> удаляет из обучающей части наблюдения, чьи интервалы информации или меток конфликтуют с тестовой частью.</p>
  <p id="SokC"><strong>Embargo</strong> добавляет временной буфер, например исключая часть обучающих наблюдений сразу после тестового интервала в соответствующей схеме разбиения. Это снижает определённые виды утечки, но не исправляет неправильные признаки автоматически.</p>
  <p id="OvfG">После истории полезны два режима.</p>
  <p id="lxzr"><strong>Paper Trading</strong> имитирует сделки на текущем рынке без обычного реального исполнения. Качество зависит от модели исполнения.</p>
  <p id="Kso6"><strong>Shadow Trading</strong> запускает стратегию рядом с реальной системой: она получает живые данные и выдаёт решения, но не отправляет настоящие торговые команды.</p>
  <p id="nqW4">Оба режима помогают проверить работу на живом потоке. Ни один не доказывает, что реальная очередь и реальные исполнения будут такими же.</p>
  <hr />
  <p id="EpiZ"><strong>59. Реалистичный бэктест начинается с последовательности событий</strong></p>
  <p id="iWLn">Свеча сообщает максимум, минимум, начало и конец интервала. Но она не рассказывает, в каком порядке менялся стакан и когда могла исполниться наша заявка.</p>
  <p id="bFGe"><strong>Event-Driven Simulation</strong> моделирует отдельные события. <strong>Tick-by-Tick Replay</strong> воспроизводит доступную историческую последовательность мелких рыночных обновлений.</p>
  <p id="8cUL">Если история содержит снимок и изменения, нужна <strong>L2/L3-реконструкция стакана</strong>. Симулятор должен правильно восстановить книгу, а не опираться на уже испорченные уровни.</p>
  <p id="hiTB">Затем требуется модель <strong>Matching Engine</strong>. Она учитывает правила приоритета и допустимого исполнения.</p>
  <p id="55cN">Самая известная ошибка выглядит так: поставили покупку по 100, историческая сделка прошла по 100, значит нас исполнили.</p>
  <p id="wmdh">Но перед нами могли стоять 50 000 контрактов, а сделка была на 10.</p>
  <p id="svXU">Поэтому нужна <strong>модель позиции в очереди</strong> и её уменьшения, Queue Depletion. На L2 часто невозможно точно узнать, какая отмена произошла впереди, а какая позади. Тогда требуется явно обозначенная вероятностная или консервативная модель, а не ложная точность. </p>
  <p id="T0Ju"><strong>Partial Fill Simulation</strong> учитывает частичное исполнение. Если до нашей заявки дошло 20 единиц встречного объёма, нельзя считать исполненными все 1000.</p>
  <p id="Yxk7"><strong>Моделирование Cancel/Fill Race</strong> оставляет заявку активной до фактического момента обработки отмены. Решение стратегии убрать заявку не должно мгновенно стирать её из исторического рынка.</p>
  <p id="5zaD"><strong>Касание цены является наблюдением рынка. Исполнение нашей заявки является отдельным событием, которое ещё нужно обосновать.</strong></p>
  <hr />
  <p id="tNyT"><strong>60. Задержки в симуляции и пределы исторического воспроизведения</strong></p>
  <p id="2cf5"><strong>Latency Model</strong> определяет, когда событие становится доступно роботу и когда его действие достигает биржи.</p>
  <p id="kRYK">Если событие произошло в момент 0, а Feed Latency равна 5 миллисекундам, робот не может реагировать в момент 0.</p>
  <p id="wEJE">После обработки добавляется Order Entry Latency, затем Exchange Processing Latency. За это время другие участники продолжают действовать.</p>
  <p id="AFge">Задержка может зависеть от нагрузки, типа сообщения и состояния сети. Постоянное число удобно как первый сценарий, но не обязательно описывает реальный хвост.</p>
  <p id="vKuK">Нужно учитывать и <strong>реакцию других участников</strong>. Историческая запись показывает рынок без наших конкретных новых заявок. Если мы добавили крупный объём, другие алгоритмы могли бы изменить поведение. Обычный replay не умеет восстановить эту альтернативную историю точно.</p>
  <p id="G6UB"><strong>Market Impact Model</strong> и <strong>Slippage Model</strong> приближают соответствующие эффекты. Но их предположения нужно проверять, а не считать любой результат симулятора фактом.</p>
  <p id="LIK7">Реалистичная симуляция также учитывает комиссии и rebates, минимальный шаг цены, ограничения типов заявок, торговые паузы, аукционы и действовавшие правила площадки. <strong>Delisted</strong> и <strong>expired instruments</strong>, удалённые и истёкшие инструменты, не должны исчезать из прошлого только потому, что их нет сегодня.</p>
  <p id="QjjV"><strong>Deterministic Replay</strong>, детерминированное воспроизведение, означает одинаковый результат при одинаковом входе, конфигурации и заданных источниках случайности. Это необходимо для нормального расследования расхождений.</p>
  <p id="Ba4o">Но одинаковый результат двух запусков не доказывает правильность модели.</p>
  <p id="bEFp">Поэтому отдельно изучают <strong>расхождение backtest, simulation и production</strong>: какие исполнения, задержки и расходы отличились и почему.</p>
  <hr />
  <p id="FuAP"><strong>61. Как считать прибыль и не вычесть один расход дважды</strong></p>
  <p id="AAhp"><strong>P&amp;L</strong>, Profit and Loss, означает финансовый результат.</p>
  <p id="ivct"><strong>Gross P&amp;L</strong> обычно показывает результат до определённых расходов. <strong>Net P&amp;L</strong> после них. Но набор включённых расходов нужно прямо перечислять.</p>
  <p id="zDvP">Представим, что мы купили 100 ABC по 99,99 и продали по 100,01. Результат движения денежных средств от цен:</p>
  <p id="orR5"><code>100 × (100,01 - 99,99) = 2</code></p>
  <p id="sgJG">Если комиссии за обе стороны составили 0,8, остаётся 1,2 до других расходов.</p>
  <p id="3osc">Если реальные цены исполнения уже использованы, нельзя ещё раз вычесть из этого результата то же проскальзывание, которое ухудшило эти цены. Его можно отдельно показать в аналитике относительно другого ориентира, но не повторно списать деньги.</p>
  <p id="BUCA"><strong>Realized P&amp;L</strong> относится к результату закрытой части позиции. <strong>Unrealized P&amp;L</strong> к оценке ещё открытой. Конкретный учёт зависит от выбранного метода сопоставления покупок и продаж.</p>
  <p id="bJcW">Если мы купили, но ещё не продали, результат зависит от цены переоценки. Mid удобен для сравнения, но крупную позицию нельзя обязательно закрыть по Mid.</p>
  <p id="HaSr"><strong>Spread Capture</strong> оценивает, насколько стратегия получает выгоду от размещения по разные стороны рынка. Но для незавершённой пары сделок нужно быть осторожным: покупка по Bid ещё не гарантирует будущую продажу по Ask.</p>
  <p id="v4Iw">Funding, borrow, rebates и другие платежи должны попадать в согласованный учёт.</p>
  <p id="OLAS"><strong>Финансовый результат сначала считается по реальным сделкам и денежным потокам. Объясняющие модели строятся уже поверх него.</strong></p>
  <hr />
  <p id="kgtt"><strong>62. Fill Rate, Win Rate, Sharpe и остальные показатели результата</strong></p>
  <p id="ttE6"><strong>Fill Rate</strong> показывает долю исполнений, но знаменатель нужно определить. Доля исполненных заявок и доля исполненного объёма могут сильно различаться.</p>
  <p id="pgDD"><strong>Hit Rate</strong> ещё менее однозначен. В одной команде так называют долю правильных прогнозов, в другой успешных торговых попыток. Поэтому рядом с числом должно стоять определение.</p>
  <p id="QSNr"><strong>Win Rate</strong> показывает долю прибыльных сделок или завершённых торговых эпизодов. Но 90 маленьких выигрышей и 10 огромных проигрышей могут дать высокий Win Rate и общий убыток.</p>
  <p id="qDEV"><strong>Profit Factor</strong> делит сумму положительных результатов на абсолютную сумму отрицательных зафиксированных результатов в выбранном учёте.</p>
  <p id="NTuM"><strong>Sharpe Ratio</strong> сравнивает средний избыточный результат с его стандартным отклонением. Он полезен для оценки доходности относительно изменчивости, но не полностью описывает хвостовые риски. Пересчёт на год требует внимания к зависимости наблюдений, а не механического умножения любого числа на корень из количества интервалов. </p>
  <p id="Upuc"><strong>Sortino Ratio</strong> использует меру отрицательных отклонений относительно выбранного целевого результата. Нужно понимать, какой порог принят.</p>
  <p id="0zcW"><strong>Maximum Drawdown</strong> показывает максимальное падение капитала от предыдущего пика. Если капитал вырос до 120, затем упал до 90, просадка от пика составляет 30, или 25%.</p>
  <p id="qG9S"><strong>Turnover</strong>, оборот, показывает объём торговли, часто относительно капитала. Но и здесь бывают разные определения.</p>
  <p id="NWw1"><strong>Capacity</strong> описывает масштаб, после которого добавление капитала или объёма заметно ухудшает стратегию. <strong>Capital Efficiency</strong> оценивает результат относительно задействованного капитала.</p>
  <p id="l7yS"><strong>Margin Usage</strong> показывает использование обеспечения. <strong>Inventory Distribution</strong> распределение накопленных позиций, включая редкие крайние значения. <strong>Holding Time</strong> продолжительность удержания позиции.</p>
  <p id="bpQ3">Ни один из этих показателей не заменяет остальные. Высокая доходность при неизвестных хвостах позиции может быть опаснее умеренной, но понятной системы.</p>
  <hr />
  <p id="jZdH"><strong>63. P&amp;L Attribution: за счёт чего именно получились деньги</strong></p>
  <p id="vTBj">Общий результат полезно разложить. Это <strong>P&amp;L Attribution</strong>, объяснение источников прибыли и убытка.</p>
  <p id="OY9L"><strong>Alpha P&amp;L</strong> относят к полезному прогнозу направления. <strong>Spread P&amp;L</strong> к получению выгодных цен по обе стороны рынка. <strong>Inventory P&amp;L</strong> к переоценке накопленного запаса.</p>
  <p id="RCl9"><strong>Hedge P&amp;L</strong> показывает результат хеджирующих сделок. <strong>Fee и Rebate P&amp;L</strong> отдельно учитывают комиссии и выплаты.</p>
  <p id="Ili0">Но эти категории не возникают автоматически из биржевой выписки. Их нужно определить через согласованные ориентиры и правила. Например, прибыль от удержания актива после сигнала можно одновременно назвать alpha и inventory, если не разделить расчёт.</p>
  <p id="FtKD"><strong>Adverse Selection Cost</strong> оценивает ухудшение из-за неблагоприятного отбора исполнений. <strong>Latency Cost</strong> пытается измерить, насколько результат ухудшился из-за задержки. Последнее обычно требует сравнения с модельным вариантом, потому что в реальности мы не можем одновременно прожить одну сделку с двумя задержками.</p>
  <p id="rUsg"><strong>Opportunity Cost</strong>, стоимость упущенной возможности, описывает не полученный потенциальный результат. Например, сигнал был, но лимит риска не позволил торговать. Это не фактическое списание со счёта и зависит от того, насколько реалистична альтернативная сделка.</p>
  <p id="dqSe">Затем результат раскладывают <strong>по площадкам, инструментам и режимам</strong>. Общие +10 могут скрывать +100 на одном рынке и -90 на другом.</p>
  <p id="MNiw"><strong>Атрибуция нужна не для красивых названий прибыли, а чтобы понять, какое конкретное решение улучшать.</strong></p>
  <hr />
  <p id="N7s5"><strong>64. Ограничения риска должны учитывать ещё не исполненные заявки</strong></p>
  <p id="pmsX"><strong>Position Limits</strong> ограничивают количество актива или контрактов. <strong>Notional Limits</strong> ограничивают денежный номинал. <strong>Exposure Limits</strong> учитывают экономическую чувствительность, которая может складываться из нескольких связанных инструментов.</p>
  <p id="iTEG"><strong>Order Size Limits</strong> ограничивают одну заявку. <strong>Fat-Finger Controls</strong> ловят очевидные ошибочные размеры и цены. <strong>Price Collars</strong> запрещают заявки слишком далеко от выбранного ориентира.</p>
  <p id="rh5X"><strong>Message Rate Limits</strong> защищают от чрезмерного потока команд. <strong>Inventory Limits</strong> ограничивают накопленный запас стратегии.</p>
  <p id="55W5"><strong>Maximum Loss Limit</strong> останавливает работу при достижении заданного убытка. <strong>Intraday Drawdown Limit</strong> ограничивает падение от внутридневного пика.</p>
  <p id="12lx">Но проверять только уже исполненную позицию недостаточно.</p>
  <p id="PXJU">Пусть позиция равна +20. Ещё стоит покупка 50 и продажа 30. Если исполнится только покупка, получим +70. Если только продажа, -10. Поэтому нужно оценивать возможные будущие состояния, а не просто видеть текущие +20.</p>
  <p id="F8j0">Неопределённые и находящиеся в пути заявки тоже могут исполниться. Их нельзя считать нулевыми, пока не доказано обратное.</p>
  <p id="q6Ml"><strong>Pre-Trade Risk Checks</strong> выполняют такие проверки до отправки. <strong>Kill Switch</strong> запрещает новые действия и запускает предусмотренную процедуру отмены или ограничения риска.</p>
  <p id="EiUM"><strong>Cancel-on-Disconnect</strong> позволяет площадке отменять связанные заявки при потере соединения, если такая функция поддерживается. Но она не отменяет уже произошедшие исполнения.</p>
  <p id="nVF1">Проверки, контроль изменений и возможность остановки являются частью управления алгоритмической торговлей, а не необязательным дополнением. </p>
  <hr />
  <p id="AvZL"><strong>65. Почему даже захеджированная позиция остаётся рискованной</strong></p>
  <p id="mTEf"><strong>Concentration Risk</strong> возникает, когда слишком большая доля риска сосредоточена в одном активе, факторе или месте хранения средств.</p>
  <p id="NlGc"><strong>Basis Risk</strong> остаётся, когда хеджирующий инструмент движется не точно так же, как исходная позиция. <strong>Hedge Risk</strong> дополнительно включает проблемы самого хеджирования: отказ, частичное исполнение, задержку и изменение доступности.</p>
  <p id="wLb8"><strong>Correlation Risk</strong> появляется, когда связь, на которой построен хедж, меняется. То, что два актива раньше двигались вместе, не гарантирует такой же связи во время кризиса.</p>
  <p id="He7a">Для опционов остаются Residual Delta и риски Gamma, Vega, Theta, Rho. Уменьшить один фактор не означает убрать все.</p>
  <p id="MEZP"><strong>Liquidity Risk</strong> связан с невозможностью быстро изменить позицию по приемлемой цене. <strong>Gap Risk</strong> с перескоком цены через уровни, где мы надеялись исполниться.</p>
  <p id="1Iqy"><strong>Overnight Risk</strong> описывает риск удержания через периоды ограниченного контроля, закрытия рынка или накопления новой информации. Даже на круглосуточной площадке команда и связанные рынки не обязательно доступны одинаково всё время.</p>
  <p id="C9Z2"><strong>Event Risk</strong> относится к новостям и другим событиям, резко меняющим условия.</p>
  <p id="hrku"><strong>Model Risk</strong> означает ошибку самой модели или её применения. <strong>Execution Risk</strong> ситуацию, когда экономическая идея не реализуется из-за исполнения. Например, одна сторона парной сделки прошла, другая нет.</p>
  <p id="iHcX"><strong>Venue Risk</strong> относится к работе площадки. <strong>Counterparty Risk</strong> к невыполнению обязательств другой стороной. <strong>Clearing Risk</strong> к проблемам процесса определения и обеспечения обязательств после заключения сделок.</p>
  <p id="TTBD"><strong>Margin Risk</strong> связан с нехваткой обеспечения. <strong>Liquidation Risk</strong> с принудительным закрытием, которое может произойти в особенно плохих условиях.</p>
  <p id="7n1p">Эти риски могут усиливать друг друга. Например, падение цены повышает требования к обеспечению именно тогда, когда ликвидность для выхода исчезает.</p>
  <hr />
  <p id="w4GQ"><strong>66. Независимый риск-контроль, стресс-тесты и неизвестная позиция</strong></p>
  <p id="i1Pu"><strong>Real-Time P&amp;L</strong> обновляет оценку результата по текущим сделкам и рынку. <strong>Real-Time Greeks</strong> пересчитывает чувствительности опционной позиции по мере изменения факторов.</p>
  <p id="p9cP">Но быстрый расчёт не полезен, если входное состояние неправильное.</p>
  <p id="vpLC">Поэтому <strong>Independent Risk State</strong> означает достаточно независимый учёт риска. Стратегия не должна быть единственным источником ответа на вопрос, сколько она уже купила. Риск-модуль может отдельно учитывать исполнения, открытые заявки и данные сверки.</p>
  <p id="aAuZ">Если стратегия не знает настоящую позицию, нельзя автоматически &quot;закрыть всё&quot; по предположению. Неправильная закрывающая заявка способна открыть новый риск.</p>
  <p id="IqUq">Сначала ограничивают новые риск-увеличивающие действия, выясняют статус заявок и восстанавливают учёт. Конкретная аварийная процедура должна быть заранее определена.</p>
  <p id="tfVY"><strong>Stress Testing</strong> проверяет неблагоприятные условия: резкое движение, исчезновение глубины, рост задержки, недоступность хеджа.</p>
  <p id="LQsa"><strong>Scenario Analysis</strong> рассматривает конкретные совместные сценарии. Например: ведущая площадка перестала обновляться, локальная продолжает торговать, отмены задерживаются, а обеспечение уменьшается.</p>
  <p id="REiq">Нужно проверять не только максимальный убыток по формуле, но и последовательность действий системы: что она заметит, что остановит и какие заявки ещё могут исполниться.</p>
  <p id="AOOT"><strong>Безопасное поведение при неизвестном состоянии должно быть частью проекта до первой такой ситуации, а не решением в момент паники.</strong></p>
  <hr />
  <p id="P5SX"><strong>67. Сезонность, конкуренты и исчезновение преимущества</strong></p>
  <p id="gvXE">Активность рынка меняется во времени.</p>
  <p id="qVRA"><strong>Open, Close и Lunch Effects</strong> описывают особенности открытия, закрытия и менее активных промежутков. <strong>Intraday Seasonality</strong> является более общей внутридневной сезонностью.</p>
  <p id="1xrs"><strong>Expiration Effects</strong> возникают вокруг истечения контрактов. <strong>Month-End и Quarter-End Effects</strong> связаны с концом месяца и квартала. <strong>Index Rebalancing</strong> меняет состав или веса индекса и может создавать связанные потоки сделок.</p>
  <p id="r8jg"><strong>Futures Roll</strong> переносит ликвидность между сроками. <strong>Earnings</strong> и другие <strong>Corporate Events</strong> меняют информацию о компаниях. <strong>Новости и макрособытия</strong> способны резко изменить и цену, и качество исполнения.</p>
  <p id="ffM8">Но робот конкурирует не с календарём, а с другими участниками.</p>
  <p id="IOVK"><strong>Поведение конкурирующих маркет-мейкеров</strong> влияет на спред, доступную глубину и скорость отмен. <strong>Queue Wars</strong> описывает борьбу за выгодное место в очереди.</p>
  <p id="NE29"><strong>Quote Stuffing</strong> употребляют для описания чрезмерного потока котировок и отмен, часто в контексте подозрительного поведения. Однако высокая активность сама по себе не доказывает манипуляцию.</p>
  <p id="Z6jx"><strong>Spoofing</strong> и <strong>Layering</strong> относятся к созданию вводящей в заблуждение картины спроса или предложения с использованием заявок и их размещения по уровням. Существенны намерение, поведение и применимые правила. Обычная отмена из-за изменившегося риска не равна автоматически spoofing. </p>
  <p id="AHGr">Наши заявки тоже меняют поведение рынка. Это <strong>стратегическая реакция на собственные заявки</strong>. Конкуренты могут начать раньше занимать очередь или иначе котировать.</p>
  <p id="tpO2"><strong>Alpha Decay после запуска</strong> означает ослабление преимущества после начала реальной работы. <strong>Crowding</strong> возникает, когда много участников используют похожую идею. При увеличении объёма проявляются <strong>Capacity Limits</strong>, ограничения масштаба.</p>
  <p id="RQPN">Поэтому прибыльная история не является обещанием бессрочной прибыли после запуска.</p>
  <hr />
  <p id="2Oe1"><strong>68. Сделка исполнена. Почему работа ещё не закончилась</strong></p>
  <p id="sNcC">После Fill начинается <strong>Post-Trade</strong>, обработка совершённой сделки.</p>
  <p id="DUHN"><strong>Trade Capture</strong> надёжно фиксирует её экономические параметры: инструмент, стороны, цену, количество, время, идентификаторы и связанные счета.</p>
  <p id="5cxu"><strong>Clearing</strong>, клиринг, определяет обязательства сторон и применяет соответствующие механизмы их учёта и обеспечения. <strong>Settlement</strong>, расчёты, выполняет предусмотренное перемещение денег, активов или денежных разниц.</p>
  <p id="Gtnx">Это не всегда происходит в тот же момент, когда стратегия увидела исполнение.</p>
  <p id="fpSY">Большая сделка может относиться к нескольким портфелям. <strong>Allocations</strong> распределяют её между ними. Например, из покупки 1000 единиц 600 предназначены одному счёту, 400 другому.</p>
  <p id="RA06"><strong>Confirmations</strong> подтверждают согласованные детали сделки. В институциональном процессе могут дополнительно выполняться сопоставление и подтверждение сторонами, чтобы расхождения были найдены до расчётов. </p>
  <p id="HBpa"><strong>Give-Up</strong> означает передачу сделки для клиринга или учёта другой соответствующей организации по установленным соглашениям. Например, исполнение организовал один брокер, а клиринговое обслуживание выполняет другой.</p>
  <p id="VPeV">Смысл этого блока простой: &quot;сделка произошла&quot; ещё не означает, что все участники одинаково записали её, правильно распределили и окончательно рассчитались.</p>
  <hr />
  <p id="MBCB"><strong>69. Сверка позиций, денег, комиссий и исправленных сделок</strong></p>
  <p id="nBgq"><strong>Position Reconciliation</strong> сравнивает позиции разных систем. <strong>Cash Reconciliation</strong> денежные остатки и движения. <strong>Fee Reconciliation</strong> начисленные комиссии, rebates и другие сборы.</p>
  <p id="CkI1">Представим, что количество ABC совпадает, но денежный остаток нет. Причина может быть не в потерянной сделке, а в комиссии, финансировании или корректировке. Поэтому одной проверки позиции недостаточно.</p>
  <p id="lDHx"><strong>Exchange Busts</strong> означают аннулирование сделок по предусмотренным правилам. <strong>Corrections</strong> исправляют их параметры. <strong>Broken Trades</strong> обычно обозначают отменённые или признанные недействительными сделки, но конкретную терминологию нужно сверять с площадкой.</p>
  <p id="nOZ0"><strong>Late Trades</strong> поступают в учёт с задержкой. Их нельзя автоматически относить к моменту получения, если экономически они относятся к более раннему времени.</p>
  <p id="krQ4">В системе должны быть правила изменения ранее учтённого результата. Если сделку отменили, нужно корректно изменить позицию, деньги, комиссии и связанные отчёты. Просто удалить строку из одного журнала недостаточно.</p>
  <p id="EuO1"><strong>Corporate Actions Processing</strong> применяет дробления, выплаты и другие корпоративные действия к позициям и учёту.</p>
  <p id="NDn1"><strong>Funding и Borrow Costs</strong> отражают финансирование и заимствование. <strong>Margin Calls</strong> требуют дополнительного обеспечения или иных действий при его нехватке.</p>
  <p id="DlQe"><strong>End-of-Day Positions</strong> фиксируют состояние на конец выбранного расчётного периода. На круглосуточном рынке это всё равно может быть необходимая бухгалтерская граница.</p>
  <p id="bVKD"><strong>Сверка нужна не потому, что мы заранее не доверяем одной стороне. Она нужна потому, что разные процессы видят события в разное время и могут ошибаться по-разному.</strong></p>
  <hr />
  <p id="iT19"><strong>70. Audit Trail, отчётность и возможность объяснить каждую заявку</strong></p>
  <p id="2wc8"><strong>Books and Records</strong> являются системой необходимых записей: заявок, сделок, позиций, денег и изменений.</p>
  <p id="5lvL"><strong>Audit Trail</strong>, проверяемая история действий, связывает их в последовательность.</p>
  <p id="Lgv8">Для конкретной заявки полезно восстановить, какие данные получила программа, какое состояние построила, какую версию модели использовала, какое решение приняла, какие проверки риска прошла и что ответила площадка.</p>
  <p id="X8wb">Это не означает, что на каждое событие нужно синхронно писать огромный текстовый лог. Нужна достаточная и надёжная информация с приемлемой стоимостью записи.</p>
  <p id="NbWF"><strong>Clock и Timestamp Requirements</strong> относятся к требованиям точности, согласования и сохранения времени. Конкретные нормативные требования зависят от рынка и статуса участника. Формат с большим числом знаков не заменяет проверенную точность.</p>
  <p id="VayC"><strong>Регуляторная отчётность</strong> передаёт предусмотренные сведения соответствующим органам. Что именно, когда и в каком формате, определяется применимыми правилами, а не универсальным списком HFT-терминов.</p>
  <p id="eszQ"><strong>Market Abuse Surveillance</strong> ищет подозрительное поведение: манипулятивные заявки, сделки с самим собой, необычные последовательности действий и другие признаки возможного злоупотребления.</p>
  <p id="wWBL">Для разработчика практический смысл шире формальной отчётности. Без нормальной истории невозможно уверенно отличить ошибку модели, задержку, неправильный стакан и потерянное исполнение.</p>
  <p id="9ACC"><strong>Если мы не можем восстановить, почему появилась позиция, мы пока не полностью управляем системой.</strong></p>
  <hr />
  <p id="Sr2L"><strong>71. Соберём весь путь на одном примере</strong></p>
  <p id="2aa1">Теперь вернёмся к ABC.</p>
  <p id="7LX7">Локальная площадка показывает Bid 99,99 и Ask 100,01. Модель замечает состояние, после которого исторически наблюдалось небольшое движение вверх.</p>
  <p id="aiHo">Первый вопрос: правильно ли собран стакан? Последовательность целая, восстановление не требуется, данные достаточно свежие.</p>
  <p id="uBEN">Второй: что именно предсказывает модель? Не абстрактный &quot;рост&quot;, а изменение выбранного ориентира на определённом горизонте.</p>
  <p id="EhvE">Третий: останется ли эффект после нашей задержки? Если информация отражается в цене быстрее, чем мы можем действовать, правильный прогноз бесполезен.</p>
  <p id="VmTx">Четвёртый: как мы собираемся получить сделку? Пассивная покупка требует оценки очереди и качества условных исполнений. Агрессивная требует доступного объёма и учёта цены срочности.</p>
  <p id="AzRX">Пятый: положителен ли ожидаемый результат после тех издержек, которые ещё не включены в расчёт? Не вычитаем adverse selection повторно, если он уже отражён в ожидаемом markout.</p>
  <p id="H1Pz">Шестой: допустим ли риск? Учитываем не только текущую позицию, но и открытые, находящиеся в пути и неопределённые заявки.</p>
  <p id="yfux">После отправки не объявляем заявку исполненной заранее. Обрабатываем подтверждения, частичные исполнения, отмены и поздние сообщения по правилам состояния.</p>
  <p id="Jo5H">Затем сверяем фактические сделки и деньги, оцениваем результат и сравниваем реальность с моделью. Если исполнения систематически хуже симуляции, не объясняем это &quot;неудачным днём&quot;, пока не разобрались в причине.</p>
  <p id="cMk6">Вот ради этой последовательности и существует весь большой набор терминов.</p>
  <p id="sFhB">Не ради того, чтобы поставить между двумя лимитками максимальное количество технологий. И не ради обещания, что достаточно выучить словарь и рынок начнёт платить.</p>
  <p id="mz3j"><strong>Стакан объясняет, что доступно. Сеть и программа определяют, когда мы это увидим. Модель оценивает смысл. Исполнение превращает решение в сделку. Риск ограничивает последствия. Учёт показывает, что получилось на самом деле.</strong></p>
  <p id="fctj">Когда эти части согласованы, можно обсуждать улучшение стратегии. Когда нет, даже очень умная формула может торговать неправильными данными, получать вымышленные исполнения в тесте и терять реальные деньги по причинам, которых разработчик пока не видит.</p>

]]></content:encoded></item></channel></rss>