//! Axis 1 — a single member backtest driven through `DefaultMemberRunner`, the //! shipped `aura_campaign::MemberRunner` implementor, over a shipped example //! blueprint (r_sma) and real GER40 archive data. No `aura` binary involved; //! this program links the library crates only (see Cargo.toml). use std::collections::BTreeMap; use aura_campaign::{CellSpec, MemberRunner}; use aura_ingest::default_data_server; use aura_runner::{DefaultMemberRunner, Env}; const SYMBOL: &str = "GER40"; // September 2024, inclusive epoch-ms — the window the shipped ger40 examples use. const WINDOW_MS: (i64, i64) = (1_725_148_800_000, 1_727_740_799_999); fn main() { let server = default_data_server(); if !server.has_symbol(SYMBOL) { println!("skip: no local {SYMBOL} archive — nothing to demonstrate."); return; } let blueprint_json = std::fs::read_to_string(concat!( env!("CARGO_MANIFEST_DIR"), "/../../crates/aura-cli/examples/r_sma.json" )) .expect("shipped example blueprint r_sma.json"); let env = Env::std(); let runner = DefaultMemberRunner::new(&env, server, BTreeMap::new(), Vec::new()); let cell = CellSpec { strategy_ordinal: 0, strategy_id: aura_research::content_id_of(&blueprint_json), blueprint_json, axes: BTreeMap::new(), instrument: SYMBOL.to_string(), window_ms: WINDOW_MS, regime: None, regime_ordinal: 0, }; println!("running member: strategy_id={} instrument={SYMBOL}", cell.strategy_id); match runner.run_member(&cell, &[], WINDOW_MS) { Ok(report) => { let m = &report.metrics; println!("member ran OK. metrics:"); println!(" total_pips={:.2} max_drawdown={:.4} bias_sign_flips={}", m.total_pips, m.max_drawdown, m.bias_sign_flips); match &m.r { Some(r) => println!( " R: n_trades={} expectancy_r={:.4} win_rate={:.3} sqn={:.3} sqn_normalized={:.3} net_expectancy_r={:.4}", r.n_trades, r.expectancy_r, r.win_rate, r.sqn, r.sqn_normalized, r.net_expectancy_r ), None => println!(" R: (none)"), } } Err(fault) => println!("member fault (data-dependent): {fault:?}"), } }