vike
Tools

list_strategies

The compiled native strategy names a profile's strategy.name can resolve on the datahub you are pointed at.

Asks the remote vike-datahub server which compiled native backtest strategies it offers — the names a profile's strategy.name can resolve. Takes no arguments, requires a reachable datahub at --addr, and answers from a compile-time constant rather than from the store.

Input and output

The input schema is an empty object. tool_list_strategies connects like the run tools and calls DatahubClient::list_strategies, which sends the ListStrategies verb and reads back Response::Strategies — vike_backtest::harness::STRATEGIES, over RPC, in its declared order. That order is a documented wire property, so the answer is stable across calls rather than alphabetized by whoever rendered it.

{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"list_strategies","arguments":{}}}

The result is { "strategies": [ … ] } — a flat list of names. As the const stands in this workspace, in declared order:

{ "strategies": [
  "buy_hold", "rotation_top_k", "bracket_per_symbol", "gated_weights", "caps_sizers_mask",
  "tick_pair_mse", "cheap_catch_updown_fair_value", "sport_copy_follower", "grid",
  "dca_accumulate", "spread_maker", "gueant_maker", "trailing_scalper", "momentum",
  "funding_carry", "funding_capture", "pairs_zscore"
] }

Call the tool rather than copying that list: the roster belongs to the server's build, and this tool exists so an agent can discover it instead of assuming it.

What the roster is, and is not

STRATEGIES is the union of two registry halves. The portable half lives in vike_strategy::registry and is generic over the broker, so the same strategy a backtest ran can be mounted by the live daemon. The simulator half stays in vike-backtest for two reasons that vike_strategy::SIMULATOR_ONLY keeps apart: five names are impl Strategy<SimBroker> reference strategies that reach the simulator's own machinery, and two are portable in principle but reach that crate's internal modules. Either way, vike-backtest is the crate the live daemon deliberately does not depend on, so those names backtest and do not mount. The portable registry and simulator-only strategies are the two pages; each portable name also has its own template page with its parameter keys.

rhai is not in this list, and that is deliberate

The registry has a "rhai" arm, and it is the one a script runs through — but it needs a src param, so it is not resolvable with default params. Listing it would break every consumer that enumerates this roster and resolves each name with empty params. Scripts are the other route to the same engine: hand your source to run_backtest's script argument under name = "rhai", and use list_templates for starters.

A user strategy the server can run is not in this answer

strategy_by_name tries the built-in arms first and then consults the user registry compiled from user_data/strategies/rust, so a user name resolves — but the wire verb returns harness::STRATEGIES and nothing else. The list is the built-in roster, not everything the server will accept. The harness's own "unknown strategy" error does name both sets, so a typo's message is more complete than this tool's answer.

Failure modes

An unknown strategy.name is a validation error at profile load — the harness fails fast rather than silently no-opping on a typo, which is why checking against this list before authoring a profile is worth one call.

Unlike the three run verbs, ListStrategies is observe scope on the server: it returns a compile-time const roster, not store contents, and is served on every build, DataFusion or not. It is still reached here through DatahubClient::connect, so a datahub that advertises the auth feature refuses at connect like every other tool on this plane. An unreachable server is a clean tool error, never a panic — list_strategies_without_a_reachable_datahub_is_a_clean_error is the pin, and list_strategies_is_advertised_read_only holds its readOnlyHint.

The prompt

Which built-in strategies can I name in a profile on this server?

Then pair the name with list_series to pick a [data] range, and run_backtest to run it.

On this page