Files
foxhunt/config/training/dqn-localdev.toml
jgrusewski 366832be44 refactor(data_source): default to mbp10 across smoke + localdev profiles
Smoke and localdev profiles previously used data_source = "ohlcv", divergent
from production (mbp10). Mismatch silently produced cache-key collisions in
the SHA256 hash path: smoke fxcache could not be loaded by production-shape
training without an explicit override. Local-dev fxcache regen also required
remembering to pass --data-source ohlcv to match.

Globalize mbp10 as the default everywhere it isn't deliberately overridden:
- config/training/dqn-smoketest.toml: data_source = "mbp10"
- config/training/dqn-localdev.toml: data_source = "mbp10"
- training_profile.rs: doc Default → "mbp10"
- trainers/dqn/config.rs: Default impl → "mbp10"
- hyperopt/adapters/dqn.rs: default → "mbp10"
- examples/precompute_features.rs: doc updated
- fxcache.rs / feature_cache.rs: discover_and_load + cache-key tests
  use "mbp10" arguments
- docs/dqn-wire-up-audit.md: new entry per Invariant 7

Documentation strings retained "ohlcv" only where they document the two
available choices (config.rs:946, training_profile.rs:83).

Local fxcache regenerated to v6 mbp10:
test_data/feature-cache/13c0b086a975cc7e2384377a2cd0e97738c9410292fcfecb5807c29bf885cb48.fxcache
(175874 bars, 55 MB, OFI_DIM=32). Stale v5 ohlcv fxcache untracked
from git index (already gitignored post-79578bbaf).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:35:47 +02:00

129 lines
3.2 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DQN Local Dev Profile — extended training on RTX 3050 (4GB VRAM)
# Larger buffer + more episodes than smoketest for meaningful convergence.
# gpu_n_episodes=auto × gpu_timesteps=200 (auto-scaled from VRAM)
# buffer_size=50K → fills over ~4 epochs, reducing memorization
[training]
epochs = 200
batch_size = 64
learning_rate = 0.0001
gamma = 0.95
weight_decay = 0.0001
adam_epsilon = 1e-8
warmup_steps = 0
hidden_dim_base = 64
reward_scale = 1.0
huber_delta = 1.0
lr_decay_type = 2
lr_min = 0.00001
# Data source: "mbp10" — matches production (MBP-10 imbalance bars)
data_source = "mbp10"
# OFI feature enrichment from MBP-10 order book data (8 features: OFI L1/L5, depth imbalance, VPIN, Kyle's lambda, bid/ask slope, trade imbalance)
mbp10_data_dir = "test_data/futures-baseline-mbp10"
trades_data_dir = "test_data/futures-baseline-trades"
[distributional]
num_atoms = 52
[exploration]
epsilon_start = 0.3
epsilon_end = 0.02
epsilon_decay = 0.85
noisy_sigma_init = 0.3
entropy_coefficient = 0.001
count_bonus_coefficient = 0.1
q_gap_threshold = 0.05
[replay_buffer]
buffer_size = 50000
min_replay_size = 500
regime_replay_decay = 0.3
[early_stopping]
enabled = true
patience = 20
min_epochs_before_stopping = 80
[experience]
gpu_timesteps_per_episode = 200
gpu_n_episodes = 128
[experience.fill_simulation]
ioc_fill_prob = 0.85
limit_fill_min = 0.30
limit_fill_max = 0.80
tx_cost_multiplier = 0.18 # IBKR ES: 0.18 bps = $4.50/contract RT
spread_cost_frac = 0.50
spread_capture_frac = 0.50
[risk]
max_leverage = 5.0
max_position = 2.0 # legacy fallback; ignored when max_leverage is set and reference price is available
loss_aversion = 1.0
q_clip_min = -50.0
q_clip_max = 50.0
[advanced]
n_steps = 5
tau = 0.005
c51_warmup_epochs = 5
her_ratio = 0.2
cql_alpha = 1.0
curiosity_weight = 0.1
iqn_lambda = 0.25
spectral_norm_sigma_max = 1.5
spectral_decoupling_lambda = 0.01
gradient_clip_norm = 1.0
[generalization]
shrink_perturb_interval = 20
shrink_perturb_alpha = 0.85
shrink_perturb_sigma = 0.01
adversarial_dd_threshold = 0.005
adversarial_epochs_trigger = 5
anti_lr_good_mult = 3.0
anti_lr_bad_mult = 0.3
anti_lr_sharpe_threshold = 0.3
feature_mask_fraction = 0.3
feature_noise_scale = 0.1
causal_weight = 0.1
causal_intervention_interval = 10
adversarial_warmup_epochs = 50
adversarial_checkpoint_interval = 50
bottleneck_dim = 16
stochastic_depth_prob = 0.2
asymmetric_dd_weight = 0.5
time_reversal_mod = 5
regret_blend = 0.3
trade_clustering_penalty = 0.05
ensemble_disagreement_penalty = 0.3
mixup_alpha = 0.2
# Core family intensity scalars for hyperopt (1.0 = neutral, range [0.0, 2.0])
learning_intensity = 1.0
exploration_intensity = 1.0
replay_intensity = 1.0
architecture_intensity = 1.0
risk_intensity = 1.0
# Generalization family intensity scalars for hyperopt (1.0 = neutral, range [0.0, 2.0])
adversarial_intensity = 1.0
regularization_intensity = 1.0
augmentation_intensity = 1.0
loss_shaping_intensity = 1.0
ensemble_intensity = 1.0
causal_intensity = 1.0
[reward]
# v8 comprehensive training overhaul
popart_enabled = true
micro_reward_scale = 0.01
td_lambda = 0.9
max_trace_length = 7
hindsight_fraction = 0.1
hindsight_lookahead = 10
loss_aversion = 1.0
q_gap_threshold = 0.1
w_dd = 1.0
dd_threshold = 0.02
cea_weight = 0.3
b3_size = 3