Skip to the page
API REFERENCE/MODEL PARAMETERS

Model parameters

Reference for ModelParams, the set of model coefficients an Engine runs, and for every entry in it. A preset is a named set of coefficients that ships with the package. The values shown are for preset pt-v20, the shipped default. The release notes list what each preset changed, and tf.model_preset() prints the default preset's dictionary at run time.

243 entries in to_dict()
214 settable
29 not settable
19 shipped presets

ModelParams

A set of coefficients. Build one from a shipped preset, optionally overriding settable entries, and pass it to Engine(model=...). Instances are immutable. There is no setter, and every constructor returns a new object.

ModelParams.from_preset

Build a coefficient set from a shipped preset, optionally overriding settable entries.

ModelParams.from_preset(
    name: str = "pt-v20",
    **overrides: float,
) -> ModelParams
ArgumentTypeDefaultMeaning
namestrpt-v20A shipped preset name, pt-v1 to pt-v20. If you leave it out, you get the shipped default, the same one Engine runs.
**overridesfloat-Settable parameter names, from the table below. Any other name is refused.

Returns ModelParams.

Raises ValidationError on an unknown preset name, an unknown parameter name, a compile-time entry, or an override that breaks an identity the preset claims. An identity is a fixed relationship between parameters, and only pt-v19 claims any: garch_beta is 0.9416 - garch_alpha - garch_gamma / 2, vix_return_level_exponent is vix_return_exponent - 1, and vix_target_shock_cap is the ceiling the VIX return dials imply. So from_preset("pt-v19", garch_alpha=0.07) raises unless garch_beta moves to match. The message names the identity, both values and the tolerance.

ModelParams.from_preset_unchecked

Works like from_preset but skips the preset's identity checks. It is for measuring a derived parameter moved away from the value its identity gives, and any number it produces should state that the checks were skipped.

ModelParams.from_preset_unchecked(
    name: str = "pt-v20",
    **overrides: float,
) -> ModelParams
ArgumentTypeDefaultMeaning
namestrpt-v20Same as from_preset.
**overridesfloat-Same as from_preset.

Returns ModelParams, the same immutable type, bit for bit what from_preset would build. An override fingerprints as custom-<digest> as usual.

Raises ValidationError on everything from_preset refuses except a broken identity. The rules that apply to every preset are still checked.

ModelParams.identity_breaks

Checks a set of coefficients against the identities a preset claims.

ModelParams.identity_breaks(
    params: ModelParams,
    preset: str = "pt-v20",
) -> list[dict[str, Any]]
ArgumentTypeDefaultMeaning
paramsModelParamsrequiredThe coefficients to check.
presetstrpt-v20The preset whose identities to check. Each preset has its own, so pass the one you mean.

Returns list[dict], one per identity that does not hold, with dial, identity, expected, actual, tolerance and claimed_by, or an empty list when all hold.

Raises Nothing for a shipped preset name.

ModelParams.from_dict

Rebuild a coefficient set from a to_dict() mapping.

ModelParams.from_dict(
    values: dict[str, float | str],
) -> ModelParams
ArgumentTypeDefaultMeaning
valuesdict[str, float | str]requiredA mapping as to_dict() returns it, including the compile-time entries and name.

Returns ModelParams. A round trip through to_dict() recovers the preset fingerprint when no value was changed. from_dict does not check preset identities, so run identity_breaks on a rebuilt set if you need that check.

Raises ValidationError when a required entry is missing or a value is the wrong type.

ModelParams.settable

The names accepted as overrides.

ModelParams.settable() -> list[str]
ArgumentTypeDefaultMeaning

Returns list[str], sorted. The same set the tables below document.

Raises Nothing.

ModelParams.to_dict

Every entry the model carries, settable or not.

params.to_dict() -> dict[str, float | str]
ArgumentTypeDefaultMeaning

Returns dict[str, float | str]. Every value is a float except name, which is the fingerprint as a str.

Raises Nothing.

ModelParams.fingerprint

The model fingerprint. It is the preset name for an unmodified preset, or custom-<digest> after any override.

params.fingerprint -> str
ArgumentTypeDefaultMeaning

Returns str. A shipped preset's name when nothing was overridden, otherwise 'custom-' and an eight-hex-digit hash of the whole set.

Raises Nothing.

Parameter classes

ClassCountRuntime overrideIn to_dict()Fingerprinted
settable214Yes, as a keyword to from_preset()YesYes
derived2No, recomputed at constructionYesYes
compile-time27No, refused by nameYesYes
hidden2NoNoYes

