vike
Strategies

Simulator-only strategies

The 7 strategy names a backtest resolves that a live daemon cannot, each with the registry's own reason — plus the script arm that resolves by path, not by name.

A backtest profile can name more strategies than a live daemon can. The portable roster — the registry, one page per name under templates — is the set vike_strategy::strategy_by_name resolves anywhere. The 7 names below resolve only inside the backtester: each reads something only the simulator has (a schedule, a cash gate, an attached stop the fill loop resolves), and the registry records the reason in its own words so that promoting one is a factual claim somebody can check rather than an opinion.

The failure this table prevents is a SILENT one: a strategy whose input never arrives mounts cleanly, logs nothing unusual and simply never submits. That is the class of live-versus-backtest divergence Vike Trader keeps a ledger of, and it is precisely the class an operator discovers days later.

Simulator-only strategies

NameWhy it is simulator-bound
rotation_top_ksimulator-bound: reads the SimBroker symbols/schedule fields directly
bracket_per_symbolsimulator-bound: measures the attached protective stop the SimBroker fill loop resolves
gated_weightssimulator-bound: drives the SimBroker cash-gate weight submit argument
caps_sizers_masksimulator-bound: drives crate::sizing::PositionSizer via SimBroker's raw=false submit path (a 999.0 sentinel size)
tick_pair_msesimulator-bound: measures SimBroker::position_of against the engine's latency shadow
cheap_catch_updown_fair_valuelives in THIS crate now (crate::cheap_np) and is still listed here, which is not a contradiction: this table's job is to say why a name the backtest registry owns has no PORTABLE row, and promoting this one needs a PARAM_KEYS entry that fails a gate in BOTH spellings — Declared requires it to submit under param_gates' bar/quote feed and it submits only from on_trade_tick, while NotEnumerated requires it in vike_tradehub's AS_MAKER_NAMES. Its previous reason — reaching crate-internal modules — is what the move removed
sport_copy_followerlives in the simulator crate: reads a SIGNAL series the replay harness synthesizes (portable in principle, not yet moved)

The script arm

One more name resolves by name and sits on neither roster: the inline-source script arm. It is listed here because it fails the same question — "can a daemon mount this by NAME?" — for a different reason, which the registry states:

NameWhere it resolves
rhaithe SCRIPT path, by NAME: this arm compiles a vike_script::RhaiStrategy from an inline src param and lives in vike-backtest (vike-script sits at the SAME layer rank as this crate, so this crate cannot name it; the src requirement is why it is on no roster). Scripts DO mount live — the daemon takes them by PATH, [strategy] rhai = "\<path>", never through this registry.

Scripts DO mount live — the daemon takes them by PATH, [strategy] rhai = "<path>", never through this registry; the scripting tree covers that route.

Where this comes from

vike_strategy::registry::SIMULATOR_ONLY and SCRIPT_ONLY, exported as templates.json at every release; the backtester's own registry test asserts the first table is exactly the set of arms it still owns.

On this page