fix: wire bars_per_day + trading_days_per_year to backtest evaluator
- bars_per_day: now propagated from DQNHyperparameters to GpuBacktestConfig (was silently using Default 390.0 regardless of hyperparams setting) - trading_days_per_year: added to GpuBacktestConfig, replaces hardcoded 252.0 in annualization_factor computation - Annualization: sqrt(bars_per_day * trading_days_per_year) is now fully configurable for any bar frequency and market calendar Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -191,6 +191,8 @@ pub struct GpuBacktestConfig {
|
||||
/// CME initial margin ~6% of notional for equity index futures.
|
||||
/// Default: 0.06.
|
||||
pub margin_pct: f32,
|
||||
/// Trading days per year for annualization. CME equity/futures: 252. Crypto: 365.
|
||||
pub trading_days_per_year: f32,
|
||||
}
|
||||
|
||||
impl Default for GpuBacktestConfig {
|
||||
@@ -205,6 +207,7 @@ impl Default for GpuBacktestConfig {
|
||||
ofi_dim: 0,
|
||||
bars_per_day: 390.0, // 1-minute bar frequency (6.5h × 60min)
|
||||
min_hold_bars: 5,
|
||||
trading_days_per_year: 252.0,
|
||||
margin_pct: 0.06,
|
||||
}
|
||||
}
|
||||
@@ -577,7 +580,7 @@ impl GpuBacktestEvaluator {
|
||||
feature_dim,
|
||||
portfolio_dim: PORTFOLIO_AND_MTF_DIM,
|
||||
state_dim,
|
||||
annualization_factor: (config.bars_per_day * 252.0).sqrt(),
|
||||
annualization_factor: (config.bars_per_day * config.trading_days_per_year).sqrt(),
|
||||
config,
|
||||
forward_actions_buf,
|
||||
cublas_forward: None,
|
||||
|
||||
@@ -1766,6 +1766,8 @@ impl DQNTrainer {
|
||||
// directly, eliminating the Candle narrow+cat closure.
|
||||
ofi_dim: if ofi_enabled { 8 } else { 0 },
|
||||
min_hold_bars: internal_trainer.hyperparams().min_hold_bars as i32,
|
||||
bars_per_day: internal_trainer.hyperparams().bars_per_day as f32,
|
||||
trading_days_per_year: internal_trainer.hyperparams().trading_days_per_year as f32,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user