Two struct fields, breaker_down and breaker_up, are model parameters that to_dict() does not return. You cannot read them back from a model, and the tables below do not list them.

Fingerprint behavior

A model built from a preset has that preset's name as its fingerprint. If you override any settable entry, the name becomes custom- plus a hash of the whole coefficient set, so a run with changed coefficients cannot be cited as the preset. Every preset shows what each shipped set measured, and RunManifest shows what a manifest records.

import tradefloor as tf

tf.ModelParams.from_preset("pt-v14").fingerprint
# 'pt-v14'

tf.ModelParams.from_preset(
    "pt-v14", momentum_theta=0.05).fingerprint
# 'custom-b0a8c73d'

The hash covers every entry to_dict() returns, so a release that adds entries changes the hash of the same override: the example gives custom-b0a8c73d on 0.8.5 and 0.8.6. A shipped preset keeps its name across releases. When you cite a custom set of coefficients, give the package version with it, or the full to_dict().

Preset records

The measurements taken for each shipped preset, read from JSON files included in the package. tf.preset_names() lists the presets the engine knows, and tf.preset_records() lists the ones with a record, which is all of them.

tf.preset_record(name: str | None = None) -> dict[str, Any]
tf.preset_records() -> list[str]

name=None reads the shipped default, pt-v20. An unknown name raises LookupError, and the message lists the names that exist. The record is a plain dict with these keys.

KeyWhat it holds
preset, fingerprintThe preset's name. A record exists for every shipped preset.
coefficients, coefficient_digestThe coefficients that were measured, and their hash, so you can check that a record describes the coefficients your build runs.
default_sinceThe release the preset became the default in, or None.
measuredThe release, commit, roster, seeds and band tables the run used.
panel_252, panel_504The fixed-roster panel at one and two trading years: the median of each statistic over thirty seeds. From pt-v19 it includes crisis_sector_dispersion, the median over the seeds that read it.
in_band, misses, unreadablePer cell, the number of rows inside their band (the range real markets show for that statistic), the rows outside their band by name, and the rows the band table has no band for. A row in unreadable counts as neither a pass nor a miss and is left out of the count.
absent, dispersionpt-v19 and pt-v20 only. The rows a cell measured but could not read, and how many seeds produced a reading of crisis_sector_dispersion. That statistic needs crisis days, which a calm run may not have.
level_protocolThe level and crisis rows, measured on a new roster drawn for each seed. pt-v18 to pt-v20.
mechanism_252, mechanism_heldout_seedsWhether each row shows its mechanism, tested with a sign test against a reading with the mechanism switched off.
structure_252, structure_heldout_seeds, structure_riseThe VIX persistence check at one year, and whether persistence rises from one year to two as it does in real market data.
crisis_leverAnnualized volatility with VIX held at 65, divided by annualized volatility with VIX held at 5, next to the real ratio of 6.16.
long_runpt-v19 and pt-v20 only. The long-run rows: the 40 registered for pt-v20, which it passes, and the 17 of pt-v19's record, of which it meets 15. Its keys are criteria, verdict, passed, of, rows and measured. Each entry in rows has id, words, value, real, rule and pass, and measured names the commit, the seeds and the years.

tf.preset_record()["long_run"]["rows"] returns the long-run rows with the real value beside each reading.

Settable parameters

Every name accepted as a keyword override, grouped by the part of the model it belongs to, with the file that implements that part. Every settable and derived entry is a Rust f64, a float from Python.

The seven agent-facing book entries are 0.0 on every preset before pt-v20, which leaves the book there as it was, and pt-v20 sets all seven. They change what Engine.submit and Portfolio.execute meet and nothing in a market no agent trades. Engine and data says what each one does to an order.

The agent-facing book

agent_book.rs, engine.rs  ·  7 parameters
Namept-v20Description
book_depth_coefficient0.75Coefficient Y of the square-root law that sets the latent depth behind the maker's ladder.
book_depth_exponent0.5The exponent delta of the latent depth's price-for-size law.
book_depth_reach1How far the latent depth reaches, in multiples of the name's average daily volume per side.
book_refill_half_life27Half-life in ticks at which consumed LATENT depth refills.
book_resting1Switch for whether an agent's unfilled limit order rests in the book: 1.0 on, 0.0 off.
book_shared1Switch for whether agents' orders consume the book they share: 1.0 on, 0.0 off.
fill_impact_coefficient0.314Permanent impact of an agent's fills, linear in size: gamma in ds = gamma * sigma * (bought - sold) / V, applied to the name's mispricing s once, on the first tick after the fills.

