← Home RS ROTATION V2 · HOURLY WEIGHT UPDATES

A long/short strategy: portfolio mathematics and a systematic approach

RS Rotation V2 builds a long/short portfolio from the relative strength of crypto assets and recalculates target weights every hour. Its approach resembles a quantitative hedge fund: a defined signal, optimized weights and portfolio risk controls.

No subscription fee · 25% profit share · Fees and funding separate

The hedge fund comparison describes the method, not the legal status of the product or a promise of returns.

Registering through the referral link supports the project. HTX invite code: 6hc25223.

Every hourtarget weight updates
5 + 5long / short candidates
10×target notional / capital
20× / 10×AVNT: 10×; others: 20×

From relative strength to a portfolio

Assets are ranked against one another. Leaders have stronger performance after adjusting for BTC movement and residual risk; laggards have weaker performance. Leaders enter the long basket and laggards enter the short basket. A leader may simply fall less than the market, while a laggard may rise less.

The hypothesis is that relative performance can persist. Returns depend on the chosen leaders continuing to outperform the laggards after fees, funding and execution costs. This is a testable hypothesis, not a proven guarantee of profit.

Data and instrument selection

The current universe contains 58 crypto assets, with BTC used as the market reference. The model uses closed hourly candles: 721 closing prices produce 720 hourly returns for risk estimation, while the signal covers the latest 168 hours.

Eligible assets need a BTC beta between 0.2 and 3.0, nonzero residual volatility and positive volume in at least 90% of the last 720 candles. The model selects five leaders and five laggards. With fewer than ten eligible assets, it returns a zero target, which can require reducing existing positions.

Missing or misaligned core-asset or BTC data blocks calculation. The volume filter does not guarantee sufficient order-book depth for every portfolio size.

There are 58 coins: 50 core assets and 8 optional additions — ETHFI, RIVER, AVNT, 币安人生, JUP, 牛来, PONS, MARSCOIN. BTC is a separate benchmark and is not one of the 58. An optional asset needs complete hourly history, at least 50,000 USDT of 24-hour turnover and a spread no wider than 0.5%. Missing history or failed filters exclude it from current selection; a core-asset or BTC data error blocks calculation. If an optional coin is already held, missing history blocks the new plan. Optional coins also require catalog availability and aligned leverage; liquidity is checked again before entry. All 58 coins share one portfolio and risk budget.

The signal calculation

For each asset, beta estimates the sensitivity of hourly returns to BTC. The signal subtracts beta times the weekly BTC log return from the asset’s weekly log return. It then divides the residual by the standard deviation of residual hourly returns and the square root of 168.

Ranking therefore adjusts for both market movement and asset risk. The signal’s sign alone does not determine the side: the model selects the relative top and bottom five.

Capital allocation

Signal strength selects candidates. Weights are determined separately by minimizing estimated portfolio variance using the covariance of raw asset returns. The risk matrix combines 75% sample covariance with 25% of its diagonal.

Absolute model weights sum to 100% of the portfolio’s total target notional; each asset is capped at 15% of that notional. Estimated aggregate beta to BTC is zero. Some of the ten candidates may receive a zero weight.

Zero beta does not require equal long and short notionals. It reduces estimated exposure to one factor, but does not eliminate risk: relationships change and executed positions can differ from the target.

Notional exposure, leverage and position sizing

The current total target notional is 10× allocated capital. With 1,000 USDT allocated, the model targets about 10,000 USDT of combined absolute long and short exposure, capped at 1,500 USDT per asset. The 10,000 USDT covers the entire portfolio; the optimizer determines the long/short split.

Exchange leverage defaults to 20×, with 10× for AVNT on both sides. Margin is calculated using each asset’s leverage; G/20 is not a valid portfolio estimate when AVNT is included.

Execution checks actual leverage, available margin, a cost reserve of 2% of allocated capital and a margin limit of 90% of account equity. Sizes are rounded to valid contracts and risk limits are checked again. New openings are blocked if the target portfolio does not fit the budget.

Actual exposure may be below target because of membership confirmation, risk limits, minimum order sizes and partial fills. Larger notional amplifies the effect of market moves and costs on capital; beta neutrality does not remove this risk.

Hourly updates and execution

After each UTC hour closes, the strategy refreshes its data, ranks assets and recalculates target weights. For example, the close of the 11:00–12:00 UTC candle provides the data for the 12:00 UTC target. Rotation follows this hourly schedule throughout the day.

