<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Notes &amp; Insights</title>
      <link>https://xsa-dev.github.io</link>
      <description>Блог об архитектуре систем, AI-агентах, распределенных системах и алгоритмическом трейдинге.</description>
      <generator>Zola</generator>
      <language>ru</language>
      <atom:link href="https://xsa-dev.github.io/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Thu, 08 Oct 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Автоматическая миграция C/C++ на Rust: 3-этапный пайплайн Google, Gemini 4 Argon и дифференциальный фаззинг</title>
          <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/cpp-to-rust-ai-migration-google-pipeline/</link>
          <guid>https://xsa-dev.github.io/posts/cpp-to-rust-ai-migration-google-pipeline/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/cpp-to-rust-ai-migration-google-pipeline/">&lt;p&gt;Проблема безопасности памяти (Memory Safety) в системном программировании давно перешла из теоретических дискуссий в категорию критических инфраструктурных рисков. По данным многолетних отчетов безопасности Google и Microsoft, около &lt;strong&gt;70% всех критических уязвимостей&lt;/strong&gt; нулевого дня (Zero-Day CVE) в масштабных кодовых базах на C и C++ (таких как Chromium, ядра ОС, медиадекодеры и сетевые стеки) вызваны ошибками работы с памятью: Use-After-Free, Out-of-Bounds Write, Double Free и Data Races.&lt;/p&gt;