Market-factor variance process

market/factor_vol.rs  ·  67 parameters
Namept-v20Description
buyback_payout_share0.75The share of earnings a company returns as net buybacks, paid as a yield on the price.
cascade_gain0.1A scale on the whole forced-flow term: the short squeeze and both stop ladders (cascade_symmetry).
cascade_symmetry1How much of the direction in the stop-cascade ladders is removed, from 0.0 (the original asymmetric ladders) to 1.0 (mirror images).
cycle_hazard_per_month1Reads the business cycle's hazard as a rate per month: at 1.0 the monthly transition probability is divided by 30 before the daily draw.
cycle_stationary_opening1Switch (0.0 or 1.0) that draws the day-zero cycle phase and its age from the cycle's own stationary law, instead of opening every run at the start of an expansion.
cycle_us_calibration1Switch for the business-cycle phase table derived from NBER and BEA data (economy::state::us_phase_characteristics).
earnings_nominal_growth1How much of nominal output growth the valuation's earnings carry, from 0.0 (earnings fixed at construction) to 1.0 (the earnings share of nominal output held constant).
fair_value_book_floor0Switch that applies the loss-maker book floor to profitable companies too, making fair value continuous at zero earnings.
fed_liftoff_rule1Switch for a lift-off branch in the central bank's rate ladder.
garch_cascade_components0How many components a name's variance cascade carries.
garch_cascade_ratio3Half-life spacing between cascade components: component k has a half-life ratio^k times component 0's.
garch_cascade_weight1How much of the variance comes from the cascade rather than from the single-component process.
jump_mean_compensated1How much of the drift the market jump's mean carries is given back, from 0.0 (none) to 1.0, which subtracts the compensator and makes the jump a martingale.
macro_burn_in_days755Days the economy is advanced alone, before day zero, so a run opens on settled macro fields.
macro_calendar_days_per_year252Economy steps per macro year for the rest of the macro calendar: months, quarters, the seasonal year and central-bank meetings.
macro_compound_days_per_year252Economy steps per year used to compound annual GDP and CPI growth.
market_beta_down_asym0.025Extra transmission of the market factor on a down tick: every name receives beta * factor * (1 + this).
market_beta_down_asym_lag0.46The lagged downside transmission: on the session after a down day, every name receives beta * factor * (1 + this) whatever the tick's own sign.
market_beta_down_asym_lag_live1Where the lagged wire's down-day condition is sampled: at the open (0.0), live through the session (1.0), or with the sign reversed as a diagnostic (2.0).
market_beta_down_asym_lag_recentre0How much of the extra mean that the lagged down-day wire adds to the tilt is given back, from 0.0 (none) to 1.0 (all of it).
market_beta_down_asym_recentre1How much of the mean that market_beta_down_asym injects is given back, from 0.0 (none) to 1.0 (all of it).
market_burn_in_sessions0Sessions of warm-up given to the market factor's variance components before session one.
market_idio_down_suppress0Shrinks a name's idiosyncratic shock on a down tick of the market factor and inflates it on an up tick, so same-day down-market co-movement rises while the unconditional variance is held exactly.
market_pe_buybacks1Switch that includes buybacks in the earnings behind market_pe.
market_vol_alpha0.0066The market factor's own GARCH reaction term: how sharply market-wide variance responds to the last market-wide shock.
market_vol_alpha_excursion0How far the common factor's shock share moves with the factor's own variance excursion.
market_vol_beta0.8946The market factor's variance persistence.
market_vol_ceiling_multiple32Cap on the market factor's variance, as a multiple of its calm level.
market_vol_floor_multiple0.05Floor on the market factor's variance, as a multiple of its calm level.
market_vol_gamma0.1556GJR leverage on the market factor's variance update: the extra weight a down day's squared shock gets.
market_vol_level_persistence0Session-to-session persistence of a slow multiplier on the market factor's variance target, in (0, 1).
market_vol_level_sigma0Per-session innovation of the slow variance level, in log units.
market_vol_slow_gain0.05How much of each day's variance surprise the slow component takes up.
market_vol_slow_persistence0.9913Daily persistence of the slow component of the market factor's variance (Engle-Lee style).
market_vol_slow_weight0.35Weight of the slow variance component in the market factor's two-component mixture, from 0.0 (single component) to 1.0.
market_vol_vix_anchor15.9843VIX level at which a coupled target equals the baseline variance.
market_vol_vix_coupling0.95405How far the market factor's variance target follows the VIX, from 0.0 (a fixed target) to 1.0 (fully proportional to the VIX response, the squared VIX ratio at the default market_vol_vix_exponent).
market_vol_vix_exponent4Exponent on the market variance target's VIX ratio.
market_vol_vix_exponent_below2.5Exponent on the market variance target's VIX ratio when that ratio is below one, where the VIX sits under the ratio's denominator (the derived anchor under the level form, the read-back under the excursion form).
market_vol_vix_smooth0Days of EMA smoothing on the VIX that the market variance target reads.
neutral_discount_rate0.0482The corporate bond yield at which the target multiple sits exactly on its sector anchor, as a fraction (0.04 is 4 per cent).
oil_opec_symmetry1Removes the direction from the OPEC production rule while keeping its size.
oil_seasonality_target1Where oil's seasonal shape acts: on the price level itself (0.0) or on the price the process reverts toward (1.0).
oil_supply_response1How much of oil demand is answered by supply on the daily step, from 0.0 (none) to 1.0 (supply equals demand in expectation).
phase_target_range_draw0Whether a phase's growth target is drawn from its declared range (1.0) or fixed at the range's midpoint (0.0).
trough_growth_floor0Raises the bottom of the trough phase's GDP growth range from -1.0 (at 0.0) to 0.0 (at 1.0), moving proportionally in between; the top stays at 0.5.
vix_anchor_centre0.1515Log offset below the identity's derived anchor that the anchor weight pulls toward: the blend and the memory's reference use L * anchor * exp(-c).
vix_anchor_memory0.0555556Per-session rate at which the anchor's memory of the read-back updates.
vix_anchor_reversion0Per-session rate at which the VIX reverts toward the identity's anchor, as a share of the distance in [0, 1).
vix_anchor_weight0.375Share of the VIX's target taken by the identity's anchor, as a geometric weight in [0, 1).
vix_anchor_weight_level1How the anchor weight rises with the VIX's level, as an exponent.
vix_anchor_weight_level_below0Switch that also runs the level law below the knee, where it lowers the anchor weight toward zero.
vix_anchor_weight_level_cap2.2159Multiple of the knee above which the level law stops raising the anchor weight.
vix_anchor_weight_level_knee0.3888Where the level law starts raising the anchor weight, as a log offset below L * anchor.
vix_anchor_weight_level_knee_fixed0Switch that fixes the level law's knee to the anchor alone, without the slow regime level: K = anchor exp(-k) in place of K = L anchor exp(-k).
vix_level_loop_gain1.79The VIX loop's own gain on the slow VIX level, which the level's innovation is divided by.
vix_level_persistence0.9979Session-to-session persistence of the VIX's own slow log-level, a lognormal AR(1) multiplier on the VIX target under vix_level_identity.
vix_level_sigma0.0181Per-session innovation of the VIX's own slow log-level, in log units.
volume_idio_persistence0Daily persistence of a per-name volume state, so each name has busy and quiet spells of its own.
volume_idio_sigma0Innovation size of the per-name volume state.
volume_idio_variance_gain0.2Gain that makes a name's volume follow its own conditional variance, so a name trades more when its own volatility is high.
volume_move_cap12Where the volume response to a move saturates, in units of one percent.
volume_move_floor0.6Base volume multiplier for a name on a day it does not move at all.
volume_move_jump_share1How much of a jump's share of the day's move the volume scale counts, from 0.0 (none) to 1.0.
volume_move_noise0.2Amplitude of the return-unrelated noise in a name's daily volume.
volume_move_response0.6How much more a name trades per one percent it has moved today.
volume_variance_gain0.0284038How strongly realized volume tracks the market factor's variance.