A new asset must be selected on the same side in two consecutive hourly decisions before admission. Existing members can be retained through a brief ranking change; eligibility filters also affect membership. Individually confirmed assets may reach their full raw-model shares after rounding validation; missing shares are not redistributed. Weights of a complete confirmed basket are recalculated every hour even when its assets stay the same.

The engine maintains one current target and gradually moves positions toward it. An update does not require closing and reopening the entire portfolio each hour. Ordinary adjustments to a nonzero target position skip deviations below 1% of allocated capital; position removals and protective reductions follow separate rules.

Execution primarily uses post-only limit orders with price adjustments. Passive entry is configured for up to 4 hours and passive reduction for up to 2 hours, after which price-limited IOC orders may be used while authorization and risk checks remain valid. An ordinary child order is capped at 10% of allocated capital in notional. Execution may span several hours and is not guaranteed by a fixed deadline.

Each new hourly target accounts for completed fills and ongoing transitions. The engine persists order intent, reconciles the account and controls beta, margin and gross exposure. Unknown submission outcomes require exchange reconciliation first.

Protection and its limits

The described configuration has an emergency trigger at a cumulative trading loss of 10% of initially allocated capital. This is not a 10% maximum drawdown from the equity peak, nor a guarantee of an exit exactly at the threshold.

For example, after starting with 1,000 USDT and growing to 1,500 USDT, the original threshold remains about 900 USDT without cash flows. The decline from the peak to that level would be 40%. The check depends on accurate accounting and a running process; managed exchange-side TP/SL orders are not enabled in this configuration.

Market, liquidation, liquidity, funding, slippage, exchange and execution risks remain. Copy trading can differ from lead-account performance. Technical tests validate implementation properties, not profitability.

Copy trading terms

Copy trading is offered through the HTX trader profile. There is no subscription fee; compensation is 25% of profits. Trading fees and funding are separate. No subscription fee does not mean no costs.

Open the profile and review its displayed profit share, calculation rules, availability, limits and copying settings. Choose your allocation and confirm on HTX. The platform’s terms determine the settlement period, profit-sharing base and treatment of earlier losses; this page does not replace those terms.

Connecting through the copy trading interface does not require running your own bot. Follower results can differ because of start time, position sizing, rounding, fees and execution.

Strategy publication and next steps

This page describes the hourly RS Rotation V2 model. Parameters and behavior were checked against the current project configuration on September 14, 2026: a 720-hour risk window, a 168-hour signal, five candidates per side and hourly updates. Source publication on GitHub is planned alongside several strategies for the CROT engine. A link will be added after publication.

The public CROT repository linked in the site menu is the already published project. Until the new strategy is released, it is not a source-code link for RS Rotation V2. No unverified return or backtest figures are presented here.

Complete rules and formulas

Source and configuration snapshot: September 14, 2026. Reproducible formulas and actual conditions, including blockers and limitations.

Download JSON specification ↓

1. Version and notation

Checked against source and settings on September 14, 2026. Plugin rs_rotation_v1, model original_cov_720h_168h_top5_hourly_v2, policy continuous_target_v2. The URL is version independent; the old address redirects with HTTP 301. This documents checked code, not proof that every setting is currently loaded by the lead account or reproduced by followers.

E is current account equity; f allocation fraction; A allocated capital; G total absolute target notional across both sides; A₀ initial allocated capital. q is contracts and c is base-asset quantity per contract. BTC is benchmark only.

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. Full universe and data

There are 58 coins: 50 core assets and 8 optional additions — ETHFI, RIVER, AVNT, 币安人生, JUP, 牛来, PONS, MARSCOIN. BTC is a separate benchmark and is not one of the 58. An optional asset needs complete hourly history, at least 50,000 USDT of 24-hour turnover and a spread no wider than 0.5%. Missing history or failed filters exclude it from current selection; a core-asset or BTC data error blocks calculation. If an optional coin is already held, missing history blocks the new plan. Optional coins also require catalog availability and aligned leverage; liquidity is checked again before entry. All 58 coins share one portfolio and risk budget.

History contains 721 closed hourly candles for each included asset and BTC: H = 721×(n+1)×6, with 50≤n≤58. With all 58 assets: 721×59×6. Fields are opening timestamp, open, high, low, close, volume. Candles must be finite, consistent and gap-free; OHLC>0, volume≥0. Missing candles are never filled. Order is core assets, available optional assets, BTC last.

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. Returns, beta and residual risk

P is close and B is BTC. Risk uses 720 simple hourly returns. Sample estimates use ddof=1 (denominator 719); beta is centered. BTC variance<10⁻¹² blocks calculation. Residual e has no separate intercept/alpha; σ is its hourly standard deviation, not annualized.

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 and eligibility

