01 — Philosophy

Why we publish everything

Most "AI investing" is a black box: you see a call, never the logic, and never the full record — winners are screenshotted, losers quietly disappear.

Alphixir is built on the opposite premise. If a model knows something, it should be provable. So we show the logic, publish every decision, seal it before the market opens, and let the track record speak — wins and losses alike. Nothing is back-filled, cherry-picked, or rewritten after the fact.

That is the whole point of this page. The engine is deterministic: given the same inputs, it produces the same decisions, every time. Below is the actual structure it runs on — every factor, every rule, every formula, and every result. A small set of exact coefficients and thresholds stays in-house so the engine can't be trivially cloned, and we flag those wherever they apply; everything you need to verify the record — the picks, the reasoning, the scoring rules, and the outcomes — is public.

The dividing line

The quantitative engine — regime score, allocation, sizing, scoring — is code. It is fully determined by the factors below. A language model contributes only two things: a per-stock direction and conviction, and a small, tightly capped qualitative overlay on the regime score. Everything else is deterministic arithmetic — the same inputs always produce the same output, with no black box in between.

02 — Market regime

The regime engine

Every morning the engine reduces the market backdrop to one continuous score from −100 (risk-off) to +100 (risk-on). It is a weighted sum of independent factors, each individually clamped so no single input can dominate. There are no knife-edge binary triggers — everything is continuous.

The factors

Each factor contributes a bounded number of points. The exact weights and clamps are fixed, pre-registered parameters — calibrated on ~20 years of data and deduced from each factor's role, not grid-searched to flatter past returns. We publish what each factor reads, which way it pushes, and its relative importance; the precise coefficients are the one part we keep in-house.

FactorReadsEffect on the scoreWeight
VIXImplied volatility (close)Low volatility pushes risk-on; spikes push risk-offHigh
Fear & GreedCNN index, 0–100Greed adds, fear subtracts — capped low to avoid double-counting VIXMed
Yield curve10Y − 2Y spreadA normal / steepening curve is expansion-friendly, addsMed
S&P 500 (daily)Day's % changeSmall same-direction momentum tiltLow–Med
MA200 deviation% vs 200-day averageAbove trend adds — one-sided, it rides winnersLow
Asia / Europe contextNews-based only. The overnight Asian close and major Asian/European names (Samsung, SK Hynix, TSMC, ASML, and peers) are read from same-day news headlines, not price feeds, and passed to the qualitative overlay as context. No US-listed regional ETF proxies. (Effective 2026-07-27)Qualitative context for the overlayContext
High-volume selloffDistribution-day flagFixed penalty when triggeredPenalty

VIX is centred defensively — below the recent-cycle median, so a calm tape has to earn its risk-on reading. Fear & Greed is deliberately weighted well below VIX to avoid double-counting the same volatility signal. MA200 deviation is one-sided in spirit — it rides winners rather than treating strength as a sell signal.

# regime score — a bounded weighted sum
score = clamp( Σ factor , −100, +100 )

Hysteresis — no label flicker

The continuous score drives everything internally; the label (Risk-On / Neutral / Risk-Off) is for display and uses asymmetric entry/exit thresholds plus a minimum hold, so a single noisy day cannot whipsaw the regime.

There is also a minimum hold. Even when a switch condition is met, the current label must persist for a short minimum run of sessions before it can flip. The exact enter/exit thresholds and hold length are fixed but kept in-house; the principle is what matters — entering a regime takes a stronger signal than staying in it, and between the two the previous label persists (the inertia band).

From score to cash level

The regime score sets how much of each strategy's book is actually invested. A logistic (sigmoid) curve maps score to an invested percentage between the strategy's own floor and ceiling — smooth, never a step change.

invested% = lo + (hi − lo) × sigmoid( score / k )
where sigmoid(x) = 1 / (1 + e^−x); k is a fixed calibrated slope

# lo / hi are per-strategy (see §04). Daily change is further
# limited to a strategy-specific slew step (%p per day).

The language-model overlay — deliberately small

A language model may nudge the quantitative score for context the factors can't see (e.g. a policy surprise). That nudge is hard-capped at ±10 points — the quant engine cannot be overruled. This cap stays in place until 6–12 months of live, forward results validate the overlay.

adjusted = clamp( quant_score + clamp( overlay, −10, +10 ), −100, +100 )
03 — Selection & sizing

Choosing stocks and sizing positions