Factor structure

market/tick.rs, market/factors.rs  ·  63 parameters
Namept-v20Description
buyback_yield_cap0.15A ceiling on the annual buyback yield buyback_payout_share * eps / price that the buyback term compounds over the elapsed years.
closing_auction1Whether the session closes with a cross at the model price, a switch.
corporate_yield_daily1Whether the corporate yield moves between central-bank meetings, a switch.
crash_amplifier_conditional_sigma1Switch for the sigma the crash amplifier measures a shock in: 0.0 uses the baseline constant, any nonzero value the tick's own conditional sigma.
crash_amplifier_slope0.2Extra market loading the crash amplifier adds per baseline sigma of shock beyond crash_amplifier_threshold.
crash_amplifier_threshold2Market-shock size, in baseline sigmas, above which the crash amplifier fires.
crisis_blend_cap0.98Ceiling of the crisis correlation blend.
crisis_blend_gain0How hard a crisis loads every name onto the market factor, as a multiplier on the crisis spike.
crisis_blend_ramp1.4VIX points past CRISIS_VIX_THRESHOLD for the sector-to-market crisis blend to reach 1.0 before its cap.
crisis_blend_source1Where the crisis correlation injection comes from.
crisis_blend_variance_damp0How far the crisis blend's market injection is decoupled from the market factor's own magnitude, from 0.0 (fully coupled) to 1.0 (fully decoupled).
cycle_publication_lag252Sessions between a turn of the business cycle and its publication.
earnings_anticipation_half_life126Half-life, in sessions, of the discount the valuation puts on the earnings cycle's expected path.
earnings_cycle_depth0.2The aggregate earnings cycle's depth: the log level every company's earnings are pulled toward in a contraction or a trough, beyond what nominal output alone gives them.
earnings_cycle_half_life60Half-life in sessions of the pull toward the phase's level, 60 on every shipped preset.
earnings_cycle_sigma0The daily sd of the earnings level's own noise; 0.0 is the phase path alone and takes no draw.
earnings_cycle_upside0.09The earnings cycle's upside share: every phase other than a contraction or a trough pulls earnings toward +depth * upside, which centers the level over a cycle so the cycle moves earnings around the nominal-output path without shifting it.
endogenous_news_intensity0.05Daily probability that a company generates its own news event.
endogenous_news_sigma0.01751Standard deviation of an endogenous news event's price impact, in the units NewsEvent::price_impact carries.
fair_value_market_linear1Which part of a market shock fair_value_market_share makes permanent, a switch.
fair_value_market_share1The share of each market-wide shock that moves fair value for good, in [0, 1]: the name's loading on the market factor's draw, market-wide news and the market jump.
fair_value_market_vol_cap1.5A ceiling, in multiples of market_factor_sigma, on the market volatility whose shocks fair_value_market_share makes permanent, in [0, 32].
fair_value_news_share1The share of each idiosyncratic shock that moves the name's fair value for good instead of its mispricing, in [0, 1].
fair_value_vix_discount0.35Volatility feedback: a discount on every name's fair value while the VIX is above fair_value_vix_knee, exp(-this * beta * ln(vix / knee)), in [0, 1].
fair_value_vix_half_life5Half-life, in sessions, of the VIX exposure the volatility-feedback discount reads.
fair_value_vix_knee40The VIX level, in points, above which fair_value_vix_discount applies.
fear_greed_published_inputs1Switch that makes the fear/greed index read the business cycle and GDP growth as published instead of as they are.
flight_to_quality_day1Which return the flight to quality reads, a switch.
flight_to_quality_gain0.008The flight to quality's size: percentage points of 10-year yield per percent of index return, down with the market when inflation is under 3 percent and up when it is over 4.
gdp_publication_lag21Sessions between the end of a quarter and the publication of its GDP growth, as the BEA's advance estimate comes about a month after the quarter.
idio_sigma_beta_exponent0How strongly a name's idiosyncratic volatility follows its market beta, as an exponent.
idio_sigma_scale0.512598Multiplier on every name's idiosyncratic GARCH sigma.
inflation_ceiling6The hard ceiling on endogenous inflation, in percent.
inflation_floor-1The hard floor on endogenous inflation, in percent.
inflation_reversion0.55How fast endogenous inflation reverts toward its 2% target each month, as a fraction of the gap.
informed_flow_fraction0.35Share of order-flow impact that is permanent (information), from 0 to 1.
macro_publication_repricing1Whether a name's price takes the change the close's macro step makes to its fair value at the moment the step is published, a switch.
market_factor_sigma0.00645407Baseline daily sigma of the shared market factor.
market_vol_vix_excursion0Switch for the VIX reading the market factor's variance target uses: 0.0 reads the VIX level against a fixed anchor, any nonzero value reads only the excursion above the level the index's own conditional variance implies.
news_absorption_drift_half_life42The half-life in ticks of the post-news drift part, h_d in news_absorption_half_life's profile.
news_absorption_drift_share0.12The share of an endogenous news event's move that arrives as post-news drift, after the fast part: d in news_absorption_half_life's profile.
news_absorption_half_life0.6How fast the market prices an endogenous news event, as the half-life in ticks (minutes) of the fast part of its move.
news_market_weight0.3Weight of market-wide news on every name.
news_peer_vix_coupling8How much harder news transfers to a peer in a crisis.
news_peer_weight0.05Weight of one company's good news on its sector peers.
news_peer_weight_down0.05Weight of one company's bad news on its sector peers.
news_quote_revision1Whether the market maker re-quotes on public news, a switch.
news_sector_weight0.5Weight on sector-wide news, an event tagged with a sector and no company.
opening_market_sigma0.001The sd of the market's common opening mispricing, the index's own premium over fair value on day zero.
opening_mispricing_sigma0.016The cross-sectional sd of each name's opening mispricing.
order_flow_coefficient50Order-flow impact coefficient: the scale of the price move that injected order flow causes, before informed_flow_fraction splits it.
order_flow_impact_law0Which participation law the order-flow impact multiplier follows, a switch.
qe_pe_gain0Gain on the QE valuation channel, where the target P/E takes 1 + qe_pe_gain * qe_pe_boost.
qe_pe_stock_gain0Gain on the QE stock channel: the target P/E takes + qe_pe_stock_gain * ln(qe_assets_ratio), concave in the level of holdings and zero at the neutral baseline.
quote_model_weight1Where the market maker centers its book, as a weight in [0, 1] on the model price.
rate_pe_sensitivity3P/E compression per unit of discount rate above neutral, times a name's growth duration: the target multiple's rate adjustment is 1 - (yield - neutral) * rate_pe_sensitivity * duration.
sector_factor_sigma0.00858305Daily sigma of each shared sector factor, loaded at sector_loading by every member of the sector (market/factors.rs).
sector_loading0.6How hard a name loads on its own sector's factor, as a multiplier on the sector draw.
sector_loading_beta_slope0.7How much a name's sector loading follows its market beta.
sector_vix_coupling1How much the sector draw's variance follows VIX, on the same (VIX / anchor)^2 target the market factor's variance uses (factor_vol.rs).
treasury_10y_noise0.038The 10-year Treasury yield's daily noise, in percentage points.
treasury_2y_noise0.022The 2-year Treasury yield's own daily noise, in percentage points.
unemployment_adjustment_half_life84The half-life, in sessions, of unemployment's response to its cyclical drivers.