The signal uses 168-hour log returns while beta/σ use 720 simple hourly returns. This explicit mixture is not a log-return regression. Score is not an expected return or success probability.

Eligibility: β∈[0.2,3], σ strictly >10⁻⁶ and volume>0 in at least 90% of the last 720 candles. Valid ineligible assets remain in input. Funding and depth are not score inputs.

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. Selection and ties

Fewer than ten eligible produces the zero target insufficient_eligible, which may close positions. Data/solver errors do not mean flat: no new target is published.

Stable ascending score sort: short takes first five, long takes last five reversed. Ties use universe order with the long tail reversed. Score sign is not a filter. Zero QP weight does not remove raw membership.

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. Covariance and optimization

S uses raw simple asset returns, not residual e. The matrix mixes 75% S and 25% diagonal. x is absolute G weight, w=s⊙x. Score selects candidates but is absent from the objective: no momentum reward, turnover penalty, funding forecast or expected-profit optimization.

Zero weights are allowed; long/short dollar notionals need not match. No equal-weight or simple-volatility 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. Numerical solver protocol

Exactly 10 variables, 10×10 matrix, 5+/5− signs, finite values and β∈[0.2,3]. Symmetry allclose uses atol=10⁻¹² and default rtol=10⁻⁵; min eigenvalue≥−10⁻¹². Q scaling and 10⁻¹⁰I are numerical regularization. Initialization above cap+10⁻¹² blocks even if another feasible point exists.

After solver, allocate rechecks finite, |gross−1|≤10⁻⁸, |w·β|≤10⁻⁸, cap≤0.15+10⁻⁹ and wᵢsᵢ≥−10⁻¹⁰. Errors/nonconvergence do not yield a simplified portfolio. The entire preset must match model parameters.

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. Membership confirmation

Only D−3600 is adjacent. Per side, retain eligible incumbents present in current or previous raw, then add new candidates present in both. Incumbents first, maximum five. First absence removes entry support; two adjacent absences remove accepted membership. Lost eligibility removes immediately.

After a time gap, eligible incumbents remain and new confirmations restart. Overlap retains the previous side (long searched first). Entry requires supported, nonzero correctly signed raw weight and a flat opposite side. Missed hours are not traded retroactively.

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. Complete and partial baskets

Complete accepted 5+5: rerun QP on that membership with current risk even if raw differs. Increases still require supported membership and correctly signed raw weight.

For incomplete membership, unsupported incumbents retain current volume and removed assets get zero. Individually supported assets can receive their shares from the complete current raw QP after full rounding validation. Missing shares are not redistributed (confirmed_raw_targets_v1); actual basket/gross can be smaller.

Raw rounding failure blocks new partial targets but preserves holds and removed-asset exits. A complete accepted-model failure has no partial fallback.

10. Contract sizing and rounding

Last close is reference p. q rounds down to contract step, not coin quantity. Exchange quantity/notional minimums apply; leftovers are not redistributed. ŵ is normalized by G but rounded beta by A. At k=10, 0.03 of A means 0.003 of G.

Full targets require gross 98–100% G, both sides and 15% G cap. Zero insufficient_eligible is exempt. Partial execution need not reach 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. Margin and notional

At E=A=1,000 USDT and k=10: G=10,000, asset cap 1,500; L=20 implies about 500 initial margin plus 20 reserve: 520≤900. This is a calculation, not guaranteed margin availability. Leverage does not multiply G again.

Even empty/partial targets are assessed against the full model: maximum of full-model and saved-contract margin plus reserve. Falling equity does not shrink saved contracts automatically. Missing composition/leverage means unavailable, not zero.

G_used/M_used include positions and remaining opening orders at max(order price,current price). Closing orders release nothing until proven fills. Limits are rechecked at dispatch.

Exchange leverage defaults to 20×, with 10× for AVNT on both sides. Margin is calculated using each asset’s leverage; G/20 is not a valid portfolio estimate when AVNT is included.

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. Differences, deadband and slices

Differences are computed per side. Ordinary nonzero-target adjustment skips a delta below 1% A, checked at current and order price. Zero target, emergency and protective reductions bypass deadband.

Initial slice≤10% A, not G, then limited by gross, cap, margin, beta, step and closeability. To avoid an invalid tiny remainder, the whole position may exceed the usual slice only within required reduction and hard beta. Foreign volume is not adopted; available/frozen are not subtracted twice.

Δ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 and arbitrary partial fills

B_A uses current A, not G. Pending orders may fill independently: buy adds positive, sell negative exposure regardless of open/close. Order valuation uses max(order,current price).