The regime sets the risk budget; selection and sizing decide what fills it. A language model supplies only step 1 — a direction and a conviction per stock. Everything after that is deterministic code.

  1. Direction & conviction. For each name, the model reads overnight news and the prior close and outputs a direction (up / down / neutral) and a raw confidence. This catalyst-driven layer is the newest part of the system and is actively being refined and backtested — treat it as evolving.
  2. Candidate filter. Keep names with direction = up above a fixed confidence threshold. The Sector-Champion strategy holds a small basket of each sector's strongest names (up to three), overweighting on good news and trimming hard on bad, within a cash band.
  3. Calibrate confidence. Raw model confidence is tempered by temperature scaling to curb overconfidence, until enough live hits accrue to switch to empirical bucket-mapping.
  4. Risk-adjust. Raw size scales with calibrated confidence over downside volatility only — upside variance is left alone so winners keep running.
  5. ½-Kelly ceiling. Each name is capped at a half-Kelly fraction under symmetric-payoff assumptions — deliberately half of the growth-optimal bet, to trade a little return for a lot less drawdown.
  6. Normalise + water-fill cap. Weights are normalised within the sleeve, then each is capped at min(single-cap, ½-Kelly). Overflow is redistributed to names that still have room; if every name is capped, the remainder simply becomes cash.
  7. Scale & hold. Weights are scaled to the sleeve target, and a small no-trade band suppresses churn on tiny day-to-day changes.

Entry gates: strategy books admit candidates at raw confidence ≥ 0.55, while the Sector Champion basket screens at calibrated confidence ≥ 0.55. The two scales are intentionally distinct — a 2026-07-13 20-year backtest showed unifying either direction degrades one strategy beyond our pre-registered harm limits (see ALGO log).

Gap-up guardrail (since Aug 1, 2026): for a name not already held, step 1 no longer lets overnight-headline momentum alone raise confidence for a fresh entry once the stock has already gapped up sharply into the open — that move is priced in by the time of entry, so unsupported headline confidence there is treated as intraday-reversal risk, not a fresh buy signal. Positions already held are unaffected.

# downside volatility (semi-deviation, MAR = 0), annualised & floored
downside_vol = sqrt( mean( min(r, 0)² ) ) × sqrt(252)

# raw position score, then ½-Kelly ceiling (exact offsets kept in-house)
raw = conf_cal / downside_vol
cap = min( single_cap[persona], half_kelly( conf_cal ) )

Above the individual stocks, each strategy holds an anchor allocation (equity / gold / cash) that tilts with the regime inside fixed bands — so defense shows up as more cash and gold, not just smaller positions. Gold (GLD) is the only ETF sleeve; uninvested cash accrues the short-term risk-free rate (the 1-month T-bill), not zero. As of Aug 1, 2026 the gold sleeve is held structurally: whenever the anchor allocation assigns gold a nonzero weight, the position is kept even on a neutral or missing gold signal — a downbeat signal still trims it, but "no signal" no longer zeroes it out the way it previously did.

04 — The strategies

Same market, different answers

Four strategies run the exact same engine on the exact same data. They diverge only in fixed, personality-deduced parameters — how much they'll invest, how concentrated they get, how fast they react, and how hard they tilt to defense. These are constants of character, not knobs tuned to past returns.

Exposure = how much of the book it deploys (the sigmoid floor/ceiling, §02). Concentration = how large any single position can get. Reaction speed = how fast it shifts exposure day-to-day. Defensive buffer = how hard it leans to cash and gold when the regime turns. The exact per-strategy values are fixed but kept in-house — the strategies' results are public, their dials are not.

05 — Proof

Sealed, scored, chain-linked

A track record only means something if it can't be edited after the fact. Alphixir runs a three-stage daily pipeline, and every day's picks are cryptographically sealed before the US open.

The daily pipeline (US Eastern)
Before the open
Seal — picks committed
The engine reads overnight news and the prior close, decides its virtual positions, and publishes the full reasoning. The picks are hashed and sealed before the open — nothing can be added or altered after this point.
09:30 ET
Open — entry basis fixed
The opening price becomes each position's entry basis (entry_open) and is recorded once. It is never recomputed later, which is what prevents retroactive reconstruction.
16:00 ET
Close — scoring
The held book is marked to the close. A day's return combines two legs — the overnight move of yesterday's positions (their close→open, dividends included) and today's positions intraday (open→close). Everything is anchored at the first entry open. Uninvested cash accrues the 1-month T-bill rate (daily = rate ÷ 252); a day with no positions is recorded flat.

The seal (tamper-evident chain)

Each run computes a SHA-256 seal over that morning's picks, then chains it to the previous day's seal. Change any past pick and every later hash breaks — so the whole history is append-only and publicly checkable, no account needed.

contentHash = sha256( canonical(picks) )
chainHash   = sha256( contentHash | prevChainHash | date | session | sealedAt )
# genesis (first-ever) prevChainHash = 000…0 (64 zeros)

Scoring & the track record

Every position is bought at the open and held, so the track record is anchored at that first entry open — there is no "previous close" to start from. Day one is open→close; from then on the book is marked forward through each close, so the overnight moves of the positions we actually hold are part of the cumulative. There is no real money, so there are no cash flows to distort the numbers — the cumulative figure is a clean time-weighted return (TWR).