Crisis gates

economy/daily.rs, market/tick.rs, engine.rs  ·  38 parameters
Namept-v20Description
crisis_epicentre_end_sessions21How many consecutive sessions under crisis_vix_threshold end a crisis episode.
crisis_epicentre_extra1.93How much more volatile the crisis epicentre sector's names are than the other sectors' at the same VIX, as a ratio of total volatility.
crisis_vix_threshold30.8833VIX level at which crisis behavior begins.
daily_credit_floor_gain1How strongly the credit spread floors are re-applied on every daily step, from 0.0 (off) to 1.0 (both floors in full).
forced_flow_beta_exponent0How unevenly forced selling lands across names, as an exponent on beta.
forced_flow_gain0Common forced-selling flow in stress: a log-shock per VIX point above forced_flow_threshold, per day, applied identically to every name.
forced_flow_replenish0Fraction of the spent forced-selling budget recovered on each day the VIX is at or below forced_flow_threshold (deleveraging capacity rebuilds in calm).
forced_flow_reservoir0Total forced-selling budget, in VIX-point-days.
forced_flow_threshold40VIX level, in points, above which forced flow applies.
jump_idio_excitation0Self-excitation of a name's idiosyncratic jumps: after a jump the name's arrival rate is lambda (1 + h) with h' = decay h + this.
jump_idio_excitation_decay0The excitation's daily decay, 0.72 [0.48, 0.79] (half-life two sessions) by the same measurement.
jump_idio_vix_decoupled0Switch that takes the VIX-squared scaling (jump_vix_coupling) off the idiosyncratic arrival rate, leaving it on the market jump.
sector_vol_alpha0.067Shock weight (alpha) of the per-sector GARCH(1,1) variance state.
sector_vol_beta0.837The per-sector variance state's persistence term, 0.837 by the same measurement, which pt-v19 and pt-v20 ship.
usd_crisis_vix_threshold25.5The VIX above which the dollar catches a safe-haven bid.
vix_ceiling181.329Upper bound on the VIX state itself, in points.
vix_cycle_amplitude0.85How much of the VIX's level comes from the business cycle, from 0.0 (none) to 1.0 (the full per-phase constants).
vix_decay_ratio1Multiplier on the VIX mean reversion on days the target sits below the current VIX, so fear can decay more slowly than it arrives.
vix_innovation_return_sigma0.0175The part of the innovation scale that rises with the session return, per percent: see vix_innovation_sigma.
vix_innovation_sigma0Base scale of the VIX's own daily innovation, as a fraction of its level.
vix_jump_intensity0Rate of exogenous fear events, per year, each a jump in the VIX level.
vix_jump_level_scale1.7A fear event's mean size in units of the day's innovation scale (VIX * sqrt(s0^2 + (c r)^2), or VIX when the innovation dials are off), exponential draw.
vix_jump_return_intensity6.199The part of the fear-event arrival rate, per year per percent of down session, that rises with the session: the daily probability is (vix_jump_intensity + this * max(0, -r)) / 252.
vix_jump_scale0Mean size of a fear event, in VIX points (exponential draw).
vix_level_identity1Switch that sets the VIX level from the index's own conditional variance instead of a table of per-phase constants.
vix_mean_reversion0.27How fast VIX reverts toward its target, as the fraction of the gap closed each day.
vix_realised_vol_weight0.3Weight of the market's own volatility in the VIX target, from 0.0 to 1.0.
vix_return_clamp15The index return is clamped to +/- this before it drives the VIX, in the units of the return source.
vix_return_exponent1.4483Exponent of the VIX's response to a down day's return: 1.0 is linear, above 1.0 is convex.
vix_return_exponent_up0.5433The up side's own exponent: the spike on an up session is -gain_up * |r|^this * VIX^(-vix_return_level_exponent_up).
vix_return_gain8.83VIX points added to its target per unit of a down day's index return, before the clamp and cap below.
vix_return_gain_up0.049The up-day counterpart of vix_return_gain: how far an up day's index return moves the VIX target.
vix_return_level_exponent0.4483How the down-side fear response falls with the VIX the session opened from: the spike is gain * |r|^p * VIX^(-this).
vix_return_level_exponent_up-1How the up-side response scales with the level.
vix_return_source1Which index return the VIX reacts to: the session's final minute (0.0, pt-v1 through pt-v8) or the whole day's (1.0, pt-v9 onward), blended in between.
vix_target_offset0A constant added to the VIX target, in points.
vix_target_shock_cap158.852Ceiling on the VIX target's whole excursion, in points: the return spike plus the inflation and shock adjustments.
vix_variance_premium0.252The variance risk premium pi: how far a real VIX sits above the realized volatility of its own index, as a fraction.