&lt;p&gt;Переписывание сотен миллионов строк унаследованного C/C++ кода вручную силами инженеров требует десятилетий и сопряжено с колоссальными затратами. Инженерные команды Google перешли к индустриальному решению задачи: автоматизированному конвейеру миграции на базе специализированных AI-агентов (Gemini 4 Argon), строгой верификации через дифференциальный фаззинг и компиляторной оптимизации.&lt;/p&gt;
&lt;p&gt;В этой статье разобран 3-этапный пайплайн миграции Google, физика работы дифференциального фаззинга, специфика генерации безопасных FFI-границ и реальные результаты переноса критических проектов (&lt;code&gt;giflib&lt;/code&gt;, &lt;code&gt;libgav1&lt;/code&gt; и микроядра Zircon).&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-arkhitektura-3-etapnogo-konveiera-migratsii&quot;&gt;1. Архитектура 3-этапного конвейера миграции&lt;/h2&gt;
&lt;p&gt;Главный барьер при автоматической генерации системного кода нейросетями — риск внесения скрытых семантических расхождений и тонких регрессий, которые не ловятся обычными юнит-тестами.&lt;/p&gt;
&lt;p&gt;Чтобы исключить галлюцинации и гарантировать 100% эквивалентность логики, в Google реализовали замкнутый контур с автоматической обратной связью:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Legacy C/C++ Codebase&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;] --&amp;gt;&lt;/span&gt;&lt;span&gt; B&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;1. Трансляция кода - Gemini 4 Argon&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    B &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;2. Выделение FFI и Safe Wrappers&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; D&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Сборка Shared Objects - lib_legacy.so vs lib_rust.so&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    D &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; E&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;3. Дифференциальный фаззинг - LibAFL / AFL++&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    E &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; F&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Обнаружены дельты в поведении?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    F &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Да: расхождение вывода или краш&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; G&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Генерация контрпримера и отчета&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    G &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; B&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    F &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Нет: миллиарды итераций пройдены&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; H&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Верифицированный Rust Crate&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    H &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; I&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Интеграция в Production&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;etap-1-semanticheskaia-transliatsiia-c-c-v-rust&quot;&gt;Этап 1: Семантическая трансляция C/C++ в Rust&lt;/h3&gt;
&lt;p&gt;Модель не просто переводит синтаксис строчка в строчку. Ее задача — выделить логические структуры данных, определить границы владения объектами и транслировать императивный процедурный код в идиоматический Rust с минимально необходимым объемом &lt;code&gt;unsafe&lt;/code&gt;-блоков. При этом сохраняется полная совместимость с внешним C-ABI: экспортируемые сигнатуры функций и структуры данных сохраняют исходный layout.&lt;/p&gt;
&lt;h3 id=&quot;etap-2-izoliatsiia-ffi-i-generatsiia-safe-wrappers&quot;&gt;Этап 2: Изоляция FFI и генерация Safe Wrappers&lt;/h3&gt;
&lt;p&gt;Любой переносимый модуль должен бесшовно встраиваться в существующую экосистему без необходимости перекомпиляции зависимых сервисов. На границе FFI генерируется безопасный фасад:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сырые указатели (&lt;code&gt;*mut T&lt;/code&gt;, &lt;code&gt;*const T&lt;/code&gt;) оборачиваются в &lt;code&gt;Option&amp;lt;NonNull&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Проверяются инварианты выравнивания и валидности переданных буферов.&lt;/li&gt;
&lt;li&gt;Жизненный цикл ресурсов инкапсулируется через типаж &lt;code&gt;Drop&lt;/code&gt; (RAII), исключая утечки памяти.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;etap-3-differentsial-nyi-fazzing-s-obratnoi-sviaz-iu&quot;&gt;Этап 3: Дифференциальный фаззинг с обратной связью&lt;/h3&gt;
&lt;p&gt;Оригинальная C-библиотека и сгенерированная Rust-библиотека компилируются как взаимозаменяемые динамические библиотеки (&lt;code&gt;.so&lt;/code&gt;). Специализированный фаззер генерирует миллионы мутированных входных потоков байтов, подавая их параллельно в обе реализации. Если поведение Rust-модуля расходится с C хотя бы на 1 бит (или одна из версий завершается паникой/крашем), формируется минимизированный контрпример, который отправляется в контекст AI-агента для локализации бага.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-sravnenie-podkhodov-ruchnaia-migratsiia-vs-ai-fazzing-kontur&quot;&gt;2. Сравнение подходов: Ручная миграция vs AI-фаззинг контур&lt;/h2&gt;
&lt;p&gt;Ниже приведено структурное сравнение ключевых характеристик различных подходов к обеспечению memory safety в production:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Параметр&lt;/th&gt;&lt;th&gt;Ручной перенос на Rust&lt;/th&gt;&lt;th&gt;Статический анализ C/C++&lt;/th&gt;&lt;th&gt;Конвейер Google (AI + Фаззинг)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Скорость миграции&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;100–300 строк/день на инженера&lt;/td&gt;&lt;td&gt;Мгновенно (без миграции)&lt;/td&gt;&lt;td&gt;10 000+ строк/день на агентный кластер&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Гарантии Memory Safety&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Высокие (после ревью)&lt;/td&gt;&lt;td&gt;Низкие (много false negatives)&lt;/td&gt;&lt;td&gt;Абсолютные на уровне &lt;code&gt;rustc&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Семантическая точность&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Человеческий фактор&lt;/td&gt;&lt;td&gt;Не применимо&lt;/td&gt;&lt;td&gt;Проверена миллиардами фаззинг-мутаций&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Сохранение C-ABI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Трудоемко вручную&lt;/td&gt;&lt;td&gt;Сохраняется C-код&lt;/td&gt;&lt;td&gt;Автоматическая генерация &lt;code&gt;#[no_mangle]&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Устранение Legacy 0-day&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Редко&lt;/td&gt;&lt;td&gt;Частично&lt;/td&gt;&lt;td&gt;Выявляются попутно в процессе фаззинга&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-inzheneriia-bezopasnykh-ffi-granits-i-upravlenie-resursami&quot;&gt;3. Инженерия безопасных FFI-границ и управление ресурсами&lt;/h2&gt;
&lt;p&gt;Рассмотрим конкретный пример: трансляция низкоуровневого буфера данных с ручным управлением памятью в C в безопасную абстракцию на Rust с сохранением ABI.&lt;/p&gt;
&lt;h3 id=&quot;iskhodnyi-c-kod-legacy-interfeis-s-riskami-uaf&quot;&gt;Исходный C-код (Legacy-интерфейс с рисками UAF)&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    uint8_t&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt; data&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    size_t&lt;/span&gt;&lt;span&gt; size&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    size_t&lt;/span&gt;&lt;span&gt; capacity&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;} ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; initial_capacity&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt; buf &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; (ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;malloc&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;sizeof&lt;/span&gt;&lt;span&gt;(ByteBuffer))&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!&lt;/span&gt;&lt;span&gt;buf)&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;uint8_t&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;malloc&lt;/span&gt;&lt;span&gt;(initial_capacity)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!&lt;/span&gt;&lt;span&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;        free&lt;/span&gt;&lt;span&gt;(buf)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; initial_capacity&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_append&lt;/span&gt;&lt;span&gt;(ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; uint8_t&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; size_t&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; len&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!&lt;/span&gt;&lt;span&gt;buf &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;|| !&lt;/span&gt;&lt;span&gt;src)&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; len &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;capacity) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;        size_t&lt;/span&gt;&lt;span&gt; new_cap &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; (buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; len)&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ?&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; :&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;        uint8_t&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt; new_data &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;uint8_t&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;realloc&lt;/span&gt;&lt;span&gt;(buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; new_cap)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!&lt;/span&gt;&lt;span&gt;new_data)&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; new_data&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; new_cap&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    memcpy&lt;/span&gt;&lt;span&gt;(buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; len)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_free&lt;/span&gt;&lt;span&gt;(ByteBuffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; buf&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (buf) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data)&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; free&lt;/span&gt;&lt;span&gt;(buf&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;data)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;        free&lt;/span&gt;&lt;span&gt;(buf)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;sgenerirovannyi-rust-modul-s-bezopasnoi-inkapsuliatsiei-i-c-abi&quot;&gt;Сгенерированный Rust-модуль с безопасной инкапсуляцией и C-ABI&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ptr&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;NonNull&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span&gt;slice;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[repr(&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;C&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;pub struct&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; ByteBufferFFI&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;: *&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; u8&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; usize&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; usize&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;// Внутренняя безопасная структура с авто-освобождением через RAII&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;pub struct&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; SafeByteBuffer&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    inner&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Vec&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;u8&lt;/span&gt;&lt;span&gt;&amp;gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; SafeByteBuffer&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    pub fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; with_capacity&lt;/span&gt;&lt;span&gt;(cap&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; usize&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; Self&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        Self&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            inner&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;with_capacity&lt;/span&gt;&lt;span&gt;(cap),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    pub fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span&gt;, src&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;: &amp;amp;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;u8&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Result&lt;/span&gt;&lt;span&gt;&amp;lt;(), ()&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;inner&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;extend_from_slice&lt;/span&gt;&lt;span&gt;(src);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;        Ok&lt;/span&gt;&lt;span&gt;(())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[no_mangle]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;pub unsafe extern&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;C&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_create&lt;/span&gt;&lt;span&gt;(initial_capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; usize&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&amp;gt; *&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; ByteBufferFFI&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let mut&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;with_capacity&lt;/span&gt;&lt;span&gt;(initial_capacity);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let&lt;/span&gt;&lt;span&gt; raw_ptr&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;as_mut_ptr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let&lt;/span&gt;&lt;span&gt; cap&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;capacity&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    std&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;mem&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;forget&lt;/span&gt;&lt;span&gt;(vec);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let&lt;/span&gt;&lt;span&gt; boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Box&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;ByteBufferFFI&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span&gt; raw_ptr,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        capacity&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span&gt; cap,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    Box&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;into_raw&lt;/span&gt;&lt;span&gt;(boxed)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[no_mangle]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;pub unsafe extern&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;C&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;: *&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; ByteBufferFFI&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    src&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;: *&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; u8&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    len&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; usize&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; i32&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;is_null&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ||&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;is_null&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let&lt;/span&gt;&lt;span&gt; buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; = &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span&gt;buf;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let&lt;/span&gt;&lt;span&gt; input_slice&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; slice&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;from_raw_parts&lt;/span&gt;&lt;span&gt;(src, len);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    // Восстанавливаем Vec для безопасного реаллоцирования&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    let mut&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;from_raw_parts&lt;/span&gt;&lt;span&gt;(buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;data, buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;size, buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;capacity);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;extend_from_slice&lt;/span&gt;&lt;span&gt;(input_slice);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    // Обновляем FFI-структуру&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;as_mut_ptr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;size &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;len&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    buf_ref&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;capacity &lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt; vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;capacity&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;    std&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;mem&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;forget&lt;/span&gt;&lt;span&gt;(vec);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;    0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[no_mangle]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;pub unsafe extern&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;C&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; byte_buffer_free&lt;/span&gt;&lt;span&gt;(buf&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;: *&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; ByteBufferFFI&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !&lt;/span&gt;&lt;span&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;is_null&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        let&lt;/span&gt;&lt;span&gt; boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Box&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;from_raw&lt;/span&gt;&lt;span&gt;(buf);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !&lt;/span&gt;&lt;span&gt;boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;is_null&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            let&lt;/span&gt;&lt;span&gt; _&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; Vec&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;from_raw_parts&lt;/span&gt;&lt;span&gt;(boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;data, boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;size, boxed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;.&lt;/span&gt;&lt;span&gt;capacity);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Благодаря &lt;code&gt;#[repr(C)]&lt;/code&gt; и &lt;code&gt;#[no_mangle]&lt;/code&gt; скомпилированная Rust-библиотека подменяет оригинальный &lt;code&gt;.so&lt;/code&gt; файл без перекомпиляции зависимых C/C++ приложений.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-matematicheskaia-model-differentsial-nogo-fazzinga&quot;&gt;4. Математическая модель дифференциального фаззинга&lt;/h2&gt;
&lt;p&gt;При дифференциальном фаззинге проверяется гипотеза о тождественности функций $f_{\text{C}}(x)$ и $f_{\text{Rust}}(x)$ на всем пространстве допустимых и недопустимых входных данных $x \in \mathcal{X}$.&lt;/p&gt;
&lt;p&gt;Пусть в кодовой базе существует скрытый дефект с вероятностью проявления $p_k$ на одной итерации случайной мутации входного вектора. При независимой генерации $N$ тест-кейсов вероятность обнаружения расхождения $P_{\text{detect}}$ выражается как:&lt;/p&gt;
&lt;p&gt;$$P_{\text{detect}}(N) = 1 - \prod_{k=1}^{M} \left(1 - p_k\right)^{N_k}$$&lt;/p&gt;
&lt;p&gt;Где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$M$ — число потенциальных пограничных состояний в графе потока управления (CFG);&lt;/li&gt;
&lt;li&gt;$N_k$ — количество сгенерированных мутаций, покрывающих ветвь $k$;&lt;/li&gt;
&lt;li&gt;$p_k$ — вероятность расхождения семантики при исполнении ветви $k$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В конвейере Google фаззер использует покрытие кода (Coverage-Guided Differential Fuzzing). Когда мутатор находит вход $x^*$, приводящий к:&lt;/p&gt;
&lt;p&gt;$$\Delta(x^&lt;em&gt;) = \left| f_{\text{C}}(x^&lt;/em&gt;) - f_{\text{Rust}}(x^&lt;em&gt;) \right| &amp;gt; 0 \quad \lor \quad \text{Status}_{\text{C}}(x^&lt;/em&gt;) \neq \text{Status}_{\text{Rust}}(x^*)$$&lt;/p&gt;
&lt;p&gt;Контрпример немедленно сохраняется в виде минимального байтового среза (minimization corpus) и передается в prompt-контекст агента Gemini 4 Argon с трассировкой стека вызовов.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-rezul-taty-real-nykh-keisov-giflib-libgav1-i-zircon&quot;&gt;5. Результаты реальных кейсов: giflib, libgav1 и Zircon&lt;/h2&gt;
&lt;p&gt;Практическая апробация 3-этапного пайплайна в инфраструктуре Google показала неожиданные эффекты не только в области надежности, но и в производительности.&lt;/p&gt;
&lt;h3 id=&quot;rezul-taty-migratsii-kliuchevykh-proektov&quot;&gt;Результаты миграции ключевых проектов&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Проект&lt;/th&gt;&lt;th&gt;Объем / Архитектура&lt;/th&gt;&lt;th&gt;Результат миграции на Rust&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;giflib&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;~3 000 строк C&lt;/td&gt;&lt;td&gt;100% ABI-совместимость. Попутно обнаружена и закрыта Zero-Day уязвимость &lt;code&gt;CVE-2026-26740&lt;/code&gt; (out-of-bounds heap write) в оригинальном C-коде.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;libgav1&lt;/strong&gt; (AV1 декодер)&lt;/td&gt;&lt;td&gt;32 000 строк C + Hand-written SIMD&lt;/td&gt;&lt;td&gt;Полный отказ от ассемблерных вставок в пользу Safe Rust. Ускорение декодирования в &lt;strong&gt;2.7 раза&lt;/strong&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fuchsia Zircon Kernel&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;800 000+ строк C/C++&lt;/td&gt;&lt;td&gt;Модульная миграция подсистем ядра ОС без деградации IPC-латентности.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;pochemu-safe-rust-v-libgav1-obognal-32k-strok-ruchnogo-simd&quot;&gt;Почему Safe Rust в libgav1 обогнал 32k строк ручного SIMD?&lt;/h3&gt;
&lt;p&gt;Один из главных мифов системной разработки гласит: &lt;em&gt;«Ручные SIMD-интринсики на C всегда быстрее безопасного кода»&lt;/em&gt;. Кейс &lt;code&gt;libgav1&lt;/code&gt; опроверг это на практике.&lt;/p&gt;
&lt;p&gt;Причина кроется в алиасинге указателей (Pointer Aliasing). В языке C компилятор вынужден консервативно предполагать, что любые два указателя одного типа (&lt;code&gt;uint8_t* a&lt;/code&gt;, &lt;code&gt;uint8_t* b&lt;/code&gt;) могут указывать на перекрывающиеся области памяти (если не указано ключевое слово &lt;code&gt;restrict&lt;/code&gt;, которое разработчики часто забывают). Это блокирует автоматическую векторизацию циклов компилятором LLVM.&lt;/p&gt;
&lt;p&gt;В Rust модель владения гарантирует:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ссылка &lt;code&gt;&amp;amp;mut T&lt;/code&gt; является &lt;strong&gt;строго уникальной&lt;/strong&gt; (no-alias invariant гарантирован на уровне семантики языка).&lt;/li&gt;
&lt;li&gt;Ссылки &lt;code&gt;&amp;amp;T&lt;/code&gt; гарантированно неизменяемы (immutable).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Получив чистый Rust-код без алиасинга, оптимизатор LLVM смог провести агрессивную векторизацию для инструкций AVX2 и AVX-512, выстроив конвейер вычислений эффективнее, чем 32 000 строк устаревшего ручного ассемблерного кода, написанного под специфические микроархитектуры прошлых поколений.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;6-chek-list-vnedreniia-ai-migratsii-v-inzhenernyi-kontur&quot;&gt;6. Чек-лист внедрения AI-миграции в инженерный контур&lt;/h2&gt;
&lt;p&gt;Для команд, планирующих перевод критических C/C++ библиотек на Rust:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Изолируйте C-ABI заголовок:&lt;/strong&gt; Сформируйте чистый заголовочный файл &lt;code&gt;.h&lt;/code&gt; со всеми экспортируемыми функциями и типами данных.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Сгенерируйте Rust FFI через bindgen / AI:&lt;/strong&gt; Обеспечьте точное соответствие структур с аннотацией &lt;code&gt;#[repr(C)]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разверните дифференциальный фаззер (LibAFL):&lt;/strong&gt; Напишите harness, принимающий входной буфер &lt;code&gt;const uint8_t* data, size_t size&lt;/code&gt; и вызывающий обе библиотеки.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Задайте порог останова фаззинга:&lt;/strong&gt; Минимум $10^8$ итераций без единого расхождения вывода и без утечек памяти (проверяется через ASan/Valgrind).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Замените &lt;code&gt;.so&lt;/code&gt; в staging-окружении:&lt;/strong&gt; Проведите нагрузочное и регрессионное тестирование зависимых сервисов.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Автономная миграция стала индустриальным стандартом:&lt;/strong&gt; AI-агенты в связке со строгими компиляторными верификаторами и дифференциальным фаззингом способны переносить миллионы строк системного кода, устраняя 70% фундаментальных уязвимостей безопасности памяти.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Фаззинг — единственный надежный судья:&lt;/strong&gt; Любой сгенерированный LLM системный код требует дифференциального тестирования против оригинала на миллиардах мутированных входных векторов.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe Rust не уступает в скорости:&lt;/strong&gt; Строгие гарантии уникальности ссылок (&lt;code&gt;&amp;amp;mut&lt;/code&gt;) в Rust дают компилятору LLVM свободу векторизации, превосходящую ручной legacy-ассемблер.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Оригинальное видео/статья:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/a3Aup1LwPhQ&quot;&gt;Let’s Get Rusty — Google Uses AI to Migrate C/C++ to Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Заметки и детальный конспект:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Google-AI-Migrating-Cpp-to-Rust-Gemini-Argon-2026.md&quot;&gt;Obsidian Vault (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инженерные наработки:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Order Flow, Footprint и CVD в алготрейдинге: физика ликвидности и чтение микроструктуры рынка</title>
          <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/order-flow-footprint-cvd-algo-trading/</link>
          <guid>https://xsa-dev.github.io/posts/order-flow-footprint-cvd-algo-trading/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/order-flow-footprint-cvd-algo-trading/">&lt;p&gt;Большинство розничных трейдеров и начинающих квант-разработчиков смотрят на рынок через призму &lt;strong&gt;свечей (OHLCV)&lt;/strong&gt; и производных индикаторов (RSI, MACD, скользящие средние). Главная проблема такого подхода — &lt;strong&gt;запаздывание и потеря информации&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Свеча фиксирует только финальный результат интервала времени, скрывая главное: &lt;em&gt;какие объемы, по каким ценам и с какой агрессией проторговывались внутри бара&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Order Flow (поток ордеров)&lt;/strong&gt; — это фундаментальная физика биржи. Это регистрация реального взаимодействия между покупателями и продавцами в режиме реального времени.&lt;/p&gt;
&lt;p&gt;Разберем, как устроена биржевая ликвидность, как читать кластерный график (&lt;strong&gt;Footprint&lt;/strong&gt;), интерпретировать накопленную дельту (&lt;strong&gt;CVD&lt;/strong&gt;) и формализовать эти сигналы в алгоритмических стратегиях.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-fizika-rynka-market-vs-limit-ordera-v-birzhevom-stakane-dom&quot;&gt;1. Физика рынка: Market vs Limit ордера в биржевом стакане (DOM)&lt;/h2&gt;
&lt;p&gt;Рыночная цена не движется сама по себе — ее двигает исключительно дисбаланс между агрессивными и пассивными заявками в &lt;strong&gt;Depth of Market (DOM)&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Сторона стакана&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Ценовой уровень&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Доступный объем&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Роль участника&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🔴 &lt;strong&gt;ASK (Sell Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$65,010&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;12.5 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Пассивный продавец&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🔴 &lt;strong&gt;ASK (Sell Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$65,005&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;8.0 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Пассивный продавец&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🔴 &lt;strong&gt;ASK (Sell Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$65,000&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;4.2 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Best Ask (ближайшая ликвидность)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;⚡ &lt;strong&gt;SPREAD&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Market BUY&lt;/strong&gt; выкупает ликвидность Ask&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;BID (Buy Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$64,995&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;5.1 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Best Bid (ближайшая поддержка)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;BID (Buy Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$64,990&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;10.0 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Пассивный покупатель&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;BID (Buy Limit)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;$64,985&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;15.4 BTC&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Пассивный покупатель&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;kliuchevye-aksiomy-mikrostruktury&quot;&gt;Ключевые аксиомы микроструктуры:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Limit Orders (Пассивные):&lt;/strong&gt; добавляют ликвидность в стакан. Они формируют уровни поддержки/сопротивления и ждут, пока в них исполнятся другие участники.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Market Orders (Агрессивные):&lt;/strong&gt; забирают ликвидность из стакана. Только рыночные ордера двигают цену, «выедая» лимитные заявки на противоположной стороне.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deep vs Shallow Market:&lt;/strong&gt; на глубоком рынке крупный рыночный ордер сдвинет цену незначительно; на тонком (неликвидном) рынке даже средний объем пробьет несколько ценовых уровней (проскальзывание / slippage).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-volume-footprint-klasternyi-rentgen-svechi&quot;&gt;2. Volume Footprint: кластерный рентген свечи&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Footprint&lt;/strong&gt; разбивает каждую свечу на ценовые уровни и показывает объем сделок, совершенных по цене &lt;strong&gt;Bid&lt;/strong&gt; (агрессивные продажи) и по цене &lt;strong&gt;Ask&lt;/strong&gt; (агрессивные покупки):&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Уровень цены&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Bid (Market Sell)&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Ask (Market Buy)&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Delta ($\Delta$)&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Рыночная структура&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,020&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;85&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;+73&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;Stacked Buying Imbalance&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,015&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;42&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;+37&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;Stacked Buying Imbalance&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,010&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;90&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;+72&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;🟢 &lt;strong&gt;Агрессор пробивает уровень&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,005&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;48&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;-2&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Нейтральный баланс&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,000&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;120&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;110&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;code&gt;-10&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;🔵 &lt;strong&gt;Point of Control (POC / макс. объем)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;chto-daet-footprint&quot;&gt;Что дает Footprint:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Delta ($\Delta$):&lt;/strong&gt; разница между покупками по Ask и продажами по Bid на конкретной цене:
$$\Delta = \text{Volume}_{\text{Ask}} - \text{Volume}_{\text{Bid}}$$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stacked Imbalance (Стек дисбалансов):&lt;/strong&gt; ситуация, когда 3 и более ценовых уровня подряд показывают многократный перевес покупателей или продавцов (обычно от 300% до 400%). Это маркер сильного импульса.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-dva-kliuchevykh-patterna-absorption-vs-initiation&quot;&gt;3. Два ключевых паттерна: Absorption vs Initiation&lt;/h2&gt;
&lt;p&gt;При анализе Footprint алгоритм ищет два фундаментальных состояния рынка:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; P1 &lt;/span&gt;&lt;span&gt;[&amp;quot;🛡️ Паттерн 1: Absorption &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Поглощение лимитным игроком&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Агрессивные Market SELL (Delta резко отрицательная)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Крупный Buy Limit на дне свечи впитывает весь объем&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Итог: Гигантский объем на дне, но цена НЕ падает&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A4&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🟢 Сигнал: Бычий разворот (Bullish Reversal)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;gt; A2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; A3 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; A4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; P2 &lt;/span&gt;&lt;span&gt;[&amp;quot;⚡ Паттерн 2: Initiation &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Инициация импульса&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Агрессивные Market BUY легко выносят тонкий стакан Ask&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Свеча закрывается на максимуме с устойчивой дельтой&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🟢 Сигнал: Истинный пробой и продолжение тренда&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        B1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;gt; B2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; B3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-cvd-cumulative-volume-delta-i-divergentsii&quot;&gt;4. CVD (Cumulative Volume Delta) и дивергенции&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CVD (накопленная дельта объема)&lt;/strong&gt; суммирует дельту всех совершенных сделок с начала сессии или расчетного окна:&lt;/p&gt;
&lt;p&gt;$$\text{CVD}_t = \sum_{i=1}^{t} \Delta_i = \sum_{i=1}^{t} (\text{Vol}_{\text{Ask}, i} - \text{Vol}_{\text{Bid}, i})$$&lt;/p&gt;
&lt;h3 id=&quot;divergentsii-cvd-kak-indikator-istoshcheniia&quot;&gt;Дивергенции CVD как индикатор истощения:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Медвежья дивергенция (Bearish Absorption):&lt;/strong&gt; цена обновляет локальный максимум (Higher High), но CVD формирует более низкий максимум (Lower High) или резко падает. Это означает, что рост идет на тонком рынке без поддержки реальных покупок.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Бычья дивергенция (Bullish Absorption):&lt;/strong&gt; цена обновляет минимум (Lower Low), а CVD растет (Higher Low). Агрессивные продажи упираются в скрытые лимитные заявки крупного покупателя.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-volume-profile-poc-value-area-hvn-i-lvn&quot;&gt;5. Volume Profile: POC, Value Area, HVN и LVN&lt;/h2&gt;
&lt;p&gt;В то время как классический объем привязан к времени (Volume per Bar), &lt;strong&gt;Volume Profile&lt;/strong&gt; группирует объем по горизонтальным ценовым уровням (Volume at Price):&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Ценовой уровень&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Профиль объема&lt;/th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Тип зоны&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Структура ликвидности&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,030&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;█&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;LVN&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Зона быстрого пролета (тонкая ликвидность)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,020&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;██████&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;VA&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Value Area (торговля в балансе)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,010&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;████████████████████&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;POC / HVN&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Point of Control (максимальное принятие цены)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$65,000&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;██████████&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;VA&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Value Area (торговля в балансе)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;$64,990&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;█&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;strong&gt;LVN&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Зона отторжения цены&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;anatomiia-kliuchevykh-zon-volume-profile&quot;&gt;Анатомия ключевых зон Volume Profile:&lt;/h3&gt;
&lt;p&gt;В зависимости от концентрации объема алгоритм делит горизонтальный профиль на четыре базовых узла ликвидности:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Уровень&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Описание&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Торговый смысл&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;POC (Point of Control)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Ценовой уровень с максимальным объемом за период.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Служит «магнитом» для цены и сильным уровнем ретеста.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Value Area (VA)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Диапазон цен, в котором прошло ~70% всего объема.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Торговля внутри VA = баланс; выход за границы VA = направленный импульс.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;HVN (High Volume Node)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Узлы высокой плотности объема.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Зоны консолидации и принятия справедливой цены.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;LVN (Low Volume Node)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Узлы низкой плотности объема.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Уровни неликвидности, которые цена проскакивает с высокой скоростью.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;6-algoritmicheskaia-realizatsiia-raschet-delta-i-cvd-na-python&quot;&gt;6. Алгоритмическая реализация: расчет Delta и CVD на Python&lt;/h2&gt;
&lt;p&gt;Для количественных бэктестов и торговых ботов поток тиков (&lt;em&gt;Trade Prints / Time &amp;amp; Sales&lt;/em&gt;) агрегируется по тиковым флагам (&lt;code&gt;is_buyer_maker&lt;/code&gt;):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; pandas&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; numpy&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; as&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; calculate_order_flow_metrics&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;trades_df&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;DataFrame)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;DataFrame:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    Расчет дельты и CVD по потоку тиковых сделок биржи.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    trades_df содержит: [&amp;#39;timestamp&amp;#39;, &amp;#39;price&amp;#39;, &amp;#39;quantity&amp;#39;, &amp;#39;is_buyer_maker&amp;#39;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Если сделка совершена по инициативе покупателя (buyer is taker), это покупка по Ask&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Если is_buyer_maker == True, значит покупатель выставил лимит, а продавец ударил по рынку (Sell)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;is_buy&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; = ~&lt;/span&gt;&lt;span&gt;trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;is_buyer_maker&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;buy_vol&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;where&lt;/span&gt;&lt;span&gt;(trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;is_buy&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;quantity&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;sell_vol&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;where&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;~&lt;/span&gt;&lt;span&gt;trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;is_buy&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;quantity&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;delta&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;buy_vol&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;/span&gt;&lt;span&gt; trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;sell_vol&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Расчет кумулятивной дельты (CVD)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;cvd&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; trades_df[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;delta&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;cumsum&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # Агрегация по 1-минутным барам&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    bars&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; trades_df&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;resample&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;1min&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; on&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;timestamp&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;agg&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;price&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;max&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;min&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;last&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;quantity&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;sum&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;buy_vol&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;sum&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;sell_vol&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;sum&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;delta&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;sum&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        &amp;#39;cvd&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;last&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;/span&gt;&lt;span&gt; bars&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Цену двигают только агрессивные заявки:&lt;/strong&gt; рыночные покупки бьют по лимитным продажам (Ask), рыночные продажи — по лимитным покупкам (Bid).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Footprint дает опережающий сигнал:&lt;/strong&gt; паттерны &lt;em&gt;Absorption&lt;/em&gt; (поглощение) на ключевых уровнях позволяют заходить в позиции до того, как индикаторы успеют отреагировать.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVD выявляет манипуляции и истощение:&lt;/strong&gt; расхождение между движением цены и накопленной дельтой защищает от ложных пробоев.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume Profile очерчивает карту боя:&lt;/strong&gt; POC и границы Value Area (VA) служат математически обоснованными таргетами для фиксации прибыли и выставления защитных стоп-приказов.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Автор курса и видеоматериал:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/Rqu-AoD9BUo&quot;&gt;Mind Math Money — MASTER Order Flow Trading (Complete Guide)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детальный конспект и cheat-sheet в базе знаний:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Order-Flow-Trading-Course-MindMathMoney-2026.md&quot;&gt;Obsidian Vault: Order Flow Course Notes (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Количественные репозитории:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Алгоритмический трейдинг на Polymarket: архитектура снайпера 5-минутных бинарных рынков через CLOB API</title>
          <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/polymarket-clob-algo-trading-sniper/</link>
          <guid>https://xsa-dev.github.io/posts/polymarket-clob-algo-trading-sniper/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/polymarket-clob-algo-trading-sniper/">&lt;p&gt;Рынки предсказаний (&lt;strong&gt;Prediction Markets&lt;/strong&gt;, в частности &lt;strong&gt;Polymarket&lt;/strong&gt;) переживают экспоненциальный рост объема торгов. В отличие от традиционных спотовых или фьючерсных рынков, здесь торгуются &lt;strong&gt;бинарные контракты&lt;/strong&gt; (&lt;em&gt;Binary Outcome Shares&lt;/em&gt;), цена которых колеблется в диапазоне от &lt;code&gt;$0.00&lt;/code&gt; до &lt;code&gt;$1.00&lt;/code&gt; и отражает вероятность наступления события:&lt;/p&gt;
&lt;p&gt;$$P(\text{Event}) \in [0, 1]$$&lt;/p&gt;
&lt;p&gt;С появлением ультракоротких 5-минутных рынков на криптовалюты (BTC, ETH, SOL, XRP «Будет ли цена выше $X в 14:05?») открылось окно возможностей для алгоритмического арбитража и снайпинга за счет временного лага между спотовыми/деривативными биржами и стаканом предсказаний.&lt;/p&gt;
&lt;p&gt;Разберем архитектуру торгового бота &lt;strong&gt;Strike Sniper&lt;/strong&gt; (исследованного Moon Dev), особенности работы с &lt;strong&gt;Polymarket CLOB API&lt;/strong&gt; и ключевые риски высокочастотного исполнения.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-topologiia-arkhitektury-cross-exchange-price-discovery&quot;&gt;1. Топология архитектуры: Cross-Exchange Price Discovery&lt;/h2&gt;
&lt;p&gt;Снайпинг предсказательных рынков строится на сопоставлении двух источников данных:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; S1 &lt;/span&gt;&lt;span&gt;[&amp;quot;⚡ 1. Быстрый источник &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Hyperliquid L2 WebSocket&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        H1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Real-time спот/перп котировки (BTC, ETH, SOL)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        H2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Мгновенная регистрация импульса цены&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        H1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; H2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Референсная цена P_ref&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; S2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; S2 &lt;/span&gt;&lt;span&gt;[&amp;quot;🎯 2. Стратегический движок &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Strike Sniper Logic&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Polymarket Gamma API: Strike Price K&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Сравнение: P_ref &amp;gt; K + Spread_safe?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Расчет размера позиции (Share Sizing)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; G2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Да, вероятность YES растет&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; G3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Taker Order Intent &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; EIP&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;712&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; S3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; S3 &lt;/span&gt;&lt;span&gt;[&amp;quot;🛡️ 3. Исполнение &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Polymarket CLOB API&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Central Limit Order Book (L2 стакан)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Лимитные / Taker заявки на YES / NO&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Event Logger + Circuit Breaker (Daily Stop-Loss)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        C1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;gt; C2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-mekhanika-birzhi-central-limit-order-book-clob&quot;&gt;2. Механика биржи: Central Limit Order Book (CLOB)&lt;/h2&gt;
&lt;p&gt;Polymarket использует не классический AMM (как Uniswap), а полноценную биржевую книгу лимитных ордеров (&lt;strong&gt;CLOB — Central Limit Order Book&lt;/strong&gt;) с поддержкой EIP-712 подписей:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;YES / NO токены:&lt;/strong&gt; каждый исход представлен ERC-1155 токеном. Покупка YES по цене &lt;code&gt;$0.65&lt;/code&gt; означает выплату &lt;code&gt;$1.00&lt;/code&gt; в случае победы (прибыль &lt;code&gt;$0.35&lt;/code&gt;) или &lt;code&gt;$0.00&lt;/code&gt; в случае проигрыша (убыток &lt;code&gt;$0.65&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taker vs Maker:&lt;/strong&gt; снайпер чаще всего выступает как &lt;strong&gt;Taker&lt;/strong&gt; — выкупает ликвидность из стакана Ask, когда референсная цена на Hyperliquid уже ушла выше страйка, но лимитные заявки на Polymarket еще не успели переставиться.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Расчет количества долей (Shares):&lt;/strong&gt;
$$\text{Shares} = \frac{\text{Budget}}{\text{Best Ask Price}}$$&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-kolichestvennyi-kontur-na-python&quot;&gt;3. Количественный контур на Python&lt;/h2&gt;
&lt;p&gt;Пример архитектуры ядра снайпера для опроса цен и отправки ордера:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;from&lt;/span&gt;&lt;span&gt; dataclasses&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; import&lt;/span&gt;&lt;span&gt; dataclass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6C08A;&quot;&gt;@dataclass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; MarketTarget&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    symbol&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    strike_price&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; float&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    token_id&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    end_time&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; PolymarketStrikeSniper&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; clob_client&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; hyperliquid_feed&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; clob_client&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;feed&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; hyperliquid_feed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;daily_pnl&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;max_daily_loss&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; = -&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;50.0&lt;/span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # Circuit Breaker: -$50 в день&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; evaluate_market&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span&gt; MarketTarget&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; budget_usd&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; float&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 5.0&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # 1. Защита капитала (Circuit Breaker)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;daily_pnl&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;max_daily_loss&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;            print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;[ALERT] Daily Stop-Loss достигнут. Торги остановлены.&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # 2. Получение быстрой цены с деривативной биржи&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ref_price&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;feed&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_latest_mid_price&lt;/span&gt;&lt;span&gt;(target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;symbol)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # 3. Получение лучшего аска в стакане Polymarket CLOB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        orderbook&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;get_order_book&lt;/span&gt;&lt;span&gt;(target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;token_id)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        best_ask&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; float&lt;/span&gt;&lt;span&gt;(orderbook[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;asks&amp;#39;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;price&amp;#39;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # 4. Логика арбитражного входа: цена уверенно выше страйка, но контракт дешев&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        price_buffer&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;strike_price&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.0015&lt;/span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;  # 0.15% буфер запаса&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; ref_price&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span&gt; (target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;strike_price&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; price_buffer)&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;/span&gt;&lt;span&gt; best_ask&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.85&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            shares&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; int&lt;/span&gt;&lt;span&gt;(budget_usd&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; /&lt;/span&gt;&lt;span&gt; best_ask)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;            if&lt;/span&gt;&lt;span&gt; shares&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;                print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;[EXECUTE] BUY &lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;/span&gt;&lt;span&gt;shares&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; shares @ $&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;/span&gt;&lt;span&gt;best_ask&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;:.2f&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; (Ref: $&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;/span&gt;&lt;span&gt;ref_price&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;:.2f&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;gt; Strike: $&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;strike_price&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;:.2f&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;)&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;                # Отправка taker-ордера через подпись EIP-712&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;create_and_post_order&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    token_id&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;token_id&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    price&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt;best_ask&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    size&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span&gt;shares&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    side&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;BUY&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-podvodnye-kamni-i-riski-5-minutnogo-snaipinga&quot;&gt;4. Подводные камни и риски 5-минутного снайпинга&lt;/h2&gt;
&lt;p&gt;Высокая частота рынка создает серьезные скрытые издержки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Turnover Drag (Частотный риск):&lt;/strong&gt; 4 актива каждые 5 минут генерируют до 48 торговых циклов в час. Без строгого математического преимущества (&lt;em&gt;Edge&lt;/em&gt;) серия из 3–4 убытков подряд быстро сжигает депозит.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Задержка разрешения рынка (Settlement Latency):&lt;/strong&gt; оракул (UMA / Chainlink) разрешает исход по фиксированному снепшоту цены. Разница в источниках цен (Binance vs Coinbase vs Hyperliquid) может привести к тому, что локальный индикатор показал победу, а оракул зафиксировал проигрыш.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slippage и глубина стакана:&lt;/strong&gt; на 5-минутных контрактах ликвидность ограничена сотнями долларов. Попытка зайти крупным объемом мгновенно сдвигает цену до невыгодных &lt;code&gt;$0.95+&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Бинарные рынки — это вероятность, а не направление:&lt;/strong&gt; расчет строится вокруг вероятности $P &amp;gt; \text{Ask Price}$ с поправкой на дисконт риска.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Кросс-рыночный арбитраж:&lt;/strong&gt; скорость получения спотовых/перп тиков (Hyperliquid L2) является главным конкурентным преимуществом.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Обязательный Circuit Breaker:&lt;/strong&gt; алгоритмический лимит дневного убытка (&lt;code&gt;max_daily_loss&lt;/code&gt;) критически необходим для защиты от непредвиденных сбоев оракулов или задержек сети.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Автор исследования и демонстрация бота:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/zrUQ-oE5ND4&quot;&gt;Moon Dev — Fable 5 Made Me a 5 Min Polymarket Trading Bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детальный конспект в базе знаний:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Polymarket-Fable5-Strike-Sniper-MoonDev-2026.md&quot;&gt;Obsidian Vault: Polymarket Strike Sniper Notes (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Количественные репозитории:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Self-Improving AI Software Factory: архитектура распределенной фабрики кода на базе LLM-агентов</title>
          <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/self-improving-ai-software-factory/</link>
          <guid>https://xsa-dev.github.io/posts/self-improving-ai-software-factory/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/self-improving-ai-software-factory/">&lt;p&gt;Локальные инструменты агентного кодинга (Codex, Claude Code, Aider, OpenDevin) совершили революцию в индивидуальной разработке. Однако при попытке масштабировать этот подход на уровень команды или автоматизированного пайплайна инженеры неизбежно упираются в системный тупик:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Локальный хаос промптов и конфигураций:&lt;/strong&gt; у каждого разработчика свои настройки контекста, разные версии моделей и несогласованные правила форматирования.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Отсутствие воспроизводимости:&lt;/strong&gt; невозможно точно оценить, улучшило ли очередное изменение в системном промпте качество кодогенерации или сломало граничные кейсы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Неэффективная трата токенов:&lt;/strong&gt; использование мощных LLM для механических задач (проверка синтаксиса, парсинг логов, поиск файлов) вместо детерминированных скриптов.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Решением становится переход от локальных CLI-утилит к &lt;strong&gt;AI Software Factory&lt;/strong&gt; — централизованной распределенной системе оркестрации агентных воркеров с замкнутым контуром самообучения (&lt;em&gt;Self-Improving Feedback Loop&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Разберем архитектуру такой фабрики (на примере системы &lt;em&gt;Machinist&lt;/em&gt;, исследованной Оуэйном Льюисом).&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-arkhitektura-fabriki-control-plane-i-worker-pool&quot;&gt;1. Архитектура фабрики: Control Plane и Worker Pool&lt;/h2&gt;
&lt;p&gt;В основе промышленной фабрики кода лежит строгое разделение между уровнем управления (&lt;strong&gt;Control Plane&lt;/strong&gt;) и изолированными вычислительными узлами (&lt;strong&gt;Worker Pool&lt;/strong&gt;):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Triggers &lt;/span&gt;&lt;span&gt;[&amp;quot;⚡ Входной поток задач &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Triggers&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        T1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Webhooks / CI / Jira / CLI&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Triggers &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Новый тикет / запрос&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; CP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; CP &lt;/span&gt;&lt;span&gt;[&amp;quot;🎛️ CONTROL PLANE &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Machinist&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        DB&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Task Queue &amp;amp; Global State&amp;lt;br/&amp;gt;(SQLite / WAL)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Catalog&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Prompts &amp;amp; Skills Catalog&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Dashboard&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Web Dashboard &amp;amp; Traces&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        SSHGate&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;SSH Tunnel Gateway&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    CP &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span&gt;🔒&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Dispatches jobs over SSH tunnel&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; WP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; WP &lt;/span&gt;&lt;span&gt;[&amp;quot;☁️ WORKER POOL &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Hetzner / Cloud VMs&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Foreman&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;👑 1. Foreman Agent&amp;lt;br/&amp;gt;(Планирование и декомпозиция)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        SubAgents&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🤖 2. Sub-Agents Swarm&amp;lt;br/&amp;gt;(Claude Coder / Codex / PyTest)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Audit&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🛡️ 3. Audit Agent + Deterministic Evals&amp;lt;br/&amp;gt;(mypy, pytest, 3-Agent Review)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Foreman &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Делегирование подзадач&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; SubAgents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        SubAgents &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Код, патчи и артефакты&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; Audit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;preimushchestva-takoi-topologii&quot;&gt;Преимущества такой топологии:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Изоляция окружения:&lt;/strong&gt; агенты выполняют сборку, запуск тестов и системные команды на недорогих облачных серверах (например, Hetzner Cloud VM с 16–32 GB RAM), не засоряя локальную машину разработчика.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Очередь задач с лимитом параллелизма:&lt;/strong&gt; Control Plane контролирует лимиты API (&lt;code&gt;max_concurrent_jobs&lt;/code&gt;) и защищает от исчерпания рейтов LLM-провайдеров.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-ierarkhiia-agentnykh-rolei-foreman-sub-agents-audit&quot;&gt;2. Иерархия агентных ролей: Foreman → Sub-agents → Audit&lt;/h2&gt;
&lt;p&gt;Монолитный агент, пытающийся одновременно планировать архитектуру, писать код, ставить зависимости и проверять тесты, быстро теряет фокус из-за раздувания контекстного окна (&lt;em&gt;Context Rotting&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;В фабрике реализовано четкое разделение ответственности:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Роль&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Зона ответственности&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Инструменты&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Foreman (Прораб)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Принимает высокоуровневый тикет, исследует кодовую базу, формирует план и распределяет подзадачи.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;search_files&lt;/code&gt;, &lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;delegate_task&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Sub-Agent (Кодер)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Выполняет строго одну изолированную задачу в конкретном модуле (написание функции, рефакторинг, фикс бага).&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;patch&lt;/code&gt;, &lt;code&gt;write_file&lt;/code&gt;, &lt;code&gt;terminal&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Audit Agent (Аудитор)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Проверяет соответствие критериям приемки, соответствие стилю и отсутствие побочных регрессий.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;pytest&lt;/code&gt;, &lt;code&gt;cargo test&lt;/code&gt;, &lt;code&gt;git diff&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-determinirovannye-evals-vmesto-lishnikh-llm-vyzovov&quot;&gt;3. Детерминированные Evals вместо лишних LLM-вызовов&lt;/h2&gt;
&lt;p&gt;Одна из главных ошибок при проектировании AI-фабрик — попытка решать все задачи через промпты нейросетей.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Золотое правило:&lt;/strong&gt; если задачу можно надежно и дешево решить регулярным выражением, статическим анализатором или bash-скриптом — &lt;strong&gt;не отправляйте ее в LLM&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Пример детерминированного гейта качества без участия нейросети&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; subprocess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;import&lt;/span&gt;&lt;span&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; verify_code_artifact&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;repo_path&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; str&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; bool&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # 1. Синтаксический анализ и типы&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    typecheck&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; subprocess&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;run&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;mypy&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; repo_path]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; capture_output&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; typecheck&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;returncode&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;[FAIL] Typecheck errors:&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n{&lt;/span&gt;&lt;span&gt;typecheck&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;decode&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    # 2. Модульные тесты&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tests&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; subprocess&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;run&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;pytest&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;-q&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;/span&gt;&lt;span&gt;repo_path&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;/tests&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span&gt; capture_output&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; tests&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;returncode&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;        print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;[FAIL] Unit tests broken:&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;\n{&lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;decode&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;/span&gt;&lt;span&gt; __name__&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; verify_code_artifact&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sys&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Детерминированные скрипты дают &lt;strong&gt;100% стабильный результат&lt;/strong&gt;, выполняются за миллисекунды и экономят тысячи долларов на API-токенах.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-self-improving-feedback-loop-obuchenie-na-treisakh&quot;&gt;4. Self-Improving Feedback Loop: обучение на трейсах&lt;/h2&gt;
&lt;p&gt;Почему фабрика называется &lt;em&gt;самообучающейся&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Агентная фабрика не просто исполняет задачи, она непрерывно накапливает базу знаний об ошибках:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Fail&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;❌ Неудачный запуск / Broken Build&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;] --&amp;gt;&lt;/span&gt;&lt;span&gt; Trace&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;📋 Трейс выполнения: логи + контекст&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; RootCause &lt;/span&gt;&lt;span&gt;[&amp;quot;🔍 Автоматический анализ узкого места&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        P1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Неточная инструкция в системном промпте?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        P2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Недостаточный контекст из документации?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        P3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Сбойный вспомогательный скрипт?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Trace &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; RootCause&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; KnowledgeUpdate &lt;/span&gt;&lt;span&gt;[&amp;quot;🚀 Обновление фабрики &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Feedback Loop&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        K1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;1. Обновление каталога Skills &amp;amp; Prompts&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        K2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;2. Создание нового синтетического Eval-теста&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        K1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;&amp;lt;--&amp;gt;&lt;/span&gt;&lt;span&gt; K2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    RootCause &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;&lt;/span&gt;&lt;span&gt; KnowledgeUpdate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    KnowledgeUpdate &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;-.-&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Внедрение в воркеры&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; Fail&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Когда один агент находит решение сложной проблемы или совершает ошибку, исправление вносится в &lt;strong&gt;централизованный репозиторий промптов и скиллов&lt;/strong&gt;. В следующий раз все воркеры фабрики автоматически получают обновленную базу знаний.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Централизация побеждает локальный хаос:&lt;/strong&gt; единый Control Plane с версионированием промптов и очереди задач обеспечивает воспроизводимость.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разделение труда (Foreman / Sub-agents / Audit):&lt;/strong&gt; узкоспециализированные агенты с компактным контекстом работают надежнее и дешевле монолитов.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детерминизм во главе угла:&lt;/strong&gt; используйте классические линтеры, компиляторы и тесты вместо LLM-судей везде, где это возможно.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Контур обратной связи (Evals Loop):&lt;/strong&gt; каждый упавший трейс превращается в синтетический тест для предотвращения будущих регрессий.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Оригинальное видео и автор:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtu.com/ZDOTYfJBuLw&quot;&gt;Owain Lewis — I Built A Self-Improving AI Software Factory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детальный структурированный конспект:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Owain-Lewis-Self-Improving-AI-Software-Factory-2026.md&quot;&gt;Obsidian Vault: Owain Lewis Software Factory (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инженерные наработки:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Обо мне</title>
          <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/about/</link>
          <guid>https://xsa-dev.github.io/about/</guid>
          <description xml:base="https://xsa-dev.github.io/about/">&lt;p&gt;Привет! Я занимаюсь разработкой систем, автоматизацией, алгоритмическим трейдингом и AI-агентами.&lt;/p&gt;
&lt;h2 id=&quot;stek-i-fokus&quot;&gt;Стек и фокус&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Языки:&lt;/strong&gt; Rust, Python, Go, TypeScript&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Области:&lt;/strong&gt; Высоконагруженные бэкенды, MLOps, торговые системы, автономные агенты&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инфраструктура:&lt;/strong&gt; Linux, Docker, Tailscale, CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;kontakty&quot;&gt;Контакты&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Telegram:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://t.me/AlphaPipeline&quot;&gt;@AlphaPipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;X / Twitter:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://x.com/alxy_dev&quot;&gt;@alxy_dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Запуск блога на Zola</title>
          <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/hello-world/</link>
          <guid>https://xsa-dev.github.io/posts/hello-world/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/hello-world/">&lt;p&gt;Этот блог построен на базе &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.getzola.org/&quot;&gt;Zola&lt;/a&gt;&lt;/strong&gt; — быстрого статического генератора сайтов на Rust.&lt;/p&gt;
&lt;h2 id=&quot;preimushchestva-zola&quot;&gt;Преимущества Zola&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Один бинарник:&lt;/strong&gt; Никаких &lt;code&gt;node_modules&lt;/code&gt;, Ruby gems или Python venv.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Высокая производительность:&lt;/strong&gt; Сборка сотен страниц занимает доли секунды.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Шаблонизатор Tera:&lt;/strong&gt; Мощный синтаксис, вдохновленный Jinja2 / Liquid.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Встроенная подсветка синтаксиса:&lt;/strong&gt; Быстрая подсветка кода без клиентского JS.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;primer-koda-na-rust&quot;&gt;Пример кода на Rust&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Hello, Zola!&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;podderzhka-tsitat-i-razmetki&quot;&gt;Поддержка цитат и разметки&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Простота — необходимое условие надежности. — &lt;em&gt;Edsger W. Dijkstra&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Блог поддерживает автоматическую генерацию RSS/Atom фидов, теги и адаптивную темную тему.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Официальная документация Zola:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://www.getzola.org/&quot;&gt;getzola.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Репозиторий блога и темы:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/xsa-dev.github.io&quot;&gt;xsa-dev/xsa-dev.github.io (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инженерные наработки:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Reinforcement Learning в алготрейдинге: архитектура памяти состояний, Q-learning и стационарные признаки</title>
          <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/rl-algo-trading-state-memory/</link>
          <guid>https://xsa-dev.github.io/posts/rl-algo-trading-state-memory/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/rl-algo-trading-state-memory/">&lt;p&gt;Большинство попыток применить классическое машинное обучение (Supervised Learning) к финансовым рынкам разбиваются об одну фундаментальную проблему — &lt;strong&gt;нестационарность временных рядов&lt;/strong&gt;. Рыночный режим меняется, скользящие средние смещаются, а обученная на исторических ценах «монолитная» нейросеть начинает генерировать ложные сигналы.&lt;/p&gt;
&lt;p&gt;Вместо монолитных «черных ящиков» в количественном трейдинге все чаще применяются &lt;strong&gt;иерархические системы обучения с подкреплением (Reinforcement Learning)&lt;/strong&gt; на основе дискретной памяти состояний и стационарных признаков.&lt;/p&gt;
&lt;p&gt;Разберем архитектуру такого контура: от квантования рыночного опыта в «нейроны памяти» до взвешенного ансамблевого голосования (&lt;em&gt;Collective Mind&lt;/em&gt;).&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-ierarkhicheskaia-arkhitektura-ot-neirona-k-ansambliu&quot;&gt;1. Иерархическая архитектура: от нейрона к ансамблю&lt;/h2&gt;
&lt;p&gt;Вместо одной сложной модели строится трехуровневая модульная иерархия:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    CM&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🧠 Collective Mind (Совет агентов)&amp;lt;br/&amp;gt;Взвешенное динамическое голосование&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;📈 Агент 1: Trend Following&amp;lt;br/&amp;gt;(Свои веса &amp;amp; Q)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🔄 Агент 2: Mean Reversion&amp;lt;br/&amp;gt;(Свои веса &amp;amp; Q)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;⚡ Агент 3: Volatility Breakout&amp;lt;br/&amp;gt;(Свои веса &amp;amp; Q)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    CM &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Агрегация весов P_win&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; A1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    CM &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Агрегация весов P_win&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; A2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    CM &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Агрегация весов P_win&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; A3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    DB&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;💾 База нейронов памяти (Q-Table)&amp;lt;br/&amp;gt;Квантованные инварианты опыта z_t&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Чтение / Запись опыта&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; DB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Чтение / Запись опыта&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; DB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    A3 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Чтение / Запись опыта&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; DB&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Нейрон памяти (Memory Neuron):&lt;/strong&gt; элементарная единица опыта. Хранит квантованный ключ рыночной ситуации, предпринятое действие ($a \in {\text{Buy}, \text{Sell}, \text{Hold}}$), текущую $Q$-оценку, счетчик посещений и возраст записи.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Специализированный агент:&lt;/strong&gt; независимый модуль логики со своим фокусом (краткосрочный импульс, спред, фильтр волатильности).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collective Mind (Коллективный разум):&lt;/strong&gt; управляющий контур, объединяющий решения агентов через взвешенное голосование, где вес каждого агента динамически пропорционален его исторической точности ($P_{\text{win}}$).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-statsionarnye-priznaki-invariantnost-k-urovniu-tsen&quot;&gt;2. Стационарные признаки: инвариантность к уровню цен&lt;/h2&gt;
&lt;p&gt;Сырые цены закрытия и абсолютные индикаторы нестационарны. Если обучить модель на Bitcoin по $30,000, при цене $90,000 ее веса потеряют физический смысл.&lt;/p&gt;
&lt;p&gt;Решение — переход к &lt;strong&gt;стационарным z-score инвариантам&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;$$z_t = \frac{p_t - \mu_{\text{SMA}(k)}}{\sigma_{\text{StdDev}(k)}}$$&lt;/p&gt;
&lt;p&gt;Вектор состояния описывает не &lt;em&gt;«где находится цена»&lt;/em&gt;, а &lt;em&gt;«форму и аномалию движения»&lt;/em&gt; относительно локальной волатильности. Далее непрерывные значения квантуются в дискретные интервалы (бины). Например:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$z_{\text{RSI}} \in {\text{Oversold}, \text{Neutral}, \text{Overbought}}$&lt;/li&gt;
&lt;li&gt;$z_{\text{Spread}} \in {\text{Tight}, \text{Normal}, \text{Wide}}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Благодаря квантованию пространство состояний сжимается с бесконечности до сотен тысяч обозримых ситуаций, которые накапливают статистический опыт.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-matematika-q-learning-i-balansirovka-redkikh-klassov&quot;&gt;3. Математика Q-Learning и балансировка редких классов&lt;/h2&gt;
&lt;p&gt;Обновление оценок ценности действия строится по уравнению Беллмана:&lt;/p&gt;
&lt;p&gt;$$Q(s, a) \leftarrow Q(s, a) + \alpha \cdot \left[ r + \gamma \cdot \max_{a’} Q(s’, a’) - Q(s, a) \right]$$&lt;/p&gt;
&lt;p&gt;где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\alpha$ — скорость обучения (learning rate);&lt;/li&gt;
&lt;li&gt;$\gamma$ — фактор дисконтирования будущих наград;&lt;/li&gt;
&lt;li&gt;$r$ — немедленная рыночная награда (PnL с поправкой на проскальзывание и комиссию).&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Концептуальная логика обновления нейрона памяти&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; MemoryNeuron&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; state_key&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; action&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;state_key&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; state_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; action&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;q_value&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;visits&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;last_seen&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; reward&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; next_max_q&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; alpha&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; gamma&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0.95&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        # Балансировка: редкие состояния обновляются с повышенным весом&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        effective_alpha&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; /&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.01&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;visits)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        td_target&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;/span&gt;&lt;span&gt; reward&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +&lt;/span&gt;&lt;span&gt; gamma&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span&gt; next_max_q&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;q_value&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;/span&gt;&lt;span&gt; effective_alpha&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span&gt; (td_target&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;q_value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;/span&gt;&lt;span&gt;visits&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; +=&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Борьба с дисбалансом классов:&lt;/strong&gt; на рынке 70%+ времени идет боковик. Без балансировки редкие ситуации разворота тренда просто не успеют набрать статистику. Взвешивание через счетчик посещений позволяет системе адекватно оценивать редкие критические режимы.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-pruning-pamiati-i-adaptivnyi-exploration&quot;&gt;4. Pruning памяти и адаптивный Exploration&lt;/h2&gt;
&lt;p&gt;Чтобы база нейронов памяти не раздувалась, применяются два механизма:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pruning (Отсечение):&lt;/strong&gt; нейроны с околонулевыми счетчиками посещений за длительный период или стабильно отрицательным $Q$ удаляются, освобождая память и очищая стратегию от устаревших аномалий.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Эволюционный $\varepsilon$-Greedy:&lt;/strong&gt; в спокойные периоды система эксплуатирует накопленный опыт ($\varepsilon \to 0$), а при резких скачках волатильности (режим сменился) уровень исследования повышается.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Квантование + z-score&lt;/strong&gt; превращают нестационарные рыночные котировки в долговечные признаки.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Иерархия (Память → Агенты → Совет)&lt;/strong&gt; защищает от сбоев отдельных стратегий за счет взвешенного ансамбля.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детерминированный Q-learning&lt;/strong&gt; на понятных состояниях прозрачнее и устойчивее к оверфиттингу, чем глубокие черные ящики.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Автор исследования:&lt;/strong&gt; Yevgeniy Koshtenko (MQL5 / MetaTrader 5 Research)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Заметки и детальный конспект статьи:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/Articles/RL-System-AlgoTrading-MQL5-RU.md&quot;&gt;Obsidian Vault: RL System AlgoTrading (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Количественные репозитории:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Самообучающиеся торговые AI-агенты: иллюзии, оверфиттинг и реальная архитектура</title>
          <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/self-improving-trading-agents/</link>
          <guid>https://xsa-dev.github.io/posts/self-improving-trading-agents/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/self-improving-trading-agents/">&lt;p&gt;Концепция автономного торгового агента, который «сам торгует, анализирует свои ошибки и дообучает стратегию 24/7», сейчас на пике хайпа. В сети появляется множество видео и промптов, обещающих превратить Claude Code или LLM-агентов в машины по генерации сверхприбыли.&lt;/p&gt;
&lt;p&gt;Однако между красивыми демо-роликами и реальным рыночным продакшном лежит огромная пропасть. Разберем, где здесь маркетинг, где критические риски оверфиттинга, и как должна выглядеть архитектура надежного агентного контура.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;anatomiia-khaipa-47-v-mesiats-i-nauchnyi-metod&quot;&gt;Анатомия хайпа: 47% в месяц и «научный метод»&lt;/h2&gt;
&lt;p&gt;Типичный сценарий, который продвигают в платном доступе:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One-shot prompt для Claude Code разворачивает стек на Railway / облаке.&lt;/li&gt;
&lt;li&gt;Агент подключается к API биржи и ведет позиции.&lt;/li&gt;
&lt;li&gt;Еженедельно агент анализирует ledger (историю сделок) и меняет веса стратегии.&lt;/li&gt;
&lt;li&gt;Заявляются цели уровня 40–50% в месяц при минимальных просадках.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;v-chem-fundamental-nye-problemy-takogo-podkhoda&quot;&gt;В чем фундаментальные проблемы такого подхода?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Статистическая незначимость:&lt;/strong&gt; демонстрация «24 прибыльных / 22 убыточных сделки за 8 недель» — это околонулевая выборка. В алготрейдинге статистический edge проявляется на выборках от 500–1000+ сделок на разных рыночных режимах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Иллюзия «одной переменной»:&lt;/strong&gt; в классическом научном методе гипотезы тестируют, меняя один параметр. В реальной мульти-активной стратегии десятки гиперпараметров (stop-loss, take-profit, regime threshold, ATR multiplier) жестко скоррелированы. LLM, пытаясь подогнать один параметр под прошлую неделю, гарантированно переобучается на локальный шум (in-sample overfitting).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Слепое доверие переключению в Live:&lt;/strong&gt; делегировать агенту право самостоятельно переключать флаг &lt;code&gt;live: true&lt;/code&gt; без внешнего бэктеста и человека — прямой путь к ликвидации депозита.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;arkhitektura-nadezhnogo-kontura&quot;&gt;Архитектура надежного контура&lt;/h2&gt;
&lt;p&gt;Если отбросить маркетинговую шелуху, сама идея разделения обязанностей между специализированными агентами вполне жизнеспособна. Но архитектура должна строиться по принципу &lt;strong&gt;изолированных контуров и жестких шлюзов (Approval Gates)&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Orch &lt;/span&gt;&lt;span&gt;[&amp;quot;🎛️ 1. Orchestrator &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Hermes Agent&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        O1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Управление инфраструктурой (deploy, cron, health)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        O2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Сбор телеметрии и Append-Only Ledger&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        O1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;---&lt;/span&gt;&lt;span&gt; O2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Exec &lt;/span&gt;&lt;span&gt;[&amp;quot;⚡ 2. Strategy Engine &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Исполнение&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        E1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Детерминированный движок (Rust / Python / Freqtrade)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        E2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Строгий Risk Management (Max Drawdown, Sizing)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        E1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;---&lt;/span&gt;&lt;span&gt; E2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Tuner &lt;/span&gt;&lt;span&gt;[&amp;quot;📊 3. Out-of-Sample Tuner &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Аналитик&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        T1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Бэктесты на независимой OOS-выборке со сдвигом&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        T2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Отчет с гипотезами и метриками (Sharpe, Profit Factor)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        T1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;---&lt;/span&gt;&lt;span&gt; T2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    subgraph&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Gate &lt;/span&gt;&lt;span&gt;[&amp;quot;🛡️ 4. Human Approval Gate&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        direction TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Ручной аудит гипотезы разработчиком&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Применение флага live: true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        G1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;&lt;/span&gt;&lt;span&gt; G2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Orch &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; Exec&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Orch &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; Tuner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Tuner &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Предложение оптимизации&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; Gate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Gate &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Апрув параметров&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; Exec&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-kliuchevykh-printsipa-dlia-prodakshna&quot;&gt;4 ключевых принципа для продакшна&lt;/h2&gt;
&lt;h3 id=&quot;1-determinirovannoe-ispolnenie-otdel-no-ot-llm&quot;&gt;1. Детерминированное исполнение отдельно от LLM&lt;/h3&gt;
&lt;p&gt;LLM не должна принимать решения по каждой свече на миллисекундах. Роль AI-агента — &lt;strong&gt;мета-оптимизация и аналитика&lt;/strong&gt;: генерация идей, фильтрация аномалий, валидация гипотез. Исполнение ордеров и контроль рисков должны выполняться жестким детерминированным кодом.&lt;/p&gt;
&lt;h3 id=&quot;2-append-only-ledger-kak-edinstvennyi-istochnik-pravdy&quot;&gt;2. Append-Only Ledger как единственный источник правды&lt;/h3&gt;
&lt;p&gt;Все события, котировки, сигналы и фактические исполнения логируются в неизменяемый JSONL-лог. Агент не может переписать историю — только прочитать ее.&lt;/p&gt;
&lt;h3 id=&quot;3-out-of-sample-validatsiia-so-sdvigom-po-vremeni&quot;&gt;3. Out-of-Sample валидация со сдвигом по времени&lt;/h3&gt;
&lt;p&gt;Тюнер стратегий никогда не должен оптимизировать параметры на тех же данных, где искались сигналы. Использование временного сдвига (например, 3–7 дневный лаг) защищает от оптимизации под случайные всплески волатильности.&lt;/p&gt;
&lt;h3 id=&quot;4-human-in-the-loop-ruchnoi-shliuz&quot;&gt;4. Human-in-the-loop (Ручной шлюз)&lt;/h3&gt;
&lt;p&gt;Любые изменения в &lt;code&gt;strategy.yaml&lt;/code&gt; или параметрах риск-менеджмента требуют явного подтверждения человеком. Переход &lt;code&gt;paper → live&lt;/code&gt; выполняется только после прохождения OOS-гейта.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Оригинальное видео:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtu.be/6njREUQAFdg&quot;&gt;01 Systems (Wacko Alpha) — Self-Improving Trading Agent on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Заметки и детальный конспект:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Self-improving-trading-agent-Hermes-2026-06-21.md&quot;&gt;Obsidian Vault: Self-Improving Trading Agent (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инженерные наработки и репозитории:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      <item>
          <title>Как обучать и оценивать AI-агентов: почему Pass@1 бесполезен и как работает связка SFT + GKD + GRPO</title>
          <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
          <author>Alexei Savin</author>
          <link>https://xsa-dev.github.io/posts/training-evaluating-ai-agents/</link>
          <guid>https://xsa-dev.github.io/posts/training-evaluating-ai-agents/</guid>
          <description xml:base="https://xsa-dev.github.io/posts/training-evaluating-ai-agents/">&lt;p&gt;Большинство метрик, по которым сегодня сравнивают языковые модели (вроде Pass@1 на HumanEval или статичных QA-тестах), практически бесполезны, когда дело доходит до &lt;strong&gt;автономных агентов&lt;/strong&gt; в продакшне.&lt;/p&gt;
&lt;p&gt;В отличие от классического чат-бота (&lt;code&gt;prompt → response&lt;/code&gt;), агент — это динамическая система: &lt;strong&gt;модель + обвязка (harness) + инструменты + память + мутабельное окружение + логика восстановления после ошибок&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Разберем, из чего складывается реальная надежность агентов и как устроен современный трехуровневый пайплайн их обучения: &lt;strong&gt;SFT → On-Policy Distillation (GKD) → RLVR (GRPO)&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-izmereniia-nadezhnosti-agenta-vmesto-pass-1&quot;&gt;4 измерения надежности агента (вместо Pass@1)&lt;/h2&gt;
&lt;p&gt;Когда агент выполняет транзакционные действия (запись в БД, пуш в репозиторий, исполнение ордеров), статичный процент правильных ответов ничего не говорит о безопасности. В продакшне критичны 4 других фактора:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Core&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🛡️ 4 измерения надежности агента&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🎯 1. Consistency&amp;lt;br/&amp;gt;(Повторяемость результата)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;⚡ 2. Robustness&amp;lt;br/&amp;gt;(Устойчивость к шуму API)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;🔄 3. Recoverability&amp;lt;br/&amp;gt;(Откат после 5xx и tool errors)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    C4&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;⛔ 4. Failure Severity&amp;lt;br/&amp;gt;(Штраф за деструктивные действия)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Core &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Core &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Core &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Core &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span&gt; C4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Consistency (Повторяемость):&lt;/strong&gt; одна и та же задача при повторных прогонах должна давать стабильный результат с контролируемой дисперсией по токенам и времени.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robustness (Устойчивость к шуму):&lt;/strong&gt; мелкие изменения в формулировке, смена формата вывода CLI или незначительный шум в API не должны ломать логику рассуждений.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recoverability (Восстановление):&lt;/strong&gt; способность агента понять, что инструмент вернул ошибку (&lt;code&gt;404&lt;/code&gt;, &lt;code&gt;SyntaxError&lt;/code&gt;, пустой вывод), скорректировать гипотезу и продолжить, а не падать в бесконечный цикл.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failure Severity (Тяжесть сбоя):&lt;/strong&gt; синтаксическая ошибка tool call должна штрафоваться минимально, а необратимое действие (удаление таблицы или рассинхрон стейта) — приводить к жесткому блокирующему штрафу.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;trekhurovnevyi-paiplain-obucheniia&quot;&gt;Трехуровневый пайплайн обучения&lt;/h2&gt;
&lt;p&gt;Обучать агентов только с помощью SFT или только через RL неэффективно. Оптимальный стек пост-тренинга строится в три этапа:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;mermaid&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;flowchart&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; TD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S1&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;1. SFT (Supervised Fine-Tuning)&amp;lt;br/&amp;gt;Приучает к синтаксису tool_call и Loss Masking&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S2&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;2. Distillation (On-Policy GKD)&amp;lt;br/&amp;gt;Перенос навыков учителя + выход из тупиков&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S3&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;3. RLVR (GRPO / Verifiable Rewards)&amp;lt;br/&amp;gt;Максимизация надежности через проверяемые награды&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S1 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Формат освоен&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; S2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    S2 &lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;==&amp;gt;|&lt;/span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Траектории исследованы&lt;/span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;|&lt;/span&gt;&lt;span&gt; S3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;etap-1-sft-supervised-fine-tuning&quot;&gt;Этап 1. SFT (Supervised Fine-Tuning)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Цель:&lt;/strong&gt; научить модель синтаксису вызова инструментов (&lt;code&gt;tool_calls&lt;/code&gt;), структуре системных инструкций и multi-turn диалогу.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Критический нюанс — Loss Masking:&lt;/strong&gt; градиентный спуск должен рассчитываться &lt;strong&gt;только&lt;/strong&gt; на токенах генерации агента (thought + action). Обучать модель предсказывать вывод терминала, ответ пользователя или результат исполнения инструмента — грубая ошибка. Токены окружения маскируются значением &lt;code&gt;-100&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Потолок SFT:&lt;/strong&gt; модель становится идеальным имитатором обучающего датасета, но не умеет исследовать новые пути или исправлять свои ошибки.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;etap-2-on-policy-distillation-gkd-generalized-knowledge-distillation&quot;&gt;Этап 2. On-Policy Distillation (GKD / Generalized Knowledge Distillation)&lt;/h3&gt;
&lt;p&gt;Классическая дистилляция (Off-Policy) подает студенту идеальные траектории учителя-гиганта. В реальности маленькая модель неизбежно ошибается, попадает в незнакомое состояние и «галлюцинирует» (exposure bias).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Решение — On-Policy GKD:&lt;/strong&gt; студент &lt;strong&gt;сам генерирует траекторию&lt;/strong&gt;, а модель-учитель оценивает логиты именно в тех промежуточных состояниях, куда студент реально зашел.&lt;/li&gt;
&lt;li&gt;Использование &lt;strong&gt;Reverse KL&lt;/strong&gt; заставляет студента фокусироваться на главных модах распределения учителя и учит выходить из тупиков.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;etap-3-rlvr-i-grpo-reinforcement-learning-with-verifiable-rewards&quot;&gt;Этап 3. RLVR и GRPO (Reinforcement Learning with Verifiable Rewards)&lt;/h3&gt;
&lt;p&gt;Когда формат закреплен, в дело вступает обучение с подкреплением по проверяемому результату. &lt;strong&gt;GRPO (Group Relative Policy Optimization)&lt;/strong&gt; убирает необходимость в отдельной тяжелой модели-критике (Critic Network):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;На один входной промпт генерируется группа из $G$ вариантов ($G = 8..16$).&lt;/li&gt;
&lt;li&gt;Каждый вариант прогоняется через детерминированный верификатор (тесты, компилятор, линтер).&lt;/li&gt;
&lt;li&gt;Награда нормализуется внутри группы: $A_i = \frac{r_i - \text{mean}(R)}{\text{std}(R)}$.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Концептуальная схема многокомпонентной награды&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; calculate_agent_reward&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;trajectory&lt;/span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; test_result&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;        0.2&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; format_reward&lt;/span&gt;&lt;span&gt;(trajectory)&lt;/span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;       # Валидный JSON / tool schema&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;        +&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.6&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; execution_reward&lt;/span&gt;&lt;span&gt;(test_result)&lt;/span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # Unit-тесты пройдены&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;        +&lt;/span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 0.2&lt;/span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; efficiency_reward&lt;/span&gt;&lt;span&gt;(trajectory)&lt;/span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; # Минимальное число шагов&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Правило дисперсии:&lt;/strong&gt; GRPO работает только при наличии вариативности наград. Если все 8 вариантов провалились или все 8 выполнились успешно — обучающий сигнал равен нулю. Задача тренера — подбирать задачи на «границе возможностей» модели.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;glavnyi-anti-pattern-reward-hacking&quot;&gt;Главный анти-паттерн: Reward Hacking&lt;/h2&gt;
&lt;p&gt;Если верификатор наград слаб (например, оценивает только наличие ключевого слова в выводе), RL-агент моментально найдет шорткат: научится вызывать заглушку &lt;code&gt;exit(0)&lt;/code&gt; или обходить тесты.&lt;/p&gt;
&lt;p&gt;Грейдер должен быть &lt;strong&gt;физически изолирован&lt;/strong&gt; от среды агента (отдельный контейнер / процесс), а валидация обязана проверять фактический граф мутаций файловой системы и БД.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;kliuchevye-vyvody&quot;&gt;Ключевые выводы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Агент = Модель + Среда:&lt;/strong&gt; оценивайте не LLM в изоляции, а всю замкнутую систему действий.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SFT дает форму, GKD учит исправлять ошибки, RL находит оптимум.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Трейсы продакшна — топливо для тестов:&lt;/strong&gt; каждая непредвиденная ошибка агента в бою должна автоматически превращаться в изолированный тест для пост-тренинга.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;pervoistochniki-i-materialy&quot;&gt;Первоисточники и материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Оригинальная серия воркшопов:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://youtube.com/playlist?list=PLo2EIpI_JMQvQZm-kVlz4wY1vWF0LBcf5&quot;&gt;Hugging Face — Training and Evaluating AI Agents (YouTube Playlist)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Детальный структурированный конспект:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev/obsidian-vault/blob/main/YouTube/Training-and-Evaluating-AI-Agents-Workshop-Series-2026-09-16.md&quot;&gt;Obsidian Vault: Training &amp;amp; Evaluating AI Agents (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Репозитории и код:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/xsa-dev&quot;&gt;github.com/xsa-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
    </channel>
</rss>