r_day = ( 1 + r_overnight ) × ( 1 + r_intraday ) − 1 # day one: r_overnight = 0
r_overnight = Σ ( wᵢ,ₚᵣₑᵥ × [ (openᵢ + divᵢ) / closeᵢ,ₚᵣₑᵥ − 1 ] ) # yesterday's weights
r_intraday   = Σ ( wᵢ × [ (closeᵢ − openᵢ) / openᵢ ] ) + cash% × (t_bill ÷ 252) # today's weights
TWR = Π ( 1 + r_day ) − 1 # chain-linked across days

The benchmark (S&P 500) is anchored the same way — its first tracked day is open→close, then total return close to close — so the cumulative comparison starts from the same point. The daily "vs S&P" shown in each report is a separate, session-only lens: our picks' open→close versus the index's open→close. It reflects that trading day and deliberately excludes the overnight (which belongs to yesterday's book and lives in the cumulative), so the daily session figure will not add up to the cumulative — by design. Direction hits: "up" is correct when the return is positive, "down" when negative, "neutral" within ±0.5%. Only percentage results are ever shown — never raw prices.

06 — Honesty

Limits & versioning

Transparency includes being clear about what this is not, and about how young the live record is.

  • No real money. Every portfolio is virtual. Nothing here is a real trade, and none of it is redeemable.
  • Not investment advice. No recommendation, no solicitation, no personalised guidance for your portfolio.
  • Past ≠ future. Past virtual performance does not indicate future results.
  • Small sample, early days. The live record is sealed from day one — so it is honest — but early figures reflect a small sample and will stabilise only as more sealed sessions accrue.
Versioning

This methodology evolves as we validate it against forward, out-of-sample results. Parameters here are pre-registered — deduced from each strategy's character and fixed in advance, not grid-searched to flatter past returns. Material changes get a new version number and date, so you can always see what rules were in force on any given day. v2 (July 2026) corrects scoring to the held-book model: a day's return now includes the overnight of the positions we actually hold, anchored at the first entry open — v1 scored open-to-close only. Every sealed pick is unchanged; only the yardstick was fixed. Current: Methodology v2 · Engine v0.1.3 · August 2026.

07 — Changelog

Engine Changelog

Every entry below is public, dated, and permanent — this is the same discipline as the seal chain, applied to the rules themselves rather than the daily picks.

Invariant

Version transitions happen only when the underlying method changes — never in response to performance, good or bad. Nothing is ever deleted or hidden from this record; if an internal build gets renumbered for clarity, that mapping is stated explicitly below rather than rewritten silently. The live track record (Track Records) shows results under each engine version and the unbroken all-time total, side by side, at all times.

Engine v0.1.3 — since Aug 9, 2026

Strategy differentiation, selection-side. Core, Aggressive, and Conservative now select different stocks per strategy — not just different sizing on a shared candidate list. Each strategy applies its own confidence threshold plus a high-beta / defensive tilt (persona_lens, B22), so the three books can diverge in which names they hold, not only how much of each. The Sector Champion basket is unaffected — it already ran its own selection logic. Sealed picks before Aug 9 are unchanged; this only governs new picks going forward.

Engine v0.1.2 — since Aug 1, 2026

Two live changes, both defense-side. (1) Gold structural hold — the gold (GLD) sleeve is now held whenever the anchor allocation assigns it a nonzero weight. Previously, a neutral or missing gold signal fell through the same directional gate used for equities and zeroed the position out on most days, even though the anchor allocation had already budgeted for it; a downbeat gold signal still trims the position, only the "no signal" case changed. (2) Gap-up guardrail — for any name not already held, the stock-selection model no longer lets overnight-headline momentum alone raise confidence for a fresh entry once the stock has already gapped up sharply into the open; that move is priced in by the time of entry, so unsupported headline confidence there is now treated as reversal risk, not a buy signal. Positions already held are unaffected. See §03.

Method update — Jul 27, 2026

Removed the Asia/Europe overnight factor that relied on US-listed regional ETFs. Those ETFs trade on US hours, so at our pre-open seal time they carried no same-day print and fell back to the prior session — the signal lagged the actual overnight Asian close by roughly a day. Asia and Europe context (the overnight close and major names such as Samsung, SK Hynix, TSMC, ASML) is now taken from same-day news headlines only, fed to the qualitative overlay — no price-based ETF proxy. See §02.

Engine v0.1.1 — since Jul 14, 2026

(Superseded by the Jul 27 update above.) This build read the Asia-overnight factor from a same-day snapshot of US-listed Asia ETFs, falling back to the prior completed close per-ticker, and added a small capped global-headline overlay for context the quantitative factors can't see intraday. Universe cleanup: a delisted ticker was removed from the tradable set.

Engine v0.1.0 — through Jul 13, 2026

The baseline engine described throughout this page. Internally this build spanned several incremental revisions (referred to as "v1" through "v2.2" in earlier internal notes and some report metadata from before this public versioning scheme existed) — those internal labels are mapped to v0.1.0 here for continuity. No sealed pick, hash, or result from that period was changed or renumbered; only the label used to talk about the engine build was standardised.