Mispricing dynamics

mispricing.rs, market/tick.rs  ·  6 parameters
Namept-v20Description
crowd_lean_cap0.02Bound on the crowd's daily log-price shock.
crowd_momentum_gain0.02Crowd herding gain per day on yesterday's change in s.
crowd_valuation_gain0.006Crowd valuation gain per day on s.
mispricing_cap0.9Hard bound on |s|.
mispricing_half_life_days60Trading days for half of a mispricing to decay.
momentum_theta0.0185516Herding: fraction of yesterday's re-rating that continues today.

Per-name GJR-GARCH

market/garch.rs  ·  11 parameters
Namept-v20Description
garch_alpha0.0595072Weight on yesterday's squared shock: how sharply a name's variance reacts to its own last move.
garch_beta0.7905Weight on yesterday's variance: how long a name's volatility remembers.
garch_ceiling_multiple5Ceiling on a name's GARCH variance, as a multiple of the sector's long-run variance.
garch_floor_multiple0.25Floor on a name's GARCH variance, as a multiple of the sector's long-run variance.
garch_gamma0.183185GJR leverage-effect asymmetry: the extra weight a negative shock gets in a name's next variance.
garch_innovation_commensurate0Feeds the per-name GJR-GARCH the name's own noise, in the units the coefficients were fitted in, in place of the whole random_noise column.
garch_omega0.000002The GJR-GARCH constant: the variance a name reverts toward when neither yesterday's shock nor yesterday's variance pulls it.
garch_omega_sector_scaled0Switch that scales garch_omega by each sector's base variance in place of one constant for every sector.
garch_vix_coupling0.142196How much a name's own variance follows the VIX, on the market factor's own target shape.
garch_vix_exponent2Exponent on the VIX ratio in a name's variance reference.
idio_sigma_floor0.0001The absolute floor under a name's daily variance in the tick and in the overnight path, in daily variance units.

