От относительной силы к портфелю
Стратегия сравнивает активы между собой. Лидеры — монеты с более сильной динамикой после поправки на движение BTC и собственный остаточный риск; аутсайдеры — с более слабой. Long-корзина получает лидеров, short-корзина — аутсайдеров. Лидер может падать медленнее рынка, а аутсайдер — расти слабее него.
Базовая гипотеза: различия в относительной динамике могут сохраняться. Результат зависит от того, продолжат ли выбранные лидеры опережать выбранных аутсайдеров после комиссий, funding и издержек исполнения. Это проверяемая гипотеза, а не установленная гарантия прибыли.
Данные и отбор инструментов
В текущем наборе — 58 криптоактивов; BTC используется как рыночный ориентир. Расчёт работает с закрытыми часовыми свечами. Из 721 цены закрытия получаются 720 часовых доходностей для оценки риска, а сигнал использует последние 168 часов.
Кандидаты проходят фильтры: beta к BTC от 0,2 до 3,0, ненулевая остаточная волатильность и положительный объём минимум у 90% свечей последнего 720-часового окна. Отбираются пять лидеров и пять аутсайдеров. Если пригодных активов меньше десяти, формируется нулевая цель, которая может требовать сокращения текущих позиций.
Пропуски или несогласованность данных основных активов или BTC блокируют расчёт. Фильтр объёма не гарантирует достаточную глубину стакана для любого размера капитала.
Всего 58 монет: 50 основных и 8 дополнительных — ETHFI, RIVER, AVNT, 币安人生, JUP, 牛来, PONS, MARSCOIN. BTC служит отдельным бенчмарком и не входит в эти 58. Дополнительный актив участвует при полной часовой истории, обороте за 24 часа не менее 50 000 USDT и спреде не более 0,5%. При отсутствии истории или прохождении фильтров с ошибкой он исключается из текущего отбора; ошибка основных активов или BTC блокирует расчёт. Если по дополнительной монете уже есть позиция, отсутствие её истории блокирует новый план. Для дополнительных монет также проверяются доступность в каталоге и настроенное плечо; фильтр ликвидности повторяется перед входом. Все 58 монет относятся к одному портфелю и общему бюджету риска.
Как рассчитывается сигнал
Для каждого актива оценивается beta — чувствительность часовой доходности к BTC. Из недельной логарифмической доходности актива вычитается недельная доходность BTC, умноженная на beta. Остаток нормируется на стандартное отклонение остаточных часовых доходностей и корень из 168.
Таким образом, ранжирование учитывает и движение рынка, и риск актива. Знак сигнала не определяет сторону сам по себе: стратегия выбирает относительную верхнюю и нижнюю пятёрки.
Как распределяется капитал
Сила сигнала определяет состав кандидатов. Веса рассчитываются отдельно: оптимизатор минимизирует оценённую дисперсию портфеля с учётом ковариации исходных доходностей. Матрица риска смешивает 75% выборочной ковариации и 25% её диагонали.
Сумма абсолютных модельных весов равна 100% целевого суммарного номинала портфеля; доля одного актива ограничена 15% этого номинала. Расчётная суммарная beta к BTC равна нулю. Некоторые из десяти кандидатов могут получить нулевой вес.
Нулевая beta не требует одинаковых сумм long и short. Она снижает оценённую зависимость от одного фактора, но не устраняет риск: связи между активами меняются, а исполненный портфель может отличаться от расчётного.
Номинал, плечо и размер позиций
Текущая настройка целевого суммарного номинала — 10× выделенного капитала. При выделении 1 000 USDT модель стремится к сумме абсолютных long- и short-позиций около 10 000 USDT, с лимитом 1 500 USDT на один актив. Эти 10 000 USDT относятся ко всему портфелю; доли long и short определяет оптимизатор.
Биржевое плечо — 20× по умолчанию, для AVNT — 10× на обеих сторонах. Маржа считается отдельно по плечу каждого актива; при наличии AVNT оценка всего портфеля как G/20 неверна.
Перед исполнением проверяются фактическое плечо, доступная маржа, резерв расходов 2% выделенного капитала и лимит маржи 90% эквити счёта. Размеры округляются до допустимых контрактов с повторной проверкой рисков. Если целевой портфель не помещается в бюджет, новые открытия блокируются.
Фактический объём может быть меньше цели из-за подтверждения состава, лимитов риска, минимального размера ордера и частичных исполнений. Большой номинал усиливает влияние рыночных движений и издержек на капитал; нейтрализация beta не устраняет этот риск.
Ежечасный пересчёт и исполнение
После закрытия каждого часа UTC стратегия обновляет данные, ранжирует активы и пересчитывает целевые веса. Например, после закрытия свечи 11:00–12:00 UTC рассчитывается цель на 12:00 UTC. Ротация работает в течение суток по часовому расписанию.
Для включения нового актива на выбранную сторону требуется подтверждение в двух последовательных часовых отборах. Текущий состав удерживается при кратковременном выпадении из рейтинга; изменение состава также зависит от фильтров пригодности. При неполной корзине отдельно подтверждённые активы могут набираться до своих долей полной raw-модели после проверки округления; доли отсутствующих не перераспределяются. Веса полного подтверждённого состава пересчитываются каждый час, даже если сами активы не сменились.
Движок поддерживает одну актуальную цель и постепенно приводит к ней позиции. Пересчёт не означает полное закрытие и повторное открытие портфеля каждый час. В обычной корректировке ненулевой позиции отклонения меньше 1% выделенного капитала пропускаются; для удаления позиции и защитных сокращений действуют отдельные правила.
Основной способ исполнения — лимитные заявки post-only с корректировкой цены. Настроено до 4 часов пассивного входа и до 2 часов пассивного сокращения, затем допускаются IOC-заявки с ограничением цены при сохранении разрешения и прохождении проверок риска. Обычная дочерняя заявка ограничена номиналом 10% выделенного капитала. Фактическое исполнение может занимать несколько часов и не гарантируется к фиксированному сроку.
Каждая новая часовая цель учитывает уже исполненные объёмы и действующие переходы. Движок сохраняет намерения заявок, сверяет счёт и контролирует beta, маржу и общий номинал. Неизвестный результат отправки сначала требует сверки с биржей.
Защита и её границы
В описываемой конфигурации аварийный порог — накопленный торговый убыток 10% первоначально выделенного капитала. Это не максимальная просадка 10% от достигнутого пика и не гарантия закрытия ровно по порогу.
Например: при старте с 1 000 USDT и росте до 1 500 USDT исходный порог без денежных потоков остаётся около 900 USDT. Потеря от максимума к этому уровню составит 40%. Проверка зависит от корректного учёта результата и работы процесса; управляемые биржевые TP/SL в этой конфигурации не включены.
Сохраняются риски рынка, ликвидации, ликвидности, funding, проскальзывания, биржи и сбоев исполнения. Копирование может дать иной результат, чем ведущий счёт. Технические тесты подтверждают отдельные свойства реализации, а не прибыльность.
Копитрейдинг: условия участия
Копитрейдинг доступен через профиль трейдера на HTX. Абонентской платы нет; вознаграждение составляет 25% прибыли. Торговые комиссии и funding учитываются отдельно. «Без абонентской платы» не означает отсутствие всех расходов.
Перейдите в профиль, проверьте отображаемую долю прибыли и правила её расчёта, доступность подключения, ограничения и параметры копирования. Выберите выделяемую сумму и подтвердите подключение на стороне HTX. Расчётный период, базу распределения прибыли и учёт предыдущих убытков определяют условия платформы; эта страница не подменяет их.
Не нужно разворачивать собственный экземпляр бота для подключения через интерфейс копитрейдинга. Результат подписчика может отличаться из-за времени подключения, размеров позиций, округления, комиссий и исполнения.
Публикация стратегии и дальнейшие планы
На странице описана часовая версия RS Rotation V2. Параметры и логика сверены с текущей конфигурацией проекта 14 сентября 2026 года: окно риска 720 часов, сигнал 168 часов, пять кандидатов с каждой стороны и ежечасный пересчёт. Исходный код планируется опубликовать на GitHub в числе нескольких стратегий для движка CROT. Ссылка на новую стратегию появится после публикации.
Публичный репозиторий CROT, доступный в меню сайта, относится к уже опубликованному проекту. До выхода новой стратегии он не является ссылкой на её исходный код. Здесь не приводятся неподтверждённые показатели доходности или бэктеста.
Полный регламент: все правила и формулы
Срез исходников и настроек — 14 сентября 2026. Ниже — воспроизводимые формулы и фактические условия, включая блокировки и ограничения.
1. Версия и обозначения
Проверено по исходникам и настройкам проекта 14 сентября 2026 года. Плагин rs_rotation_v1, модель original_cov_720h_168h_top5_hourly_v2, политика continuous_target_v2. URL не содержит версии; старый адрес перенаправляет кодом 301. Это описание проверенного кода, а не подтверждение загрузки всех настроек ведущим счётом или их воспроизведения подписчиком.
E — текущая equity всего счёта; f — выделяемая доля; A — выделенный капитал; G — целевой абсолютный номинал обеих сторон вместе; A₀ — первоначально выделенный капитал. q измеряется в контрактах, c — количество базового актива в контракте. BTC — только бенчмарк.
A = fE; G = kA
f = 1; k = 10; L_i = 10 for AVNT; 20 otherwise
A₀ persists; it is not a high-water mark 2. Полный universe и данные
Всего 58 монет: 50 основных и 8 дополнительных — ETHFI, RIVER, AVNT, 币安人生, JUP, 牛来, PONS, MARSCOIN. BTC служит отдельным бенчмарком и не входит в эти 58. Дополнительный актив участвует при полной часовой истории, обороте за 24 часа не менее 50 000 USDT и спреде не более 0,5%. При отсутствии истории или прохождении фильтров с ошибкой он исключается из текущего отбора; ошибка основных активов или BTC блокирует расчёт. Если по дополнительной монете уже есть позиция, отсутствие её истории блокирует новый план. Для дополнительных монет также проверяются доступность в каталоге и настроенное плечо; фильтр ликвидности повторяется перед входом. Все 58 монет относятся к одному портфелю и общему бюджету риска.
История содержит 721 закрытую часовую свечу на каждый включённый актив и BTC: H = 721×(n+1)×6, где 50≤n≤58. При всех 58 активах: 721×59×6. Поля: время открытия, open, high, low, close, volume. Свечи должны быть конечными, согласованными и без пропусков; OHLC>0, volume≥0. Подстановка отсутствующих свечей не допускается. Порядок: основные активы, доступные дополнительные, BTC последним.
ETH SOL XRP DOGE BNB ADA SUI HYPE PEPE ZEC
LTC FIL WLD TRX XAUT LINK ENA BCH ARB NEAR
TRUMP DOT DASH SHIB WIF ASTER GRAM UNI AVAX ONDO
ORDI ETC OP TAO XLM ATOM XMR FLOKI BEAT FARTCOIN
APT PUMP ICP TIA PENGU LIT PEOPLE AAVE BONK SUSHI
ETHFI RIVER AVNT 币安人生 JUP 牛来 PONS MARSCOIN
D mod 3600 = 0
timestamps = D−721h, …, D−1h
high ≥ max(open,low,close); low ≤ min(open,high,close)
input_hash = SHA256(H: little-endian float64, C order)
spread = (ask-bid)/((ask+bid)/2) ≤ 0.005
optional turnover_24h ≥ 50000 USDT
ticker age ∈ [−5, 30] seconds 3. Доходности, beta и остаточный риск
P — цены закрытия, B — BTC. Риск оценивается по 720 простым часовым доходностям. Выборочные оценки используют ddof=1 (знаменатель 719); beta оценивается с центрированием. Дисперсия BTC<10⁻¹² блокирует расчёт. Остаток e не включает отдельный intercept/alpha; σ — его часовая стандартная девиация, без годового пересчёта.
rₜ,ᵢ = Pₜ,ᵢ/Pₜ₋₁,ᵢ − 1, t=1,…,720
r̄ᵢ = Σₜrₜ,ᵢ/720
vB = Σₜ(rₜ,B−r̄B)²/719
βᵢ = [Σₜ(rₜ,ᵢ−r̄ᵢ)(rₜ,B−r̄B)/719]/vB
eₜ,ᵢ = rₜ,ᵢ−βᵢrₜ,B
σᵢ = sqrt[Σₜ(eₜ,ᵢ−ēᵢ)²/719] 4. Score и фильтры пригодности
Сигнал использует лог-доходность за 168 часов, а beta/σ — простые доходности за 720 часов. Это точная смесь реализации, не единая регрессия лог-доходностей. Score не прогноз доходности или вероятности успеха.
Пригодность: β∈[0,2;3], σ строго >10⁻⁶ и volume>0 минимум у 90% последних 720 свечей. Корректный, но непригодный инструмент остаётся во входе. Funding и глубина стакана не включены в score.
Lᵢ = ln(P_last,ᵢ/P_last−168,ᵢ)
scoreᵢ = (Lᵢ−βᵢLB)/max(σᵢ,10⁻⁶)/sqrt(168)
eligible = finite(β) AND 0.2≤β≤3 AND σ>10⁻⁶
AND count(volume>0)/720 ≥ 0.90 5. Отбор и равные ранги
При менее десяти пригодных возвращается нулевая цель insufficient_eligible, которая может закрывать позиции. Ошибка данных/solver не превращается в flat: новая цель не публикуется.
Стабильная сортировка score по возрастанию: short — первые пять, long — последние пять в обратном порядке. При равных score действует порядок universe с разворотом long-хвоста. Знак score не фильтр. Нулевой QP-вес не исключает raw-кандидата.
rank = stable_argsort(score[eligible])
short = rank[:5]; long = reverse(rank[−5:])
selected = long + short
s = (+1,+1,+1,+1,+1,−1,−1,−1,−1,−1) 6. Ковариация и задача оптимизации
S рассчитывается по исходным простым доходностям активов, не остаткам e. Матрица смешивает 75% S и 25% диагонали. x — абсолютные доли G, w=s⊙x. Score определяет кандидатов, но отсутствует в objective: нет бонуса momentum, штрафа оборота, прогноза funding или оптимизации ожидаемой прибыли.
Нулевые веса допустимы, long/short не обязаны иметь одинаковый долларовый номинал. Нет fallback на равные веса или простую волатильность.
Sᵢⱼ = Σₜ(rₜ,ᵢ−r̄ᵢ)(rₜ,ⱼ−r̄ⱼ)/719
Σ = 0.75S + 0.25diag(diag(S))
Q = Σ_selected ⊙ (ssᵀ)
minimize 0.5xᵀQx
subject to Σxᵢ=1; Σsᵢβᵢxᵢ=0; 0≤xᵢ≤0.15
w=s⊙x 7. Численный протокол solver
Ровно 10 переменных, матрица 10×10, стороны 5+/5−, конечные значения, β∈[0,2;3]. Симметрия allclose: atol=10⁻¹², стандартный rtol=10⁻⁵; min eigenvalue≥−10⁻¹². Нормировка Q и 10⁻¹⁰I — численная регуляризация. Если начальная точка превышает cap+10⁻¹², блокировка, даже если существует другая допустимая точка.
После solver allocate повторно проверяет finite, |gross−1|≤10⁻⁸, |w·β|≤10⁻⁸, cap≤0,15+10⁻⁹ и направление wᵢsᵢ≥−10⁻¹⁰. Ошибка/несходимость не даёт упрощённого портфеля. Preset должен целиком совпадать с параметрами модели.
Q̃ = Q/max(max(diag(Q)),10⁻¹²) + 10⁻¹⁰I
bL=mean(β_long); bS=mean(β_short)
x_long=bS/[5(bL+bS)]; x_short=bL/[5(bL+bS)]
C=[1ᵀ; (s⊙β)ᵀ]; Cx=(1,0)ᵀ
repeat at most 500 iterations:
F = non-active coordinates; require |F|≥2
g=Q̃x
solve [Q̃_FF C_Fᵀ; C_F 0][d_F;λ]=[−g_F;0;0]
using least squares, rcond=10⁻¹²; d_active=0
if max|d|<10⁻¹⁰:
z=g+Cᵀλ
violation=−z_j at lower bound, +z_j at upper
if no active bounds or max violation<10⁻⁹:
clip x to [0,0.15]
require max|Cx−(1,0)|≤10⁻⁸, max(x)≤0.15+10⁻¹⁰
return x
else release most violated bound
else:
step starts at 1, reduced to first bound along d
|d_j|≤10⁻¹² does not set a bound
x←x+step*d; activate bound reached
otherwise: OptimizationBlocked 8. Подтверждение состава
Только D−3600 — соседний отбор. По каждой стороне сначала сохраняются прежние пригодные участники, присутствующие в текущем или предыдущем raw; затем добавляются новые из обоих raw. Старые имеют приоритет; максимум пять. Первое выпадение сразу снимает поддержку входа, два соседних выпадения удаляют accepted. Потеря eligibility удаляет немедленно.
После разрыва часов пригодные старые удерживаются, новые подтверждения начинаются заново. При пересечении сторон сохраняется прежняя (поиск long перед short). Новый вход требует supported, ненулевой raw-вес правильного знака и flat противоположной стороны. Пропущенные часы не доторговываются.
adjacent = previous.D==D−3600
raw_prev = previous.raw if adjacent else empty
kept = previous.accepted ∩ eligible, filtered by
(in raw_now OR in raw_prev OR NOT adjacent)
new = raw_now ∩ raw_prev ∩ eligible, excluding kept
accepted = first 5 of kept+new, per side
supported = accepted ∩ raw_now ∩ raw_prev
degraded = either accepted side has fewer than 5 9. Полная и частичная корзина
Полные accepted 5+5: QP пересчитывается на этом составе по текущей матрице, даже при отличающемся raw. Увеличения всё равно требуют supported и raw-веса правильного знака.
При неполном составе неподдержанным удерживаемым сохраняется текущий объём, удалённым — ноль. Отдельные supported могут получить свои доли из полного текущего raw-QP после полной проверки округления. Отсутствующие доли не перераспределяются (confirmed_raw_targets_v1). Фактическая корзина может быть меньше 5+5 и целевого gross.
Ошибка округления полной raw-цели блокирует выдачу новых частичных целей, но сохраняет удержания и удаление исключённых. Ошибка полной accepted-модели не заменяется частичным fallback.
10. Размер контракта и округление
Последний close — reference p. q округляется вниз по шагу; это контракты, не монеты. Проверяются биржевые минимумы количества и номинала; остатки не перераспределяются. ŵ нормирован на G, но beta после округления — на A. При k=10 допуск 0,03 от A означает 0,003 от G.
Полная цель требует gross 98–100% G, обе стороны и cap 15% G. Нулевой insufficient_eligible освобождён от этих проверок. Частично исполненный портфель не обязан иметь gross≥98% G.
qᵢ=sign(wᵢ) floor_step(|wᵢ|G/(pᵢcᵢ))
ŵᵢ=qᵢpᵢcᵢ/G
0.98≤Σ|ŵᵢ|≤1+10⁻⁸; max|ŵᵢ|≤0.15+10⁻⁹
β_A,target=(G/A)Σŵᵢβᵢ; |β_A,target|≤0.03
exists ŵ>0 AND exists ŵ<0 11. Маржа и номинал
При E=A=1 000 USDT, k=10: G=10 000, cap актива 1 500; L=20 даёт около 500 начальной маржи плюс 20 резерва: 520≤900. Это расчёт, не гарантия доступности биржевой маржи. Плечо не умножает G повторно.
Даже пустая/частичная цель проверяется по полной модели. Берётся максимум маржи полной модели и сохранённых контрактных целей плюс резерв. Падение equity не уменьшает старые контракты автоматически. Неизвестный состав/плечо означает недоступную оценку, не ноль.
G_used и M_used включают позиции и remaining открывающих заявок по max(цена заявки, текущая цена). Закрывающие заявки не освобождают бюджет до доказанного fill. Все лимиты повторно проверяются перед отправкой.
Биржевое плечо — 20× по умолчанию, для AVNT — 10× на обеих сторонах. Маржа считается отдельно по плечу каждого актива; при наличии AVNT оценка всего портфеля как G/20 неверна.
R=0.02A; margin_limit=0.90E
M_model=Σ|wᵢG|/Lᵢ; M_contracts=Σ|qᵢpᵢcᵢ|/Lᵢ
max(M_model,M_contracts)+R≤0.90E
Opening order added notional N:
M_used+N/L+R≤0.90E; N/L+R≤available_margin
G_used+N≤min(G_saved,10A_current,10.3E_current)
N_symbol+N≤0.15min(G_saved,10A_current) 12. Отклонения, deadband и порции
Разница цели и текущих контрактов вычисляется по каждой стороне. Обычная корректировка ненулевой цели пропускается при номинале разницы <1% A, по текущей цене и повторно по цене заявки. Нулевая цель, emergency и защитные сокращения обходят deadband.
Начальная порция ≤10% A, не G. Далее её ограничивают gross, cap, маржа, beta, шаг и closeable. Если после сокращения остаётся недопустимый малый остаток, можно закрыть всю позицию больше обычной порции, только в пределах требуемого сокращения и жёсткой beta. Чужой объём не присваивается; available/frozen не вычитаются дважды.
Δq_side=q_target,side−q_current,side
ordinary nonzero target: skip if |Δq|pc<0.01A
q_child≤min(|Δq|,0.10A/(p_order c))
close_capacity=max(0,min(position.available,
position.size−remaining_close_orders)) 13. Beta и любые частичные исполнения
B_A нормируется на текущий A, не G. Pending считаются с независимым исполнением любой части: buy даёт положительное, sell отрицательное приращение независимо от open/close. Для заявки берётся max(order price, current price).
Жёсткий диапазон ±0,10; обычная порция выбирается в ±0,09, оставляя 10% полосы на задержки и движение рынка. Финальный guard применяет ±0,10. Если исходная beta вне полосы, допустимо улучшение без худшего противоположного отклонения. Нарушение pending-полосы сначала отменяет крупнейший принадлежащий боту вклад в нарушенную границу, затем требует сверки.
B_A=Σsign(position)q c mark β/A
δ_o=sign(buy/sell)remaining_o c β max(order_price,current_price)/A
B_low=B_A+Σmin(0,δ_o); B_high=B_A+Σmax(0,δ_o)
L=min(−tolerance,B_A); U=max(tolerance,B_A)
u=|cβ max(order_price,current_price)/A|
room=U−B_high (positive impact), B_low−L (negative)
q_allowed=floor_step(max(0,min(q_requested,room/u)))
existing envelope outside [L,U] → q_allowed=0
u<10⁻¹⁶ → floor_step(q_requested) 14. Пассивные цены и перестановка
b/a — лучший bid/ask, m — midpoint, σ — остаточная часовая волатильность. Начальное смещение фиксируется при создании перехода, затем линейно уменьшается по возрасту. Для сокращения с устаревшим планом или отсутствующим σ смещение нулевое.
Пассивный вход 14 400 с (4 ч), сокращение 7 200 с (2 ч), затем возможен IOC. Buy округляется вниз, sell вверх до тика. Вход ограничен ±0,3% от midpoint текущей H1-авторизации. Post-only, пересекающий стакан, блокируется.
Обычная перестановка только ближе к исполнению (buy выше, sell ниже), минимум 2 тика и спустя 120 с от последней отправки/перестановки. Потеря разрешения, несовместимая цель, смена фазы отменяются без этого ожидания.
m=(b+a)/2
o₀=min(0.001,max((a−b)/m,0.10σ))
o(t)=o₀[1−min(1,elapsed/T_passive)]
p_buy=floor_tick[b(1−o(t))]
p_sell=ceil_tick[a(1+o(t))]
entry buy≤m_auth*1.003; entry sell≥m_auth*0.997 15. IOC, авторизация и срок входа
IOC — лимитная заявка, остаток после доступного исполнения отменяется. Buy ограничен ask×1,001, sell bid×0,999, вход дополнительно ±0,3% midpoint H1. После округления buy<ask или sell>bid — блокировка, без market fallback.
До 3 IOC-попыток входа на авторизацию, интервал минимум 120 с. Новый подтверждённый H1 обновляет midpoint, срок и счётчик, но не arrival, начальное смещение или возраст. Вход истекает через 86 400 с. У обязательного выхода и emergency нет общего дедлайна; emergency повторяется не чаще 10 с.
Исчезновение raw и новое подтверждение могут начать новый эпизод. Существенная дополнительная цель после expiry разрешает только добавку, старый остаток хранится отдельно и не омолаживается. Обратный ход часов блокирует вход. Неизвестный submit сохраняет обязательства.
IOC buy=floor_tick(ask*1.001)
IOC sell=ceil_tick(bid*0.999)
entry buy=floor_tick(min(ask*1.001,m_auth*1.003))
entry sell=ceil_tick(max(bid*0.999,m_auth*0.997))
entry attempts/authorization≤3; entry age<86400s 16. Свежесть, очередь и цели
Новое D создаётся только внутри [D,D+3600), повтор уже обработанного D запрещён. Срок разрешения входа D+3720; без новой цели после него входы блокируются и resting entry отменяются. Допустимые выходы и защита продолжают обслуживаться.
Public worker проверяет перекрытие истории и атомарно публикует полное окно; точные входы архивируются с SHA-256. В действующем runtime снимок и стакан не старше 30 с; отрицательный возраст запрещён. Экономическая выписка для входа проверена не более 120 с назад.
Одна ordinary-заявка на инструмент/сторону. Очередь — самый давно обслуженный допустимый переход, затем сокращение, меньшая итоговая |beta|, символ. Перестановки в той же очереди. При защите сначала |beta|. Обычный выход не запрещает все остальные входы глобально.
new plan: D≤now<D+3600
entry expiry=D+3600+120
0≤book_age≤30s; 0≤snapshot_age≤30s
normal priority=(last_service,reduce_before_open,|beta_after|,symbol)
protective priority=(|beta_after|,reduce_before_open,symbol) 17. Защита по beta, gross и марже
Защита включается при emergency, |B_A|>0,10, превышении gross или M_used+R>90% E. Новых открытий нет; сокращения IOC приоритетны. Модельная цель хранится отдельно от защитного исполнения.
Gross/маржа уменьшаются пропорционально; позиция, увеличивающая избыточную beta, дополнительно сокращается к половине полосы (0,05). Объём ограничивается позицией, затем closeable, ценой и beta-конвертом. Перед отправкой причина защиты проверяется заново.
G_limit=min(10.3E,1.03*10A)
z=min(1,G_limit/max(G_used,10⁻¹²),
max(0,0.90E−R)/max(M_used,10⁻¹²))
q_reduce=q_position*(1−z)
if sign(position)βᵢB_A>0 and |B_A|>0.10:
q_reduce=max(q_reduce,(|B_A|−0.05)A/(mark*c*|βᵢ|))
emergency: q_reduce=q_position
q_reduce=min(q_position,q_reduce) 18. PnL, funding и денежные потоки
Реализованный результат восстанавливается из подтверждённых исполнений с усреднением цены по стороне и защитой от повторных receipts. Закрытие сверх доказанного остатка блокирует учёт. Комиссия — положительный расход, rebate отрицательный. Открытый PnL — по текущим позициям. Funding суммируется со знаком по проверенным записям, cashflows отдельно.
Wallet сверяется через equity и unrealized одного ответа баланса, не mark разных REST-снимков. Разрыв >0,01 USDT, неподтверждённые комиссии/несвежие выписки блокируют вход. Пополнение не PnL и не сбрасывает A₀. Оборот — сумма qpc всех fills. Диагностические maker/taker определяются типами post-only/IOC, не гарантированной биржевой классификацией.
avg_new=(q_old*avg_old+q_fill*p_fill)/(q_old+q_fill)
PnL_close=sign(side)q_fill*c*(p_fill−avg_entry)
PnL_open=Σsign(side)q_position*c*(mark−entry_price)
PnL_trade=PnL_realized+PnL_open−fees+funding
expected_equity=E₀+PnL_trade+cashflows
wallet_gap=(E−U_balance)
−(E₀−U_balance,0+PnL_realized−fees+funding+cashflows)
|wallet_gap|≤0.01 USDT 19. Аварийный убыток: точная граница
Триггер — накопленный торговый PnL≤−10% A₀. Не trailing stop и не максимум просадки от пика. A₀=1 000, рост до 1 500 без cashflows оставляет порог около 900: падение от пика 40%. Gross 10A означает, что движение портфеля на 1% против него может стоить около 10% A до издержек.
Emergency сохраняется и ставит исполняемые цели в ноль; хороший score его не отменяет. Нет общего дедлайна, но остаются цена, closeable, beta и частота попыток ≥10 с. Это локальная best-effort защита, зависящая от процесса, сети, учёта и ликвидности; биржевые управляемые TP/SL выключены.
Если accounting выбрасывает ошибку, проверка loss недоступна в этом цикле и входы блокируются; самостоятельные beta/gross/маржа продолжаются при пригодном снимке. Неподтверждённый отчёт блокирует вход, но вычисленный отрицательный PnL всё ещё может вызвать emergency.
emergency ⇔ PnL_trade≤−0.10A₀
A₀ survives restart/checkpoint/recovery
A₀≠peak equity; A₀≠G
persist emergency; executable_targets←0 20. Журнал и блокирующие условия
До биржевого запроса сохраняется intent с уникальным client_order_id и fsync; затем повторно проверяются версия цели, emergency, цена, возраст, капитал, beta, маржа, ownership и объём. Неизвестный submit/cancel не повторяется вслепую и не освобождает резерв. REST orders/positions не атомарны; расхождение не доказывает ручное закрытие.
Вход блокируют чужие/неизвестные заявки, ownership mismatch, непроверенное состояние, неверный режим счёта, отсутствие leading-каталога, неподтверждённое настроенное плечо обеих сторон (AVNT 10×, остальные 20×), устаревшие данные, экономика, неподдержанный кандидат, противоположная позиция, маржа, лот, цена, beta/cap, expiry или обратный ход часов. Блокер входа не должен выключать допустимое сокращение известных объёмов.
Schema 2 хранит хеши/ревизии, membership, возраст/авторизацию, экономическую историю и A₀. Checkpoint после 128 intents — только без unknown и с пригодным receipt checkpoint; обязательства сохраняются. Начальная база требует чистого счёта и нового журнала. Старое состояние требует явного recovery, без автообнуления.
21. Ограничения и стоимость копирования
Ни доходность, ни отсутствие ликвидации, ни точные 10% максимального убытка не гарантированы. Историческая beta к BTC не устраняет другие факторы, смену корреляций, funding/basis, ликвидность и биржевой риск. Веса не оптимизируют оборот; фильтр объёма не оценивает ёмкость рынка. Касание цены H1-свечой не доказывает limit fill.
Правила и технические тесты не заменяют экономическую проверку. Исходники пока не опубликованы; документ раскрывает формулы и проверенный алгоритм, но не заменяет независимый аудит кода. История профиля может включать прежние версии.
Без абонентской платы, вознаграждение 25% прибыли, комиссии/funding отдельно. HTX определяет период, базу распределения и перенос убытков: формула «25% каждой прибыльной сделки» без проверки условий была бы необоснованной. Результат подписчика зависит от собственных fills и настроек.
22. Параметры модели и торговли
Доли без знака % записаны десятичными числами: 0.10 = 10%. Суффикс seconds означает секунды, ticks — минимальные шаги цены. max_passive_seconds ограничивает допустимую конфигурацию пассивной фазы, а не вводит отдельный дедлайн выхода в цикле. membership_confirmation_bars=2 и strict_target_margin_feasibility=true обязательны при валидации. max_ioc_attempts — сохранённый параметр дневного пути; в часовом пути действует max_ioc_attempts_per_authorization. Live/post-only/IOC-флаги — операторские разрешения, не доказательство успешного исполнения.
| Параметр | Значение | Единица / база |
|---|---|---|
model_version | original_cov_720h_168h_top5_hourly_v2 | — |
risk_hours | 720 | — |
signal_hours | 168 | — |
candidates_per_side | 5 | — |
weight_cap | 0.15 | — |
diagonal_shrinkage | 0.25 | — |
position_mode | dual_side | — |
asset_mode | 2 | — |
requested_leverage | 20 | notional / margin |
protection_mode | none | — |
max_margin_fraction | 0.9 | E |
max_gross_fraction | 10.3 | E |
capital_fraction | 1 | E |
target_gross_multiplier | 10 | G / A |
emergency_loss_fraction | 0.1 | A₀ |
cost_reserve_fraction | 0.02 | A |
beta_tolerance | 0.1 | beta-notional / A |
rounding_gross_min | 0.98 | G |
rounding_beta_tolerance | 0.03 | beta-notional / A |
ioc_slippage | 0.001 | bid / ask |
entry_deviation | 0.003 | H1 midpoint |
reprice_seconds | 120 | s |
poll_seconds | 10 | s |
accounting_tolerance_usdt | 0.01 | USDT |
entry_passive_seconds | 14400 | s |
exit_passive_seconds | 7200 | s |
entry_max_age_seconds | 86400 | s |
max_passive_seconds | 86400 | s |
signal_publish_grace_seconds | 120 | s |
child_order_max_equity_fraction | 0.1 | A |
rebalance_delta_equity_fraction | 0.01 | A |
initial_offset_max_fraction | 0.001 | bid / ask |
initial_offset_volatility_fraction | 0.1 | σ |
reprice_min_ticks | 2 | ticks |
strict_target_margin_feasibility | true | — |
membership_confirmation_bars | 2 | H1 |
max_ioc_attempts_per_authorization | 3 | — |
ioc_retry_seconds | 120 | s |
live_enabled | true | — |
post_only_open_confirmed | true | — |
post_only_close_confirmed | true | — |
ioc_confirmed | true | — |
max_ioc_attempts | 3 | — |
universe_count | 58 | — |
core_universe_count | 50 | — |
optional_universe_count | 8 | — |
leverage_override_AVNT | 10 | — |
optional_min_turnover_usdt_24h | 50000 | — |
optional_max_spread_fraction | 0.005 | — |
23. Источники и контрольные суммы
Хеши позволяют идентифицировать проверенный срез исходников. Они не являются аудитом исполнения на бирже и не раскрывают ключи или состояние счёта.
- strategies/rs_rotation_v1/signal_engine.py
1e8ab8ae76f5e6408ec95a83d8f19fd62c6c686d01650fcf0a2ed7bce924a8a8- strategies/rs_rotation_v1/plugin.py
88ee68a3bb86d9785dc233d98f1a91ee7d3c2d85101fcfb018d6931046fd9daa- strategies/rs_rotation_v1/parameters.toml
358014490dd8ac61526898b58933f1df2f34e1499ad98a1295dbb13be7537003- htxbot/portfolio_targets.py
232a1e43ab22309d7e2122de6a7d7759a7d7f93016087b3399f43e908e59654e- htxbot/portfolio_continuous.py
0f0e9bdf9eb802e484cb7a9070219bbdc97dff429d2572c2415be7e8084d0695- htxbot/portfolio_risk.py
29bc694ee279e058a4fb5a8317c94d08a749d997304a6b953b072b01fe2e7b3d- htxbot/portfolio_state.py
7350fec1a3319e679900bcf63d9629e5bd7796abfa7118764026ca224c7e16cb- htxbot/portfolio_engine.py
e54c8653f4efa342e3705cdddc4e8d84bb265df99958c4835fcd8213cabc966f- htxbot/copytrade_execution.py
530903e1684dacb158ac66f72debab06d8f42416ddb30cd352f1de02ddf10b20- htxbot/portfolio_runtime.py
fbb47883114e61679c282b5f25093b404ab9d6991240e1742f39d25adabc4484- htxbot/portfolio_history.py
08730a203490b7e0298eb0c466147eb2b9c9eacb93d602d37719735933d83396- copytrade_config.py
9c9e9ae67e25535f5f63c395b8997ab6bbc0d7debace7412094ec4c585a9bb27- htxbot/secondary_universe.py
838d47a30c91378244d41bbc2f174d5fff1c032a1b6274726c97cd36ab6e686c- config/copytrade.toml
f027564adbe3b7e0680184a0a63f6690bf5a7cd3216cd3b06bb98898360f75fa
Статистика и вопросы перед подключением
На 13 сентября 2026 года в публичном профиле CrotPro на HTX указана RS_ROTATION_V2. История профиля может включать предыдущие версии и настройки; её нельзя целиком относить к текущей конфигурации.
PnL — на сверке. Показатели доходности временно не публикуются: требуется сверка статистики HTX с историей сделок и пополнений. Пополнения счёта не являются торговой прибылью или убытком.
Проверить свежие данные в профиле HTX
Сравнивайте одинаковые периоды, дату начала наблюдения, число сделок, комиссии, funding и пополнения/выводы. Статистика ведущего счёта не определяет результат подписчика.
Как подключиться?
Откройте профиль HTX, проверьте доступность копирования для своего счёта, долю прибыли и правила расчёта. До подтверждения посмотрите, будут ли скопированы уже открытые позиции, какие лимиты и настройки применятся. Бот на собственном компьютере не требуется.
Как прекратить копирование?
Используйте управление подпиской на HTX. Перед подтверждением прочитайте, что произойдёт с уже открытыми позициями и ожидающими заявками: прекращение новых копий и закрытие позиций могут быть разными действиями. После операции проверьте позиции, заявки и итоговые начисления в своём счёте.
Почему мой результат отличается?
Влияют момент подключения, выделенная сумма, округление контрактов, ограничения счёта, частичные исполнения, проскальзывание, комиссии и funding. Сравнивайте одинаковые периоды после всех расходов и денежных потоков.
Подключение через HTX
Условия, параметры копирования и статистика ведущего счёта — в профиле трейдера.