Hard band ±0.10; ordinary slices use ±0.09, reserving 10% for latency/movement. Final guard uses ±0.10. Out-of-band beta may improve without a worse opposite excursion. A pending breach cancels the largest owned contributor to the breached edge, then reconciles.

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. Passive prices and repricing

b/a are best bid/ask, m midpoint, σ residual hourly volatility. Offset is fixed at transition creation then decays with age. Stale-plan or missing-σ reductions start at zero offset.

Passive entry 14,400s (4h), reduction 7,200s (2h), then IOC may apply. Buy rounds down, sell up to tick. Entry is bounded ±0.3% from current H1 authorization midpoint. Crossing post-only is blocked.

Ordinary reprice only moves toward a fill (buy higher,sell lower), at least 2 ticks and 120s since last submit/reprice. Lost authorization, incompatible target or phase change cancel without waiting.

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, authorization and expiry

IOC is a limit order canceling unfilled remainder. Buy bounded by ask×1.001, sell by bid×0.999, with ±0.3% H1 midpoint bound for entry. Rounded buy<ask or sell>bid blocks without market fallback.

At most 3 entry IOC attempts per authorization, at least 120s apart. New confirmed H1 updates midpoint, expiry and attempts, not arrival, offset or age. Entry expires at 86,400s. Mandatory exit/emergency has no total deadline; emergency retries no more often than 10s.

Raw disappearance and renewed confirmation can start a new episode. A material post-expiry target addition permits only the addition; old remainder is carried separately, not rejuvenated. Backward clocks block entry. Unknown submit retains obligations.

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. Freshness, scheduling and targets

New D is created only within [D,D+3600); duplicate processed D is forbidden. Entry expires D+3720; without a new target entries block and resting entries cancel. Permissible exits/protection continue.

Public worker checks overlap and atomically publishes the complete history; exact inputs are SHA-256 archived. Runtime snapshot/book age≤30s and nonnegative. Entry economic statements verified within 120s.

One ordinary order per instrument/side. Queue favors least recently serviced eligible transition, then reduction, smaller resulting |beta|, symbol. Reprices share the queue. Protection compares |beta| first. Ordinary exits do not globally block all openings.

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 and margin protection

Protection triggers on emergency, |B_A|>0.10, gross excess or M_used+R>90% E. No openings; IOC reductions take priority. Model target remains separate from protective execution.

Gross/margin reductions are proportional; a position worsening excess beta also reduces toward half-band (0.05). Quantity is capped by position then closeability, price and beta envelope. The cause is rechecked at dispatch.

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 and cash flows

Realized PnL is reconstructed from confirmed fills with per-side average entry and receipt deduplication. Closing beyond proven inventory blocks accounting. Fees are positive costs, rebates negative. Open PnL uses current positions; signed verified funding and cash flows are separate.

Wallet reconciliation uses equity/unrealized from one balance response, not marks from separate REST reads. Gap>0.01 USDT, unverified fees/stale statements block entry. Deposits are not PnL and do not reset A₀. Turnover is Σqpc over fills. Diagnostic maker/taker follows post-only/IOC types, not guaranteed exchange classification.

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. Emergency loss: exact boundary

Trigger: cumulative trading PnL≤−10% A₀. Not trailing or peak drawdown. A₀=1,000 then growth to 1,500 without flows leaves threshold around 900: 40% from peak. Gross 10A means a 1% adverse portfolio move can cost about 10% A before costs.

Emergency persists and sets execution targets to zero; a better score does not cancel it. No total deadline, but price, closeability, beta and retry interval≥10s remain. Local best-effort protection depends on process, network, accounting and liquidity; managed exchange TP/SL is off.

Accounting exceptions make loss checking unavailable that cycle and block entry; independent beta/gross/margin checks continue with a usable snapshot. An unverified report blocks entry but its computed negative PnL can still trigger emergency.

emergency ⇔ PnL_trade≤−0.10A₀
A₀ survives restart/checkpoint/recovery
A₀≠peak equity; A₀≠G
persist emergency; executable_targets←0

20. Journal and blockers

Intent with unique client_order_id is persisted and fsynced before request; target revision, emergency, price, age, capital, beta, margin, ownership and size are then rechecked. Unknown submit/cancel is not blindly repeated and retains reserves. REST orders/positions are not atomic; mismatch does not prove manual closing.

Entry blocks on foreign/unknown orders, ownership mismatch, unreconciled state, wrong account mode, unavailable leading catalog, unconfirmed configured leverage on both sides (AVNT 10×; others 20×), stale data, economics, unsupported candidate, opposite position, margin, lot, price, beta/cap, expiry or backward clock. Entry blockers must not disable permissible owned reductions.