Endogenous jumps

engine.rs, applied at the day close  ·  10 parameters
Namept-v20Description
garch_beta_dispersion0Cross-sectional spread in volatility persistence, in raw beta units.
jump_intensity_idio0.00688953Daily probability that a per-name idiosyncratic jump fires.
jump_intensity_market0.0282877Daily probability that a market-wide jump fires.
jump_market_variance_share0How much of the market jump's log return joins the day's factor innovation, so the GJR variance update sees a crash day.
jump_mean_market-0.00852183Mean of the market jump in log-return units.
jump_momentum_share0How much of a jump the herding term is allowed to continue, in [0, 1].
jump_sigma_idio0.075208Standard deviation of the idiosyncratic jump, in log-return units.
jump_sigma_market0.00245976Standard deviation of the market jump, in log-return units.
jump_vix_coupling0.2626How much a jump's arrival rate follows the VIX.
overnight_variance_ratio0The variance of the overnight move as a fraction of a session's, per name.

Universe memory

market/tick.rs, engine.rs  ·  4 parameters
Namept-v20Description
market_vol_slow_vix_damp0.374How far the slow variance component's target is decoupled from VIX, in [0, 1].
regime_stress_points0Stress the business cycle adds to the correlation blend, in VIX-equivalent points at full intensity (a contraction).
universe_stress_decay0Daily decay factor of the universe's remembered stress level, which keeps crisis correlation elevated after the VIX falls back.
universe_stress_weight0How much of the remembered stress reaches the correlation blend.

