Repository navigation
[0.4.3] - 2026-09-24
Влияние: торговая логика · UI · данные. Меняется одно торговое правило, стоп по марже
бота 2. Схема продавца закрывает сделку, когда поддерживающая маржа проданных опционов достигает 60%
капитала счёта, а в 0.4.2 правило считало эту долю неверно и ошибалось в обе стороны: у первой сделки
живого прогона почти всё время показывало ниже настоящей, на срезе 23.09 выше (24.94% при настоящих
24.01%). Теперь оно видит ту же долю, что и счёт, поэтому на том же ходе рынка 0.4.3 может закрыть
сделку в другой момент, чем 0.4.2. Ещё стоп срабатывает при капитале ноль и ниже, а если закрыть
сделку не удалось, следующий тик решает заново, а не молчит до экспирации. Правило входа и размер
сделки прежние: фильтр по волатильности и наклон размера добавлены в движок выключенными.
В интерфейсе бота 2 карточка непрерывности показывает минуты, когда бот держал позицию без цены
перпа и хедж не мог исполниться, а карточка режима IV больше не выносит вердикт. В данных у леджера
бота 2 появилась строка blind, одна на такой эпизод, а у записи решения тика поле skip_reason.
Настройка ivEntryMaxRank из движка убрана: в старом профиле она просто не читается, миграции нет.
Бот 1 и сканер не затронуты: правки интерфейса касаются только карточек бота 2, а сканер из общих
правил схемы продавца зовёт только сборку настройки, размер по марже и зону продавца, и их поведение
прежнее. Остальное в выпуске это замеры и стенды схемы продавца, они запускаются из scripts/ и в
приложении не исполняются. Шесть книг охраны снялись побитово теми же.
-
[BTC-Options] Бот считает слепоту хеджа и пишет её в леджер. 18 сентября аудит нашёл на
живом прогоне 83.7 минуты, в которые бот держал позицию без цены перпа и хедж не мог исполниться:
пять эпизодов, крупнейшие 36.0 минуты 05.09 и 38.3 минуты 15.09, оба от отказа биржи 503 ровно в
09:00Z. Счётчик непрерывности показывал в это время два перерыва по 75-111 секунд совсем другого
дня, потому что перерывом он считает пропуск ТИКА, а тики все эти минуты приходили исправно.
Теперь слепой тик (структура открыта, цены перпа в снимке нет) считается отдельно от перерыва
опроса, эпизод слепоты закрывается зрячим тиком и оставляет одну строку леджера типаblindс
длительностью и числом слепых тиков, а решение цикла несёт полеskip_reason:SKIPпри живом
превышении полосы из-за отсутствия цены больше неотличим отSKIPвнутри полосы. Строка на
ЭПИЗОД, а не на тик: 36 минут при опросе раз в 15 секунд это 144 тика. -
[BTC-Options] Строка разрыва фандинга называет то, что было. Часы начисления стоят и
когда приложения не было, и когда оно шло слепым, а строкаfunding-gapназывала любой такой
интервал «разрывом тиков». На живом прогоне это врало дважды. Теперь причину называет счётчик
тиков с последнего оценённого начисления, а не догадка. -
[BTC-Options] Карточка непрерывности показывает слепоту и больше не прячется от неё.
Карточка скрывалась как здоровая, если перерывов опроса нет, поэтому в те 83.7 минуты оператор не
видел ни числа, ни карточки: покрытие было около 100%. Добавлены клетка «слепота хеджа» с числом
слепых тиков, своя таблица эпизодов (начало, длительность, тиков вслепую, причина) и отдельный
тег. Полоса покрытия красит слепые минуты штриховкой: сплошь зелёная полоса рядом с клеткой
«слепота 36 мин» спорила сама с собой. Идущая прямо сейчас слепота видна живой строкой, не
дожидаясь конца эпизода. -
[BTC-Options] Карточка режима IV перестала выносить вердикт чужой схемы. Она считала вход
благоприятным, когда подразумеваемая волатильность у НИЗА своего суточного окна: суждение схемы,
которая волатильность ПОКУПАЕТ (исходная Strategy One, длинный стрэддл). Живой бот её ПРОДАЁТ с 4
сентября, то есть зелёный горел ровно наоборот. Признакfavorableи настройкаivEntryMaxRank
убраны из движка, карточка осталась наблюдением: те же числа, суждения нет. Вердикт не развернули
намеренно: разворот утверждал бы «вход выгоден, когда IV у верха окна», а такого замера нет, и
ближайший замер (22.09, пять лет) дал отрицательный ответ по обеим формам действия. Заголовок,
метка и справка карточки переписаны на обоих языках, тест стережёт, что вердикт не вернётся молча. -
[BTC-Options] Фильтр по волатильности на входе схемы продавца замерен на боевой
конфигурации и ОТКЛОНЁН. Живая цепочка открывает сделку, как только в окне срока 336-672 часа
нашлась нога с нужной дельтой, и о волатильности не спрашивает вовсе, хотя результат продавца
решает разница между проданной подразумеваемой волатильностью и той, что реализуется за время
удержания. Замерены обе формы ответа на эту величину, критерий записан до первого прогона
(протоколbot2-предрегистрация-фильтра-волатильности-2026-09-22.md, внутренний каталог проекта
вне репозитория). Запрет входа:
база 84 сделки ×4.12, все шесть клеток сетки порогов ниже (лучшая ×4.08), время вне рынка растёт
с 0.5% до 21.9%, средняя сделка не двигается, то есть гейт отбирает те же сделки, просто меньше.
Изменение размера: ни одна из 27 клеток не взяла планку, а клетки, обгоняющие базу, делают это
пробитым потолком загрузки маржи (89-103% против 80%) и двумя ликвидациями счёта. Нулевой
контроль постоянным множителем той же средней величины берёт тот же рост при пике маржи на 10-14
процентных пунктов ниже и без ликвидаций: вклад самого сигнала 1.020 по медиане. Вывод устоял в
обеих половинах записи и под тремя стрессами издержек. Отчёт:
ОТЧЁТ-бот2-фильтр-волатильности-2026-09-22.mdтам же. -
[BTC-Options] Правило наклона размера от разрыва IV-RV добавлено в движок ВЫКЛЮЧЕННЫМ.
sizeTiltMultиparseSizeTiltSpecвotmscan/sellhedge.js, дефолтsizeTilt: null, при нём
ни одна ветка не исполняется и арифметика протяжки прежняя до бита, тем же приёмом, каким в
схеме живёт выключенное правило досрочного выхода. Нужно затем, чтобы отрицательный вывод можно
было перепроверить на новой записи или пересчитать после правки издержек: до августа такой вывод
жил в проекте цитатой, которую перепроверить было нечем. -
[BTC-Options] Починена таблица автономного правила размера: с 28.08 она печатала шапку без
единой строки. Ключ, под которым цепочка кладётся в память, и ключ, под которым таблица её
оттуда достаёт, собирались в двух разных местахeval-accel.mjs. 28.08 вместе с замером
досрочного выхода к первому приписали подпись правила, второй остался прежним, промах поиска
гасился подстановкой пустого значения, и строка молча пропускалась. Второго ключа больше нет:
строки цепочки лежат под собственным ключом варианта, а промах роняет прогон с ошибкой. На
выбранные 26.08 константы X=45 cap=0.8 дефект не повлиял, их считали до его появления. -
[BTC-Options] Стенд
eval-accel.mjsнаучился мерить фильтр: флаги--gate,
--gate-sweep,--tilt,--tilt-sweep, столбцы «вне рынка» и «средняя сделка» в таблице
размера, нулевой контроль постоянным множителем рядом с каждой клеткой наклона. Разбор условия
гейта, сравнение и счётчик отклонённых входов зовутся из движковогоhist-gate.js, второй
реализации не заведено. Формула доли времени вне позиции вынесена туда же из
hist-sellhedge.mjs: её печатают два стенда, а две копии одной формулы расходятся молча. -
[BTC-Options] Стенд продавца научился идти мелким кадансом, и часовая запись оказалась
оптимистичной втрое. Полоса хеджа 0.03 BTC на контракт выбрана перебором по ЧАСОВОЙ записи, а
живой бот переоценивает позицию раз в 15 секунд: часовая сетка не может дать больше 24
пересечений полосы в сутки по построению. Ключ--fineподаёт протяжке наблюдённый путь индекса
из кэша поштучных сделок (index_priceна каждом принте), а волатильность и базис форварда
по-прежнему берутся из часовой записи: полосу пересекает движение индекса, а греки меняются
медленно. Дельта на мелком шаге ПЕРЕСЧИТЫВАЕТСЯ Блэком-76 от наблюдённого индекса, а не
протягивается между часами: протяжка монотонна по построению, а перекладки создаёт ровно
немонотонность внутри часа. Выход сделки оценивается часовым снимком, то есть той же ценой, что
у часового прогона, поэтому между двумя прогонами меняется ТОЛЬКО хедж: статья «премия минус
выкуп» в обоих 14811 до доллара.Что это показало на пяти годах при живой мейкерской ставке 0.015%: рост залога ×32.84 на часовом
шаге против ×9.36 на настоящем, перекладок 5996 против 17842. Но подорожали не комиссии, а
ГАММА: комиссии выросли на $2765, а сама нога хеджа упала с +35142 до +24267, то есть на $10875.
Часовая сетка не видит внутричасовых разворотов, за которые короткий опцион платит, и потому
показывает хедж лучше, чем он есть.Восстановление сверено с живой записью тиков: на окне сделки 2 оно даёт 634 перекладки против
633 у бота и оборот 1.212 BTC на контракт в сутки против 1.187, а восстановленная дельта против
дельты биржи на одних метках расходится на 0.00066 по медиане при суммарном движении
шаг-к-шагу 41.57 против 39.91, то есть лишнего дрожания 4.2%.Цена: два новых стенда (
hist-index-path.mjsразбирает 568 МБ принтов в таблицу пути один раз,
hist-fine-band.mjsсчитает пересечения полосы для произвольной позиции), сетка стоимостей в
--band-sweepдополнена живой ставкой 0.015%, просадка в ней читается там же, а не при нуле.
Без ключа--fineни одна новая ветка не исполняется: шесть книг охраны снялись побитово теми
же, тестов 1177. -
[BTC-Options] Оценщик ускорения оборота тоже пошёл мелким кадансом, и заголовочный
пятилетний рост боевой схемы уполовинился.eval-accel.mjsполучил тот же ключ--fine, что и
эталон, плюс ключ--band: полоса хеджа это константа схемы, и проверить её на БОЕВОМ правиле
размера (автономная стресс-маржа X=45, cap=0.8) иначе было нечем, потому что у эталона правило
размера другое. Протяжка мелкой сеткой добавлена обоим путям стенда, одиночной ноге и стрэнглу; у
пары обе ноги считаются от одного наблюдённого индекса и складываются тем же движковым
stranglePrice, каким их складывает часовой прогон.Перенос проверен двумя способами, а не обещанием. При выключенном ключе вывод ВСЕХ четырёх
режимов на двух записях совпал с версией до правки, кроме двух строк, добавленных в сам отчёт
(название каданса и подсказка про ключ). А часовой путь воспроизводит канонические числа проекта:
при нулевой комиссии и стресс-размере X=45 cap=0.8 выходит ×4.12 при пике маржи 73.9% и нуле
ликвидаций, то есть ровно константа из шапки схемы, а при живой ставке 0.015% выходит ×3.56, то
есть ровно число аудита 22.09.Что показала база стрэнгла (84 сделки, пять лет, счёт $20 000, стресс-размер X=45 cap=0.8):
×4.12 при нуле и часовом шаге, ×3.56 при живой ставке и часовом шаге, ×3.08 при нуле и настоящем
кадансе, ×2.15 при живой ставке и настоящем кадансе. То есть заголовочное число держалось на ДВУХ
допущениях сразу: бесплатный перп стоит 13.6% результата, каданс 25.2%, вместе 47.8%. Хвост при
этом не ухудшается: пик маржи 74.5% против 73.9%, ликвидаций ноль, тиковая просадка даже меньше
(7.7-8.1% против 9.0-9.1%), потому что частый хедж держит дельту ближе к нулю.Попутно починен курсор шагов в портфельном режиме лестницы: он искал ТОЧНОЕ совпадение метки шага
с меткой записи, и на мелком кадансе не нашёл бы ни разу, а портфель шёл бы с нулевым МтМ обеих
цепочек и напечатал бы таблицу, неотличимую от настоящей. Теперь курсор идёт до последнего шага
не позже метки; на часовом кадансе это прежнее поведение до бита. Пик маржи самой лестницы
остаётся часовым, и отчёт это называет.Цена: без ключа
--fineни одна новая ветка не исполняется, шесть книг охраны побитово те же,
тестов 1177. -
[BTC-Options] Разбор таблицы пути индекса сведён в один модуль на оба стенда. Ключ
--fineпоявился сперва у эталона одной ноги (hist-sellhedge.mjs), потом у оценщика ускорения
(eval-accel.mjs), и чтение двоичной таблицы пути индекса оказалось скопировано в оба скрипта
слово в слово. Формат неразмеченный: если одна копия однажды прочтёт поле другой ширины, прогон
не упадёт, а напечатает другие цены и другую частоту перекладок. Поэтому разбор и поиск шага по
метке времени вынесены вotmscan/hist-index-path.js, и оба стенда его импортируют. Чужой или
оборванный файл теперь называет себя в сообщении об ошибке: сколько шагов обещает заголовок, на
сколько хватает байт и какой это файл. Числа обоих стендов после переноса те же, что в записях
выше, а в приложении этот модуль не исполняется. -
[BTC-Options] Три направления, где у схемы продавца могла уцелеть премия за волатильность,
замерены и закрыты ситами. С 2024 года разница между проданной подразумеваемой волатильностью и
реализованной у BTC сжалась, и база стрэнгла даёт на истории 4-6% в год. Проверялось, осталась ли
премия на стороне путов, на опционах эфира или только после встрясок. Планка записана до первого
прогона (протоколbot2-предрегистрация-трёх-направлений-2026-09-24.md, внутренний каталог проекта
вне репозитория): живое ожидание не ниже 10% годовых, то есть на стенде не ниже 16.8% годовых на
второй половине записи (2024-02-10..2026-08-12) при мелком кадансе, мейкерской комиссии и боевом
стресс-правиле размера. Доходность стенда переводится в живую поправкой на обратную цепочку (×0.69)
и на простой линейной цепочки (×0.864).Путы. На второй половине пут соло при боевом размере потерял на |дельте| 0.45 и 0.25 (×0.99 и
×0.94 за 2.5 года) и заработал ×1.06 на 0.35, а колл соло на тех же дельтах дал ×1.14-1.17.
Стресс-правило берёт худшую из двух сторон хода спота, поэтому любая смесь коллов и путов
зарабатывает на единицу стресса не больше чем вдвое против лучшей одиночной ноги; лучшая нога дала
6.5% в год, и граница с запасом на неттинг хеджа, 14.9%, ниже планки. Скос на входе итог пута не
предсказывает.Эфир. Премия DVOL над реализованной за следующие 30 суток по одним и тем же дням: +0.6 пункта у
эфира против +3.3 у BTC на второй половине записи, выше у эфира только в 2026 году.После встрясок. Шесть сигналов на входе (процентиль DVOL за 90 суток, изменение DVOL за 7 и 14
суток, DVOL минус реализованная за прошлые 30 суток, наклон кривой сроков, скос); ни один не держит
ранговую корреляцию +0.30 с итогом сделки на обеих половинах записи, а процентиль за 90 суток даёт
+0.34 на первой и -0.21 на второй. Даже гейт, заранее знающий итог каждой сделки, при боевом
размере дал бы 15.8% в год.Для замера
eval-accel.mjsполучил ключ--delta: целевая |дельта| всех цепочек прогона, то есть
существующий параметр схемыdeltaTarget, правило выбора ноги прежнее. Посделочная выгрузка
дополнена спотом и ногами на входе, стресс-маржой на контракт при ходе ±45% и долей счёта в залоге
при стресс-правиле базы, без округления лотов. Без ключа вывод совпадает с прежним до строки, с
--delta 0.45таблицы и дамп те же; тестов 1181, шесть книг охраны побитово те же. Отчёт:
ОТЧЁТ-бот2-три-направления-2026-09-24.mdтам же. -
[BTC-Options] Стоп по марже судит по капиталу счёта, не сгорает на неудачном закрытии и
срабатывает при капитале ниже нуля. Живое правило выхода закрывает сделку, когда поддерживающая
маржа проданных опционов достигает 60% капитала счёта. Внешняя проверка выгрузки бота 2 от 23.09
нашла в нём три дефекта, все три воспроизведены движком на копии живого состояния.Знаменатель. Правило делило маржу на капитал, в котором результат сделки уже учтён, и прибавляло к
нему ещё раз реализованную часть результата. На срезе 23.09 оно видело 24.94% вместо 24.01%, у
сделки 1 держалось ниже настоящей загрузки на 2.5 пункта, а при распродаже хеджа перед экспирацией
04.09 показывало 66.8% при настоящих 98.8%. Теперь в предикат идут капитал на начало сделки и её
полный МтМ, как в офлайн-замере, и их сумма равна капиталу изaccount(). Тик без цены перпа при
открытом хедже правило, читающее капитал, больше не судит: в таком тикеaccount()теряет
переоценку хеджа.Закрытие. Затвор записывался сработавшим до попытки закрыть сделку, и если у перпа не было цены,
правило молчало до экспирации без строки в журнале. Теперь сработавший затвор записывается только
вместе с исполненным выходом, и следующий тик решает заново.Капитал ниже нуля. Предикат отвечал «стопа нет» на любой неположительный капитал, теперь он молчит
только при неизвестном.Комментарий правила описывает то, что происходит: затвор band считает шаги, и живой бот выходит
через 15 секунд после первого пробоя, а не через два часа, как в часовом замере 2026-08-28.
Поведение не менялось. Прогон пяти лет по пути индекса с шагом 15 секунд дал у стрэнгла те же 4
выхода из 84 сделок, что и два часовых наблюдения, при росте 0.972 от базы против 0.980. Тестов
1187, шесть книг охраны побитово те же. ОтчётОТЧЁТ-бот2-проверка-внешнего-аудита-2026-09-24.md
во внутреннем каталоге проекта вне репозитория.