Schema 2 preserves hashes/revisions, membership, age/authorization, economics and A₀. Checkpoint after 128 intents requires no unknown outcomes and a valid receipt checkpoint; obligations persist. Initial baseline needs a clean account/new ledger. Old state requires explicit recovery, no auto-reset.

21. Limits and copy trading costs

No guaranteed returns, liquidation immunity or exact 10% loss ceiling. Historical BTC beta leaves other factors, correlation changes, funding/basis, liquidity and exchange risk. Weights do not optimize turnover; the volume filter is not market capacity. An H1 candle touching price does not prove a limit fill.

Rules/tests do not replace economic validation. Source is not yet public: this reveals formulas and checked algorithms, not an independent source audit. Profile history may include previous versions.

No subscription fee; 25% profit share; fees/funding separate. HTX determines period, sharing base and loss carryforward: 25% of each winning trade would be unjustified without verifying terms. Followers have their own fills/settings.

22. Model and trading parameters

Fractions are decimals: 0.10 = 10%. seconds means seconds; ticks means minimum price increments. max_passive_seconds constrains valid passive-phase configuration rather than adding a separate exit deadline in the loop. membership_confirmation_bars=2 and strict_target_margin_feasibility=true are mandatory validation settings. max_ioc_attempts is retained for the daily path; hourly uses max_ioc_attempts_per_authorization. Live/post-only/IOC flags are operator permissions, not proof of successful execution.

ParameterValueUnit / basis
model_versionoriginal_cov_720h_168h_top5_hourly_v2—
risk_hours720—
signal_hours168—
candidates_per_side5—
weight_cap0.15—
diagonal_shrinkage0.25—
position_modedual_side—
asset_mode2—
requested_leverage20notional / margin
protection_modenone—
max_margin_fraction0.9E
max_gross_fraction10.3E
capital_fraction1E
target_gross_multiplier10G / A
emergency_loss_fraction0.1A₀
cost_reserve_fraction0.02A
beta_tolerance0.1beta-notional / A
rounding_gross_min0.98G
rounding_beta_tolerance0.03beta-notional / A
ioc_slippage0.001bid / ask
entry_deviation0.003H1 midpoint
reprice_seconds120s
poll_seconds10s
accounting_tolerance_usdt0.01USDT
entry_passive_seconds14400s
exit_passive_seconds7200s
entry_max_age_seconds86400s
max_passive_seconds86400s
signal_publish_grace_seconds120s
child_order_max_equity_fraction0.1A
rebalance_delta_equity_fraction0.01A
initial_offset_max_fraction0.001bid / ask
initial_offset_volatility_fraction0.1σ
reprice_min_ticks2ticks
strict_target_margin_feasibilitytrue—
membership_confirmation_bars2H1
max_ioc_attempts_per_authorization3—
ioc_retry_seconds120s
live_enabledtrue—
post_only_open_confirmedtrue—
post_only_close_confirmedtrue—
ioc_confirmedtrue—
max_ioc_attempts3—
universe_count58—
core_universe_count50—
optional_universe_count8—
leverage_override_AVNT10—
optional_min_turnover_usdt_24h50000—
optional_max_spread_fraction0.005—

23. Sources and checksums

Hashes identify the checked source snapshot. They are not an audit of exchange execution and expose no credentials or account state.

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

Performance and questions before subscribing

As of September 13, 2026, the public CrotPro profile on HTX names RS_ROTATION_V2. Profile history may include earlier versions and settings and should not be attributed entirely to the current configuration.

PnL is under reconciliation. Return figures are temporarily withheld pending reconciliation of HTX statistics with trade and deposit history. Account deposits are not trading profits or losses.

Check current data in the HTX profile

Compare matching periods, observation start dates, trade counts, fees, funding and cash flows. Lead-account statistics do not determine a subscriber’s result.

How do I subscribe?

Open the HTX profile, check copying availability for your account, the profit share and calculation rules. Before confirming, review whether existing positions will be copied and which limits and settings apply. No locally installed bot is required.

How do I stop copying?

Use the subscription controls on HTX. Read what happens to existing positions and pending orders before confirming: stopping new copies and closing positions may be separate actions. Afterwards, check your positions, orders and final charges.

Why does my result differ?

Subscription timing, allocated capital, contract rounding, account limits, partial fills, slippage, fees and funding can differ. Compare matching periods after all costs and cash flows.

Copy-trading evaluation checklist · About the project and sources

Connect through HTX

Review the terms, copying settings and lead-account statistics in the trader profile.