Session guards

market/tick.rs  ·  2 parameters
Namept-v20Description
price_breaker_fraction0.25Circuit-breaker band as a fraction of the session open (+/-25% shipped).
price_hard_cap50000Absolute cap on any model price (50,000 shipped).

Continuous size effect

market/factors.rs  ·  4 parameters
Namept-v20Description
size_effect_exponent0.15Exponent of the continuous size effect: (cap / 25B) ^ -exponent.
size_effect_smoothness0Blend from the four-tier size step toward a continuous power law, in [0, 1].
spread_size_exponent0.455Exponent of the continuous spread curve.
spread_size_smoothness0Blend from the four-tier spread step toward a continuous power law, in [0, 1].

Persistent volume

engine.rs close, market/tick.rs phase 3  ·  2 parameters
Namept-v20Description
volume_innovation_sigma0.21Standard deviation of the daily log-volume innovation.
volume_persistence0.7Day-to-day persistence of the shared volume component, in [0, 1).

Derived parameters

These appear in to_dict() and are covered by the fingerprint, but you cannot override them, because they are computed from other entries when the model is built.

Namept-v20Description
mispricing_phi0.988514Daily AR(1) coefficient of the mispricing, derived from mispricing_half_life_days.
s_phi_tick0.99997Per-tick decay, mispricing_phi^(1/390).

Compile-time entries

Constants fixed when the engine is compiled. They appear in to_dict() and are covered by the fingerprint. An override is refused by name, because the engine would ignore it and the fingerprint would then record a change the run did not make.

Namept-v20
book_levels10
daily_shock_cap0.15
default_sector_anchor_pe18
fair_value_floor0.01
fiscal_multiplier0.3
gold_equilibrium_base2200
gold_mean_reversion0.002
growth_duration_scale2
inflation_target2
inventory_limit_levels12
loss_making_price_to_book1.2
namept-v20
oil_baseline75
phillips_curve_coeff0.2
rate_adjustment_floor0.5
sector_daily_sigma_consumer_discretionary0.018
sector_daily_sigma_consumer_staples0.008
sector_daily_sigma_energy0.015
sector_daily_sigma_financial_services0.015
sector_daily_sigma_healthcare0.018
sector_daily_sigma_industrials0.015
sector_daily_sigma_materials0.015
sector_daily_sigma_real_estate0.008
sector_daily_sigma_technology0.025
sector_daily_sigma_telecommunications0.01
sector_daily_sigma_transportation0.015
sector_daily_sigma_utilities0.008

See also

Every preset lists the shipped coefficient sets and what each measured. Engine and data documents the Engine that runs one, and How it is measured says what the default preset reproduces.