mirror of
https://github.com/lucasmos/GoldRegime_X.git
synced 2026-11-02 06:26:15 +00:00
- Added a cooldown period to prevent immediate re-entries after a trade, reducing churn in rapidly oscillating regimes. - Simplified exit conditions by removing ATR trailing, partial close, and profit guard during optimization. - Adjusted minimum confirmation bars for H1 to enhance stability before entries and exits. - Lowered the floor for reg_lambda in optimizer to allow for better HMM state signals. - Implemented a regime oscillation guard in the CPCV execution to skip paths with excessive transitions, mitigating potential drawdowns.
4680 lines
650 KiB
Plaintext
4680 lines
650 KiB
Plaintext
PS C:\GoldRegime_X> python main.py --mode optimize --tf H1 --broker headway_cent --balance 15 --trials 130
|
|
[2026-05-16 11:23:40,482 INFO] main: Optimizing [H1] broker=headway_cent balance=$15 trials=130 wfo_mode=standard
|
|
[I 2026-05-16 11:23:42,785] A new study created in RDB with name: gold_regime_x_small_headway_cent
|
|
|
|
Starting WFO study 'gold_regime_x_small_headway_cent' — target 130 trials.
|
|
WFO [H1]: IS=8760 bars OOS=2160 bars embargo=24 bars step=4320 bars
|
|
Recommended trial counts — H1:60 M15:100 M5:120
|
|
|
|
0%| | 0/130 [00:00<?, ?it/s][2026-05-16 11:23:50,341 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:23:50,342 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:23:50,342 INFO] src.engine_hmm: Bull 0.9818 0.0023 0.0159
|
|
[2026-05-16 11:23:50,342 INFO] src.engine_hmm: Bear 0.0008 0.9736 0.0256
|
|
[2026-05-16 11:23:50,343 INFO] src.engine_hmm: Chop 0.0243 0.0056 0.9700
|
|
[2026-05-16 11:23:50,343 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:23:50,343 INFO] src.engine_hmm: Bull: return=0.052540, vol=-0.512736, rsi_slope=0.001870
|
|
[2026-05-16 11:23:50,344 INFO] src.engine_hmm: Bear: return=-0.178265, vol=1.755476, rsi_slope=-0.013507
|
|
[2026-05-16 11:23:50,344 INFO] src.engine_hmm: Chop: return=-0.012359, vol=0.115410, rsi_slope=0.001918
|
|
[2026-05-16 11:23:50,344 INFO] src.engine_hmm: Total regime transitions: 1029
|
|
[2026-05-16 11:23:50,345 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 04:00:00: Chop -> Bear
|
|
[2026-05-16 11:23:50,345 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:23:50,346 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:23:50,346 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:23:50,346 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:23:50,346 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:23:50,346 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:23:50,348 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:50,348 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:23:50,348 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:23:50,405 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:50,449 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:51,060 INFO] src.engine_xgb: XGB Train Acc: 0.5155 | Test Acc: 0.5155
|
|
[2026-05-16 11:23:51,061 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11180289), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.093107), 'atr_normalized': np.float32(0.09739913), 'prev_log_return': np.float32(0.08598229), 'usdchf_log_return': np.float32(0.33319706), 'xagusd_log_return': np.float32(0.097164296), 'xtiusd_log_return': np.float32(0.09283329), 'synth_vix_zscore': np.float32(0.08851402)}
|
|
[2026-05-16 11:23:51,061 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:23:51,633 INFO] src.engine_xgb: XGB Train Acc: 0.5225 | Test Acc: 0.5225
|
|
[2026-05-16 11:23:51,633 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.095208324), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.094623245), 'atr_normalized': np.float32(0.09452862), 'prev_log_return': np.float32(0.089874454), 'usdchf_log_return': np.float32(0.33156407), 'xagusd_log_return': np.float32(0.09120376), 'xtiusd_log_return': np.float32(0.097651765), 'synth_vix_zscore': np.float32(0.10534581)}
|
|
[2026-05-16 11:23:51,634 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:23:52,210 INFO] src.engine_xgb: XGB Train Acc: 0.5042 | Test Acc: 0.5042
|
|
[2026-05-16 11:23:52,210 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11074654), 'gmm_vol_cluster': np.float32(0.08421036), 'rsi_slope': np.float32(0.09032304), 'atr_normalized': np.float32(0.112142734), 'prev_log_return': np.float32(0.0842449), 'usdchf_log_return': np.float32(0.23607525), 'xagusd_log_return': np.float32(0.08545781), 'xtiusd_log_return': np.float32(0.09218443), 'synth_vix_zscore': np.float32(0.104614936)}
|
|
[2026-05-16 11:23:52,211 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:23:52,212 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:52,580 INFO] src.backtester: Backtest [H1]: Sharpe=1.145 | MaxDD=0.022 | WR=0.548 | Return=10.6% | Trades=42
|
|
[2026-05-16 11:23:52,581 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:23:54,868 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:23:54,868 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:23:54,869 INFO] src.engine_hmm: Bull 0.9720 0.0225 0.0055
|
|
[2026-05-16 11:23:54,869 INFO] src.engine_hmm: Bear 0.0179 0.9798 0.0023
|
|
[2026-05-16 11:23:54,869 INFO] src.engine_hmm: Chop 0.0234 0.0013 0.9753
|
|
[2026-05-16 11:23:54,870 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:23:54,870 INFO] src.engine_hmm: Bull: return=0.018667, vol=0.062031, rsi_slope=0.004694
|
|
[2026-05-16 11:23:54,870 INFO] src.engine_hmm: Bear: return=-0.021694, vol=-0.518560, rsi_slope=-0.000166
|
|
[2026-05-16 11:23:54,870 INFO] src.engine_hmm: Chop: return=0.018439, vol=1.623007, rsi_slope=-0.013863
|
|
[2026-05-16 11:23:54,871 INFO] src.engine_hmm: Total regime transitions: 1051
|
|
[2026-05-16 11:23:54,871 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:23:54,871 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 11:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:54,872 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:23:54,872 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:54,872 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:23:54,873 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:54,873 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:23:54,873 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:54,873 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:23:54,874 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:23:54,932 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:54,978 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:55,965 INFO] src.engine_xgb: XGB Train Acc: 0.5332 | Test Acc: 0.5332
|
|
[2026-05-16 11:23:55,966 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13834411), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.088238366), 'atr_normalized': np.float32(0.09064301), 'prev_log_return': np.float32(0.09124341), 'usdchf_log_return': np.float32(0.34993216), 'xagusd_log_return': np.float32(0.080188006), 'xtiusd_log_return': np.float32(0.08145867), 'synth_vix_zscore': np.float32(0.079952165)}
|
|
[2026-05-16 11:23:55,966 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:23:57,221 INFO] src.engine_xgb: XGB Train Acc: 0.5209 | Test Acc: 0.5209
|
|
[2026-05-16 11:23:57,222 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08855366), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08689184), 'atr_normalized': np.float32(0.10416106), 'prev_log_return': np.float32(0.0834788), 'usdchf_log_return': np.float32(0.3343126), 'xagusd_log_return': np.float32(0.09301872), 'xtiusd_log_return': np.float32(0.090327196), 'synth_vix_zscore': np.float32(0.11925617)}
|
|
[2026-05-16 11:23:57,222 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:23:58,510 INFO] src.engine_xgb: XGB Train Acc: 0.5079 | Test Acc: 0.5079
|
|
[2026-05-16 11:23:58,511 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09009223), 'gmm_vol_cluster': np.float32(0.08395617), 'rsi_slope': np.float32(0.09250714), 'atr_normalized': np.float32(0.09890339), 'prev_log_return': np.float32(0.08907771), 'usdchf_log_return': np.float32(0.26022163), 'xagusd_log_return': np.float32(0.09397194), 'xtiusd_log_return': np.float32(0.09932957), 'synth_vix_zscore': np.float32(0.09194018)}
|
|
[2026-05-16 11:23:58,512 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:23:58,513 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:23:59,063 INFO] src.backtester: Backtest [H1]: Sharpe=-5.947 | MaxDD=1.118 | WR=0.322 | Return=-66.8% | Trades=807
|
|
[2026-05-16 11:23:59,064 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:01,125 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: Bull 0.9731 0.0064 0.0205
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: Bear 0.0233 0.9761 0.0006
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: Chop 0.0175 0.0014 0.9811
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:01,126 INFO] src.engine_hmm: Bull: return=0.041087, vol=0.052658, rsi_slope=-0.000564
|
|
[2026-05-16 11:24:01,127 INFO] src.engine_hmm: Bear: return=-0.056656, vol=1.639364, rsi_slope=-0.003153
|
|
[2026-05-16 11:24:01,127 INFO] src.engine_hmm: Chop: return=-0.020259, vol=-0.547438, rsi_slope=0.001475
|
|
[2026-05-16 11:24:01,127 INFO] src.engine_hmm: Total regime transitions: 986
|
|
[2026-05-16 11:24:01,128 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:01,128 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:01,129 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:01,129 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:01,129 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:01,130 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:01,130 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:01,131 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:01,131 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:01,131 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:01,196 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:01,237 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:01,918 INFO] src.engine_xgb: XGB Train Acc: 0.5259 | Test Acc: 0.5259
|
|
[2026-05-16 11:24:01,918 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12447956), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.084907696), 'atr_normalized': np.float32(0.08938208), 'prev_log_return': np.float32(0.086174116), 'usdchf_log_return': np.float32(0.34940192), 'xagusd_log_return': np.float32(0.07811135), 'xtiusd_log_return': np.float32(0.0848401), 'synth_vix_zscore': np.float32(0.102703184)}
|
|
[2026-05-16 11:24:01,919 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:24:02,734 INFO] src.engine_xgb: XGB Train Acc: 0.5272 | Test Acc: 0.5272
|
|
[2026-05-16 11:24:02,735 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13357589), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.080143526), 'atr_normalized': np.float32(0.096390516), 'prev_log_return': np.float32(0.08207623), 'usdchf_log_return': np.float32(0.32067356), 'xagusd_log_return': np.float32(0.08741418), 'xtiusd_log_return': np.float32(0.086289495), 'synth_vix_zscore': np.float32(0.1134366)}
|
|
[2026-05-16 11:24:02,735 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:24:03,551 INFO] src.engine_xgb: XGB Train Acc: 0.5084 | Test Acc: 0.5084
|
|
[2026-05-16 11:24:03,552 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.102627486), 'gmm_vol_cluster': np.float32(0.07767129), 'rsi_slope': np.float32(0.088814035), 'atr_normalized': np.float32(0.11672052), 'prev_log_return': np.float32(0.08098837), 'usdchf_log_return': np.float32(0.23650247), 'xagusd_log_return': np.float32(0.08907659), 'xtiusd_log_return': np.float32(0.09446233), 'synth_vix_zscore': np.float32(0.11313695)}
|
|
[2026-05-16 11:24:03,553 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:24:03,556 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:04,049 INFO] src.backtester: Backtest [H1]: Sharpe=0.353 | MaxDD=0.063 | WR=0.468 | Return=4.9% | Trades=124
|
|
[2026-05-16 11:24:04,049 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:06,139 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:06,139 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:06,139 INFO] src.engine_hmm: Bull 0.9742 0.0059 0.0199
|
|
[2026-05-16 11:24:06,139 INFO] src.engine_hmm: Bear 0.0231 0.9763 0.0006
|
|
[2026-05-16 11:24:06,139 INFO] src.engine_hmm: Chop 0.0170 0.0017 0.9813
|
|
[2026-05-16 11:24:06,140 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:06,140 INFO] src.engine_hmm: Bull: return=0.020691, vol=0.052371, rsi_slope=-0.000571
|
|
[2026-05-16 11:24:06,140 INFO] src.engine_hmm: Bear: return=-0.084490, vol=1.650475, rsi_slope=-0.000499
|
|
[2026-05-16 11:24:06,140 INFO] src.engine_hmm: Chop: return=0.006360, vol=-0.547714, rsi_slope=0.000680
|
|
[2026-05-16 11:24:06,141 INFO] src.engine_hmm: Total regime transitions: 979
|
|
[2026-05-16 11:24:06,141 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:06,141 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:06,142 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:06,142 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:06,142 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:06,142 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 10:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:06,143 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:06,143 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:06,143 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:06,143 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:06,201 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:06,244 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:07,031 INFO] src.engine_xgb: XGB Train Acc: 0.5339 | Test Acc: 0.5339
|
|
[2026-05-16 11:24:07,032 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10607741), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08229636), 'atr_normalized': np.float32(0.08720933), 'prev_log_return': np.float32(0.09047313), 'usdchf_log_return': np.float32(0.38961282), 'xagusd_log_return': np.float32(0.0789191), 'xtiusd_log_return': np.float32(0.08137818), 'synth_vix_zscore': np.float32(0.084033616)}
|
|
[2026-05-16 11:24:07,032 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:24:07,825 INFO] src.engine_xgb: XGB Train Acc: 0.5224 | Test Acc: 0.5224
|
|
[2026-05-16 11:24:07,825 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09921867), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.096483), 'atr_normalized': np.float32(0.09574731), 'prev_log_return': np.float32(0.09527798), 'usdchf_log_return': np.float32(0.3218405), 'xagusd_log_return': np.float32(0.09135313), 'xtiusd_log_return': np.float32(0.09328354), 'synth_vix_zscore': np.float32(0.10679588)}
|
|
[2026-05-16 11:24:07,826 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:24:08,612 INFO] src.engine_xgb: XGB Train Acc: 0.5067 | Test Acc: 0.5067
|
|
[2026-05-16 11:24:08,613 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.082559064), 'gmm_vol_cluster': np.float32(0.10148889), 'rsi_slope': np.float32(0.091871895), 'atr_normalized': np.float32(0.10482863), 'prev_log_return': np.float32(0.08161047), 'usdchf_log_return': np.float32(0.25135276), 'xagusd_log_return': np.float32(0.087615706), 'xtiusd_log_return': np.float32(0.09197821), 'synth_vix_zscore': np.float32(0.106694475)}
|
|
[2026-05-16 11:24:08,613 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:24:08,615 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:09,096 INFO] src.backtester: Backtest [H1]: Sharpe=0.230 | MaxDD=0.060 | WR=0.410 | Return=3.0% | Trades=100
|
|
[2026-05-16 11:24:09,096 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:11,259 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:11,259 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:11,260 INFO] src.engine_hmm: Bull 0.9656 0.0248 0.0097
|
|
[2026-05-16 11:24:11,260 INFO] src.engine_hmm: Bear 0.0185 0.9768 0.0047
|
|
[2026-05-16 11:24:11,260 INFO] src.engine_hmm: Chop 0.0260 0.0020 0.9719
|
|
[2026-05-16 11:24:11,260 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:11,261 INFO] src.engine_hmm: Bull: return=0.047239, vol=0.018935, rsi_slope=0.003065
|
|
[2026-05-16 11:24:11,261 INFO] src.engine_hmm: Bear: return=-0.029043, vol=-0.700888, rsi_slope=-0.004191
|
|
[2026-05-16 11:24:11,261 INFO] src.engine_hmm: Chop: return=-0.028002, vol=1.428762, rsi_slope=0.003001
|
|
[2026-05-16 11:24:11,261 INFO] src.engine_hmm: Total regime transitions: 1236
|
|
[2026-05-16 11:24:11,262 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:11,262 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:11,262 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:11,262 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:11,263 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:11,263 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:11,263 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:11,263 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:11,264 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:11,264 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:11,325 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:11,361 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:12,098 INFO] src.engine_xgb: XGB Train Acc: 0.5325 | Test Acc: 0.5325
|
|
[2026-05-16 11:24:12,099 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12181332), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08155318), 'atr_normalized': np.float32(0.09352629), 'prev_log_return': np.float32(0.094859175), 'usdchf_log_return': np.float32(0.35494873), 'xagusd_log_return': np.float32(0.08292779), 'xtiusd_log_return': np.float32(0.079410836), 'synth_vix_zscore': np.float32(0.09096058)}
|
|
[2026-05-16 11:24:12,099 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:24:12,892 INFO] src.engine_xgb: XGB Train Acc: 0.5275 | Test Acc: 0.5275
|
|
[2026-05-16 11:24:12,893 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10430162), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08342793), 'atr_normalized': np.float32(0.084995404), 'prev_log_return': np.float32(0.089211375), 'usdchf_log_return': np.float32(0.35626283), 'xagusd_log_return': np.float32(0.08891907), 'xtiusd_log_return': np.float32(0.09474888), 'synth_vix_zscore': np.float32(0.09813286)}
|
|
[2026-05-16 11:24:12,894 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:24:13,738 INFO] src.engine_xgb: XGB Train Acc: 0.5053 | Test Acc: 0.5053
|
|
[2026-05-16 11:24:13,738 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08981879), 'gmm_vol_cluster': np.float32(0.08850189), 'rsi_slope': np.float32(0.08871321), 'atr_normalized': np.float32(0.11346954), 'prev_log_return': np.float32(0.08185508), 'usdchf_log_return': np.float32(0.26438913), 'xagusd_log_return': np.float32(0.08642822), 'xtiusd_log_return': np.float32(0.09282321), 'synth_vix_zscore': np.float32(0.09400088)}
|
|
[2026-05-16 11:24:13,739 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:24:13,741 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:14,308 INFO] src.backtester: Backtest [H1]: Sharpe=-4.750 | MaxDD=0.759 | WR=0.342 | Return=-52.8% | Trades=593
|
|
[2026-05-16 11:24:14,308 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:17,134 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:17,135 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:17,135 INFO] src.engine_hmm: Bull 0.9706 0.0048 0.0246
|
|
[2026-05-16 11:24:17,135 INFO] src.engine_hmm: Bear 0.0238 0.9745 0.0016
|
|
[2026-05-16 11:24:17,135 INFO] src.engine_hmm: Chop 0.0187 0.0027 0.9786
|
|
[2026-05-16 11:24:17,135 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:17,136 INFO] src.engine_hmm: Bull: return=0.018922, vol=0.074329, rsi_slope=0.000980
|
|
[2026-05-16 11:24:17,136 INFO] src.engine_hmm: Bear: return=-0.040812, vol=1.685100, rsi_slope=-0.008940
|
|
[2026-05-16 11:24:17,136 INFO] src.engine_hmm: Chop: return=-0.005269, vol=-0.511117, rsi_slope=0.001541
|
|
[2026-05-16 11:24:17,136 INFO] src.engine_hmm: Total regime transitions: 1094
|
|
[2026-05-16 11:24:17,136 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:17,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:17,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:17,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:17,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:17,138 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:17,138 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:17,138 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:17,139 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:17,139 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:17,193 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:17,228 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:17,916 INFO] src.engine_xgb: XGB Train Acc: 0.5195 | Test Acc: 0.5195
|
|
[2026-05-16 11:24:17,917 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13325119), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.082399815), 'atr_normalized': np.float32(0.096709), 'prev_log_return': np.float32(0.08882224), 'usdchf_log_return': np.float32(0.33695945), 'xagusd_log_return': np.float32(0.08994091), 'xtiusd_log_return': np.float32(0.07999862), 'synth_vix_zscore': np.float32(0.0919188)}
|
|
[2026-05-16 11:24:17,917 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:24:18,844 INFO] src.engine_xgb: XGB Train Acc: 0.5113 | Test Acc: 0.5113
|
|
[2026-05-16 11:24:18,845 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.097016044), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.099975795), 'atr_normalized': np.float32(0.10274471), 'prev_log_return': np.float32(0.09320056), 'usdchf_log_return': np.float32(0.32457116), 'xagusd_log_return': np.float32(0.08991375), 'xtiusd_log_return': np.float32(0.0903399), 'synth_vix_zscore': np.float32(0.102238126)}
|
|
[2026-05-16 11:24:18,845 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:24:19,647 INFO] src.engine_xgb: XGB Train Acc: 0.5017 | Test Acc: 0.5017
|
|
[2026-05-16 11:24:19,648 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.088453844), 'gmm_vol_cluster': np.float32(0.08004325), 'rsi_slope': np.float32(0.08818322), 'atr_normalized': np.float32(0.107221596), 'prev_log_return': np.float32(0.08618913), 'usdchf_log_return': np.float32(0.26057094), 'xagusd_log_return': np.float32(0.08700094), 'xtiusd_log_return': np.float32(0.10053085), 'synth_vix_zscore': np.float32(0.10180626)}
|
|
[2026-05-16 11:24:19,648 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:24:19,650 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:20,119 INFO] src.backtester: Backtest [H1]: Sharpe=-0.264 | MaxDD=0.153 | WR=0.400 | Return=-5.4% | Trades=185
|
|
[2026-05-16 11:24:20,119 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:24,294 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:24,294 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:24,295 INFO] src.engine_hmm: Bull 0.9716 0.0057 0.0227
|
|
[2026-05-16 11:24:24,295 INFO] src.engine_hmm: Bear 0.0239 0.9754 0.0008
|
|
[2026-05-16 11:24:24,295 INFO] src.engine_hmm: Chop 0.0177 0.0017 0.9805
|
|
[2026-05-16 11:24:24,295 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:24,295 INFO] src.engine_hmm: Bull: return=0.036537, vol=0.082321, rsi_slope=-0.000518
|
|
[2026-05-16 11:24:24,296 INFO] src.engine_hmm: Bear: return=-0.142567, vol=1.741296, rsi_slope=-0.004489
|
|
[2026-05-16 11:24:24,296 INFO] src.engine_hmm: Chop: return=0.006746, vol=-0.530868, rsi_slope=0.001628
|
|
[2026-05-16 11:24:24,296 INFO] src.engine_hmm: Total regime transitions: 1029
|
|
[2026-05-16 11:24:24,296 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:24,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:24,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:24,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:24,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:24,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:24,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:24,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:24,299 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:24,299 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:24,360 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:24,406 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:25,180 INFO] src.engine_xgb: XGB Train Acc: 0.5143 | Test Acc: 0.5143
|
|
[2026-05-16 11:24:25,180 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11073073), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0910141), 'atr_normalized': np.float32(0.09840679), 'prev_log_return': np.float32(0.086959265), 'usdchf_log_return': np.float32(0.33298752), 'xagusd_log_return': np.float32(0.09742938), 'xtiusd_log_return': np.float32(0.09035892), 'synth_vix_zscore': np.float32(0.0921133)}
|
|
[2026-05-16 11:24:25,181 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:24:26,001 INFO] src.engine_xgb: XGB Train Acc: 0.5154 | Test Acc: 0.5154
|
|
[2026-05-16 11:24:26,001 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07985171), 'gmm_vol_cluster': np.float32(0.11558045), 'rsi_slope': np.float32(0.09037979), 'atr_normalized': np.float32(0.09456152), 'prev_log_return': np.float32(0.08303381), 'usdchf_log_return': np.float32(0.2639157), 'xagusd_log_return': np.float32(0.08927794), 'xtiusd_log_return': np.float32(0.08818854), 'synth_vix_zscore': np.float32(0.09521046)}
|
|
[2026-05-16 11:24:26,002 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:24:26,825 INFO] src.engine_xgb: XGB Train Acc: 0.5124 | Test Acc: 0.5124
|
|
[2026-05-16 11:24:26,825 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.087255724), 'gmm_vol_cluster': np.float32(0.07500664), 'rsi_slope': np.float32(0.088839054), 'atr_normalized': np.float32(0.11505518), 'prev_log_return': np.float32(0.08181301), 'usdchf_log_return': np.float32(0.25533903), 'xagusd_log_return': np.float32(0.08840178), 'xtiusd_log_return': np.float32(0.09216919), 'synth_vix_zscore': np.float32(0.11612041)}
|
|
[2026-05-16 11:24:26,826 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:24:26,828 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:27,318 INFO] src.backtester: Backtest [H1]: Sharpe=0.203 | MaxDD=0.057 | WR=0.481 | Return=2.0% | Trades=79
|
|
[2026-05-16 11:24:27,319 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:30,375 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:30,376 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:30,376 INFO] src.engine_hmm: Bull 0.9808 0.0022 0.0169
|
|
[2026-05-16 11:24:30,376 INFO] src.engine_hmm: Bear 0.0010 0.9752 0.0238
|
|
[2026-05-16 11:24:30,376 INFO] src.engine_hmm: Chop 0.0224 0.0053 0.9723
|
|
[2026-05-16 11:24:30,377 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:30,377 INFO] src.engine_hmm: Bull: return=0.032817, vol=-0.528968, rsi_slope=-0.001027
|
|
[2026-05-16 11:24:30,377 INFO] src.engine_hmm: Bear: return=-0.188151, vol=1.731442, rsi_slope=-0.004422
|
|
[2026-05-16 11:24:30,377 INFO] src.engine_hmm: Chop: return=0.020686, vol=0.078985, rsi_slope=0.002620
|
|
[2026-05-16 11:24:30,378 INFO] src.engine_hmm: Total regime transitions: 1006
|
|
[2026-05-16 11:24:30,378 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:30,378 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:30,378 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:30,379 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:30,379 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:30,379 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:30,379 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:24:30,380 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:24:30,380 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:30,380 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:30,438 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:30,473 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:31,237 INFO] src.engine_xgb: XGB Train Acc: 0.5185 | Test Acc: 0.5185
|
|
[2026-05-16 11:24:31,237 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08122851), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09547128), 'atr_normalized': np.float32(0.09951138), 'prev_log_return': np.float32(0.08542967), 'usdchf_log_return': np.float32(0.36405283), 'xagusd_log_return': np.float32(0.09476536), 'xtiusd_log_return': np.float32(0.08507034), 'synth_vix_zscore': np.float32(0.09447066)}
|
|
[2026-05-16 11:24:31,238 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:24:32,107 INFO] src.engine_xgb: XGB Train Acc: 0.5174 | Test Acc: 0.5174
|
|
[2026-05-16 11:24:32,108 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06880024), 'gmm_vol_cluster': np.float32(0.08128706), 'rsi_slope': np.float32(0.099805474), 'atr_normalized': np.float32(0.08920669), 'prev_log_return': np.float32(0.08941701), 'usdchf_log_return': np.float32(0.2886156), 'xagusd_log_return': np.float32(0.092021644), 'xtiusd_log_return': np.float32(0.09269933), 'synth_vix_zscore': np.float32(0.098147)}
|
|
[2026-05-16 11:24:32,108 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:24:32,936 INFO] src.engine_xgb: XGB Train Acc: 0.5047 | Test Acc: 0.5047
|
|
[2026-05-16 11:24:32,936 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.079973854), 'gmm_vol_cluster': np.float32(0.08275416), 'rsi_slope': np.float32(0.0909275), 'atr_normalized': np.float32(0.10726441), 'prev_log_return': np.float32(0.08178597), 'usdchf_log_return': np.float32(0.26102516), 'xagusd_log_return': np.float32(0.09088802), 'xtiusd_log_return': np.float32(0.094429724), 'synth_vix_zscore': np.float32(0.110951245)}
|
|
[2026-05-16 11:24:32,937 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:24:32,939 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:33,426 INFO] src.backtester: Backtest [H1]: Sharpe=-0.123 | MaxDD=0.051 | WR=0.409 | Return=-1.0% | Trades=66
|
|
[2026-05-16 11:24:33,427 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:35,823 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:35,823 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:35,823 INFO] src.engine_hmm: Bull 0.9645 0.0096 0.0259
|
|
[2026-05-16 11:24:35,824 INFO] src.engine_hmm: Bear 0.0280 0.9695 0.0025
|
|
[2026-05-16 11:24:35,824 INFO] src.engine_hmm: Chop 0.0195 0.0059 0.9746
|
|
[2026-05-16 11:24:35,824 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:35,824 INFO] src.engine_hmm: Bull: return=0.024803, vol=0.009380, rsi_slope=0.001360
|
|
[2026-05-16 11:24:35,824 INFO] src.engine_hmm: Bear: return=-0.062349, vol=1.414745, rsi_slope=0.001770
|
|
[2026-05-16 11:24:35,826 INFO] src.engine_hmm: Chop: return=0.007189, vol=-0.698075, rsi_slope=-0.002134
|
|
[2026-05-16 11:24:35,826 INFO] src.engine_hmm: Total regime transitions: 1318
|
|
[2026-05-16 11:24:35,826 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:35,827 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:35,827 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:35,827 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:35,827 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:35,828 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:35,828 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:35,828 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:35,828 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:35,829 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 01:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:35,889 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:35,924 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:36,738 INFO] src.engine_xgb: XGB Train Acc: 0.5171 | Test Acc: 0.5171
|
|
[2026-05-16 11:24:36,739 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.104449555), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08003678), 'atr_normalized': np.float32(0.09451907), 'prev_log_return': np.float32(0.08963417), 'usdchf_log_return': np.float32(0.3587429), 'xagusd_log_return': np.float32(0.094563015), 'xtiusd_log_return': np.float32(0.084746085), 'synth_vix_zscore': np.float32(0.09330846)}
|
|
[2026-05-16 11:24:36,739 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:24:37,523 INFO] src.engine_xgb: XGB Train Acc: 0.5119 | Test Acc: 0.5119
|
|
[2026-05-16 11:24:37,524 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10442385), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09508682), 'atr_normalized': np.float32(0.10093966), 'prev_log_return': np.float32(0.09772478), 'usdchf_log_return': np.float32(0.32609347), 'xagusd_log_return': np.float32(0.08609545), 'xtiusd_log_return': np.float32(0.09110865), 'synth_vix_zscore': np.float32(0.098527275)}
|
|
[2026-05-16 11:24:37,524 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:24:38,304 INFO] src.engine_xgb: XGB Train Acc: 0.5005 | Test Acc: 0.5005
|
|
[2026-05-16 11:24:38,305 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.064867705), 'gmm_vol_cluster': np.float32(0.070411995), 'rsi_slope': np.float32(0.098313205), 'atr_normalized': np.float32(0.124013156), 'prev_log_return': np.float32(0.08666593), 'usdchf_log_return': np.float32(0.2699567), 'xagusd_log_return': np.float32(0.08939668), 'xtiusd_log_return': np.float32(0.09525487), 'synth_vix_zscore': np.float32(0.10111979)}
|
|
[2026-05-16 11:24:38,305 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:24:38,307 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:38,827 INFO] src.backtester: Backtest [H1]: Sharpe=-1.209 | MaxDD=0.555 | WR=0.365 | Return=-37.4% | Trades=337
|
|
[2026-05-16 11:24:38,828 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:41,809 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:41,809 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Bull 0.9729 0.0217 0.0054
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Bear 0.0185 0.9799 0.0016
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Chop 0.0221 0.0013 0.9765
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Bull: return=0.051903, vol=0.056347, rsi_slope=0.006142
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Bear: return=-0.049683, vol=-0.513133, rsi_slope=-0.000165
|
|
[2026-05-16 11:24:41,810 INFO] src.engine_hmm: Chop: return=0.008867, vol=1.671046, rsi_slope=-0.019627
|
|
[2026-05-16 11:24:41,811 INFO] src.engine_hmm: Total regime transitions: 1007
|
|
[2026-05-16 11:24:41,811 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:41,811 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:41,811 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:41,812 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:41,812 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:41,812 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:41,813 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:41,813 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:41,813 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-06 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:41,813 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-09 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:41,872 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:41,911 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:42,647 INFO] src.engine_xgb: XGB Train Acc: 0.5262 | Test Acc: 0.5262
|
|
[2026-05-16 11:24:42,647 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07183461), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.085515514), 'atr_normalized': np.float32(0.09146847), 'prev_log_return': np.float32(0.09212384), 'usdchf_log_return': np.float32(0.3832233), 'xagusd_log_return': np.float32(0.09126554), 'xtiusd_log_return': np.float32(0.0872105), 'synth_vix_zscore': np.float32(0.09735827)}
|
|
[2026-05-16 11:24:42,648 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:24:43,487 INFO] src.engine_xgb: XGB Train Acc: 0.5071 | Test Acc: 0.5071
|
|
[2026-05-16 11:24:43,487 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1476439), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09133513), 'atr_normalized': np.float32(0.099918015), 'prev_log_return': np.float32(0.083011284), 'usdchf_log_return': np.float32(0.30440134), 'xagusd_log_return': np.float32(0.08629847), 'xtiusd_log_return': np.float32(0.0872789), 'synth_vix_zscore': np.float32(0.100112975)}
|
|
[2026-05-16 11:24:43,488 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:24:44,278 INFO] src.engine_xgb: XGB Train Acc: 0.5114 | Test Acc: 0.5114
|
|
[2026-05-16 11:24:44,279 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.101206176), 'gmm_vol_cluster': np.float32(0.09114343), 'rsi_slope': np.float32(0.08631882), 'atr_normalized': np.float32(0.10264893), 'prev_log_return': np.float32(0.07961012), 'usdchf_log_return': np.float32(0.27206996), 'xagusd_log_return': np.float32(0.09073008), 'xtiusd_log_return': np.float32(0.088747434), 'synth_vix_zscore': np.float32(0.08752502)}
|
|
[2026-05-16 11:24:44,279 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:24:44,281 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:44,768 INFO] src.backtester: Backtest [H1]: Sharpe=-4.016 | MaxDD=0.670 | WR=0.333 | Return=-48.7% | Trades=598
|
|
[2026-05-16 11:24:44,769 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:47,213 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:47,213 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: Bull 0.9740 0.0048 0.0211
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: Bear 0.0222 0.9765 0.0013
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: Chop 0.0169 0.0018 0.9813
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: Bull: return=0.041894, vol=0.074735, rsi_slope=0.003907
|
|
[2026-05-16 11:24:47,214 INFO] src.engine_hmm: Bear: return=-0.055622, vol=1.732046, rsi_slope=-0.007197
|
|
[2026-05-16 11:24:47,215 INFO] src.engine_hmm: Chop: return=-0.022259, vol=-0.505765, rsi_slope=-0.001565
|
|
[2026-05-16 11:24:47,215 INFO] src.engine_hmm: Total regime transitions: 955
|
|
[2026-05-16 11:24:47,215 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:47,215 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 22:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:47,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:47,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:47,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 20:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:47,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:47,276 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:47,314 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:48,067 INFO] src.engine_xgb: XGB Train Acc: 0.5361 | Test Acc: 0.5361
|
|
[2026-05-16 11:24:48,067 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10181532), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08575481), 'atr_normalized': np.float32(0.082649544), 'prev_log_return': np.float32(0.09265516), 'usdchf_log_return': np.float32(0.38532406), 'xagusd_log_return': np.float32(0.08683077), 'xtiusd_log_return': np.float32(0.07672396), 'synth_vix_zscore': np.float32(0.08824638)}
|
|
[2026-05-16 11:24:48,068 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:24:48,869 INFO] src.engine_xgb: XGB Train Acc: 0.5104 | Test Acc: 0.5104
|
|
[2026-05-16 11:24:48,870 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13925688), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09675326), 'atr_normalized': np.float32(0.09305661), 'prev_log_return': np.float32(0.08685661), 'usdchf_log_return': np.float32(0.30035475), 'xagusd_log_return': np.float32(0.09115918), 'xtiusd_log_return': np.float32(0.086231664), 'synth_vix_zscore': np.float32(0.10633102)}
|
|
[2026-05-16 11:24:48,870 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:24:49,665 INFO] src.engine_xgb: XGB Train Acc: 0.5083 | Test Acc: 0.5083
|
|
[2026-05-16 11:24:49,665 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08811121), 'gmm_vol_cluster': np.float32(0.07361338), 'rsi_slope': np.float32(0.096614234), 'atr_normalized': np.float32(0.09858113), 'prev_log_return': np.float32(0.08143707), 'usdchf_log_return': np.float32(0.28710535), 'xagusd_log_return': np.float32(0.09042812), 'xtiusd_log_return': np.float32(0.096955575), 'synth_vix_zscore': np.float32(0.08715397)}
|
|
[2026-05-16 11:24:49,666 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:24:49,668 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:50,148 INFO] src.backtester: Backtest [H1]: Sharpe=-0.625 | MaxDD=0.237 | WR=0.353 | Return=-13.6% | Trades=269
|
|
[2026-05-16 11:24:50,148 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:53,501 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:53,501 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:53,501 INFO] src.engine_hmm: Bull 0.9659 0.0030 0.0311
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: Bear 0.0061 0.9757 0.0183
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: Chop 0.0095 0.0254 0.9652
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: Bull: return=0.046962, vol=1.499545, rsi_slope=0.002412
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: Bear: return=-0.037576, vol=-0.716611, rsi_slope=-0.002987
|
|
[2026-05-16 11:24:53,502 INFO] src.engine_hmm: Chop: return=0.019134, vol=0.079246, rsi_slope=0.002146
|
|
[2026-05-16 11:24:53,503 INFO] src.engine_hmm: Total regime transitions: 1323
|
|
[2026-05-16 11:24:53,503 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:53,503 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:53,504 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:53,504 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:53,504 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:53,504 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:53,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:53,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:53,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:24:53,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:24:53,565 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:53,604 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:54,323 INFO] src.engine_xgb: XGB Train Acc: 0.5353 | Test Acc: 0.5353
|
|
[2026-05-16 11:24:54,324 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09184031), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08027392), 'atr_normalized': np.float32(0.08066825), 'prev_log_return': np.float32(0.0840354), 'usdchf_log_return': np.float32(0.39431646), 'xagusd_log_return': np.float32(0.09005069), 'xtiusd_log_return': np.float32(0.0824776), 'synth_vix_zscore': np.float32(0.096337415)}
|
|
[2026-05-16 11:24:54,324 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:24:55,160 INFO] src.engine_xgb: XGB Train Acc: 0.5085 | Test Acc: 0.5085
|
|
[2026-05-16 11:24:55,161 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.101689264), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09001091), 'atr_normalized': np.float32(0.104949735), 'prev_log_return': np.float32(0.08614353), 'usdchf_log_return': np.float32(0.32304898), 'xagusd_log_return': np.float32(0.09283022), 'xtiusd_log_return': np.float32(0.088136785), 'synth_vix_zscore': np.float32(0.113190584)}
|
|
[2026-05-16 11:24:55,161 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:24:55,967 INFO] src.engine_xgb: XGB Train Acc: 0.5094 | Test Acc: 0.5094
|
|
[2026-05-16 11:24:55,968 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08969756), 'gmm_vol_cluster': np.float32(0.12664698), 'rsi_slope': np.float32(0.08235784), 'atr_normalized': np.float32(0.08481447), 'prev_log_return': np.float32(0.07417975), 'usdchf_log_return': np.float32(0.300513), 'xagusd_log_return': np.float32(0.07839078), 'xtiusd_log_return': np.float32(0.082888365), 'synth_vix_zscore': np.float32(0.08051129)}
|
|
[2026-05-16 11:24:55,968 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:24:55,971 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:56,446 INFO] src.backtester: Backtest [H1]: Sharpe=-2.107 | MaxDD=0.582 | WR=0.324 | Return=-44.1% | Trades=339
|
|
[2026-05-16 11:24:56,446 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:24:58,526 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:24:58,526 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:24:58,526 INFO] src.engine_hmm: Bull 0.9749 0.0058 0.0194
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: Bear 0.0218 0.9775 0.0007
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: Chop 0.0165 0.0012 0.9823
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: Bull: return=0.060897, vol=0.057261, rsi_slope=-0.000747
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: Bear: return=-0.126238, vol=1.706526, rsi_slope=0.002623
|
|
[2026-05-16 11:24:58,527 INFO] src.engine_hmm: Chop: return=-0.019190, vol=-0.537520, rsi_slope=-0.000071
|
|
[2026-05-16 11:24:58,528 INFO] src.engine_hmm: Total regime transitions: 928
|
|
[2026-05-16 11:24:58,528 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:24:58,528 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:24:58,529 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:58,529 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:58,529 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:58,529 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 20:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:58,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:58,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:24:58,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:24:58,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:24:58,592 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:58,631 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:24:59,394 INFO] src.engine_xgb: XGB Train Acc: 0.5301 | Test Acc: 0.5301
|
|
[2026-05-16 11:24:59,395 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09658929), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0866514), 'atr_normalized': np.float32(0.08090588), 'prev_log_return': np.float32(0.08802368), 'usdchf_log_return': np.float32(0.38347033), 'xagusd_log_return': np.float32(0.08573209), 'xtiusd_log_return': np.float32(0.08048455), 'synth_vix_zscore': np.float32(0.098142795)}
|
|
[2026-05-16 11:24:59,395 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:25:00,348 INFO] src.engine_xgb: XGB Train Acc: 0.5183 | Test Acc: 0.5183
|
|
[2026-05-16 11:25:00,348 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16548318), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08842916), 'atr_normalized': np.float32(0.09664605), 'prev_log_return': np.float32(0.08275727), 'usdchf_log_return': np.float32(0.2988959), 'xagusd_log_return': np.float32(0.08609436), 'xtiusd_log_return': np.float32(0.084400244), 'synth_vix_zscore': np.float32(0.09729387)}
|
|
[2026-05-16 11:25:00,349 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:25:01,211 INFO] src.engine_xgb: XGB Train Acc: 0.5098 | Test Acc: 0.5098
|
|
[2026-05-16 11:25:01,212 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09923332), 'gmm_vol_cluster': np.float32(0.06928245), 'rsi_slope': np.float32(0.092910044), 'atr_normalized': np.float32(0.10929674), 'prev_log_return': np.float32(0.08221217), 'usdchf_log_return': np.float32(0.2621536), 'xagusd_log_return': np.float32(0.092444405), 'xtiusd_log_return': np.float32(0.08519974), 'synth_vix_zscore': np.float32(0.10726754)}
|
|
[2026-05-16 11:25:01,212 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:25:01,214 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:01,725 INFO] src.backtester: Backtest [H1]: Sharpe=-0.578 | MaxDD=0.102 | WR=0.399 | Return=-6.9% | Trades=153
|
|
[2026-05-16 11:25:01,725 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:03,802 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:03,802 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:03,802 INFO] src.engine_hmm: Bull 0.9665 0.0232 0.0103
|
|
[2026-05-16 11:25:03,803 INFO] src.engine_hmm: Bear 0.0186 0.9772 0.0042
|
|
[2026-05-16 11:25:03,803 INFO] src.engine_hmm: Chop 0.0267 0.0013 0.9719
|
|
[2026-05-16 11:25:03,803 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:03,803 INFO] src.engine_hmm: Bull: return=0.043795, vol=-0.003331, rsi_slope=0.005675
|
|
[2026-05-16 11:25:03,804 INFO] src.engine_hmm: Bear: return=-0.042592, vol=-0.705975, rsi_slope=-0.004001
|
|
[2026-05-16 11:25:03,804 INFO] src.engine_hmm: Chop: return=0.001556, vol=1.417616, rsi_slope=-0.002834
|
|
[2026-05-16 11:25:03,804 INFO] src.engine_hmm: Total regime transitions: 1230
|
|
[2026-05-16 11:25:03,805 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:03,805 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:03,805 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:03,805 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:03,806 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:03,806 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:03,806 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:03,807 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 07:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:03,807 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:03,807 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:03,881 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:03,928 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:04,724 INFO] src.engine_xgb: XGB Train Acc: 0.5295 | Test Acc: 0.5295
|
|
[2026-05-16 11:25:04,724 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09873303), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0866038), 'atr_normalized': np.float32(0.08275557), 'prev_log_return': np.float32(0.08813268), 'usdchf_log_return': np.float32(0.37660006), 'xagusd_log_return': np.float32(0.08306551), 'xtiusd_log_return': np.float32(0.08616569), 'synth_vix_zscore': np.float32(0.09794364)}
|
|
[2026-05-16 11:25:04,725 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:25:05,505 INFO] src.engine_xgb: XGB Train Acc: 0.5092 | Test Acc: 0.5092
|
|
[2026-05-16 11:25:05,506 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11624098), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09290404), 'atr_normalized': np.float32(0.098840475), 'prev_log_return': np.float32(0.08483397), 'usdchf_log_return': np.float32(0.32578868), 'xagusd_log_return': np.float32(0.092230186), 'xtiusd_log_return': np.float32(0.0912234), 'synth_vix_zscore': np.float32(0.09793824)}
|
|
[2026-05-16 11:25:05,506 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:25:06,340 INFO] src.engine_xgb: XGB Train Acc: 0.5069 | Test Acc: 0.5069
|
|
[2026-05-16 11:25:06,341 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.076440856), 'gmm_vol_cluster': np.float32(0.08549429), 'rsi_slope': np.float32(0.08991054), 'atr_normalized': np.float32(0.10773573), 'prev_log_return': np.float32(0.07960178), 'usdchf_log_return': np.float32(0.28204605), 'xagusd_log_return': np.float32(0.09066746), 'xtiusd_log_return': np.float32(0.09036106), 'synth_vix_zscore': np.float32(0.0977423)}
|
|
[2026-05-16 11:25:06,342 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:25:06,343 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:06,826 INFO] src.backtester: Backtest [H1]: Sharpe=-1.786 | MaxDD=0.503 | WR=0.379 | Return=-39.5% | Trades=406
|
|
[2026-05-16 11:25:06,827 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:09,068 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:09,068 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:09,068 INFO] src.engine_hmm: Bull 0.9666 0.0096 0.0237
|
|
[2026-05-16 11:25:09,068 INFO] src.engine_hmm: Bear 0.0276 0.9708 0.0017
|
|
[2026-05-16 11:25:09,069 INFO] src.engine_hmm: Chop 0.0175 0.0042 0.9782
|
|
[2026-05-16 11:25:09,069 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:09,069 INFO] src.engine_hmm: Bull: return=0.054854, vol=0.034838, rsi_slope=0.001810
|
|
[2026-05-16 11:25:09,069 INFO] src.engine_hmm: Bear: return=-0.082263, vol=1.472265, rsi_slope=0.009376
|
|
[2026-05-16 11:25:09,070 INFO] src.engine_hmm: Chop: return=-0.012664, vol=-0.674261, rsi_slope=-0.005701
|
|
[2026-05-16 11:25:09,070 INFO] src.engine_hmm: Total regime transitions: 1212
|
|
[2026-05-16 11:25:09,070 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:09,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:09,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:09,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:09,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:09,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:09,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:09,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:09,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:09,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:09,133 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:09,168 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:09,897 INFO] src.engine_xgb: XGB Train Acc: 0.5378 | Test Acc: 0.5378
|
|
[2026-05-16 11:25:09,897 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06292252), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0854024), 'atr_normalized': np.float32(0.097689606), 'prev_log_return': np.float32(0.0958998), 'usdchf_log_return': np.float32(0.39432195), 'xagusd_log_return': np.float32(0.09016365), 'xtiusd_log_return': np.float32(0.08197916), 'synth_vix_zscore': np.float32(0.09162096)}
|
|
[2026-05-16 11:25:09,898 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:25:10,683 INFO] src.engine_xgb: XGB Train Acc: 0.5162 | Test Acc: 0.5162
|
|
[2026-05-16 11:25:10,684 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13657403), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08695542), 'atr_normalized': np.float32(0.0880642), 'prev_log_return': np.float32(0.08751801), 'usdchf_log_return': np.float32(0.31821877), 'xagusd_log_return': np.float32(0.086799406), 'xtiusd_log_return': np.float32(0.091847554), 'synth_vix_zscore': np.float32(0.10402258)}
|
|
[2026-05-16 11:25:10,684 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:25:11,541 INFO] src.engine_xgb: XGB Train Acc: 0.5096 | Test Acc: 0.5096
|
|
[2026-05-16 11:25:11,541 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07566825), 'gmm_vol_cluster': np.float32(0.08489222), 'rsi_slope': np.float32(0.09860708), 'atr_normalized': np.float32(0.1016349), 'prev_log_return': np.float32(0.0770511), 'usdchf_log_return': np.float32(0.29760087), 'xagusd_log_return': np.float32(0.079472624), 'xtiusd_log_return': np.float32(0.08923243), 'synth_vix_zscore': np.float32(0.09584058)}
|
|
[2026-05-16 11:25:11,542 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:25:11,544 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:12,047 INFO] src.backtester: Backtest [H1]: Sharpe=-1.443 | MaxDD=0.663 | WR=0.361 | Return=-44.5% | Trades=496
|
|
[2026-05-16 11:25:12,048 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:12,078 INFO] src.optimizer: CPCV [H1]: 7/15 valid paths | median_score=-50.000 std=25.149 | median_sharpe=-10.000 | median_trades=269 | final_score=-56.287
|
|
[2026-05-16 11:25:12,138 INFO] src.optimizer: Trial 0 [H1/headway_cent]: score=-56.287 | valid_paths=7/15 | std_sharpe=5.070 | median_trades=269
|
|
Best trial: 0. Best value: -56.2871: 1%|▌ | 1/130 [01:29<3:12:08, 89.37s/it][2026-05-16 11:25:15,585 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:15,585 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:15,586 INFO] src.engine_hmm: Bull 0.9819 0.0023 0.0158
|
|
[2026-05-16 11:25:15,586 INFO] src.engine_hmm: Bear 0.0009 0.9739 0.0253
|
|
[2026-05-16 11:25:15,586 INFO] src.engine_hmm: Chop 0.0241 0.0056 0.9703
|
|
[2026-05-16 11:25:15,586 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:15,586 INFO] src.engine_hmm: Bull: return=0.053040, vol=-0.512852, rsi_slope=0.001508
|
|
[2026-05-16 11:25:15,587 INFO] src.engine_hmm: Bear: return=-0.176225, vol=1.753676, rsi_slope=-0.013053
|
|
[2026-05-16 11:25:15,587 INFO] src.engine_hmm: Chop: return=-0.013542, vol=0.114559, rsi_slope=0.002265
|
|
[2026-05-16 11:25:15,587 INFO] src.engine_hmm: Total regime transitions: 1023
|
|
[2026-05-16 11:25:15,588 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 04:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:15,588 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:15,589 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:15,589 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:15,590 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:15,590 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:15,590 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:15,591 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:15,591 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:15,591 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:15,653 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:15,693 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:15,934 INFO] src.engine_xgb: XGB Train Acc: 0.5736 | Test Acc: 0.5736
|
|
[2026-05-16 11:25:15,935 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13724808), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10674292), 'atr_normalized': np.float32(0.10650234), 'prev_log_return': np.float32(0.11360319), 'usdchf_log_return': np.float32(0.21083756), 'xagusd_log_return': np.float32(0.112876646), 'xtiusd_log_return': np.float32(0.10935048), 'synth_vix_zscore': np.float32(0.10283885)}
|
|
[2026-05-16 11:25:15,935 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:25:16,198 INFO] src.engine_xgb: XGB Train Acc: 0.5760 | Test Acc: 0.5760
|
|
[2026-05-16 11:25:16,199 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.089777656), 'gmm_vol_cluster': np.float32(0.0851297), 'rsi_slope': np.float32(0.107271515), 'atr_normalized': np.float32(0.105383724), 'prev_log_return': np.float32(0.10014963), 'usdchf_log_return': np.float32(0.20305781), 'xagusd_log_return': np.float32(0.09909152), 'xtiusd_log_return': np.float32(0.100662395), 'synth_vix_zscore': np.float32(0.10947604)}
|
|
[2026-05-16 11:25:16,199 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:25:16,485 INFO] src.engine_xgb: XGB Train Acc: 0.5628 | Test Acc: 0.5628
|
|
[2026-05-16 11:25:16,485 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1097327), 'gmm_vol_cluster': np.float32(0.09576804), 'rsi_slope': np.float32(0.10430122), 'atr_normalized': np.float32(0.11407886), 'prev_log_return': np.float32(0.09627081), 'usdchf_log_return': np.float32(0.16611066), 'xagusd_log_return': np.float32(0.1035856), 'xtiusd_log_return': np.float32(0.10328053), 'synth_vix_zscore': np.float32(0.1068716)}
|
|
[2026-05-16 11:25:16,486 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:25:16,487 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:16,829 INFO] src.backtester: Backtest [H1]: Sharpe=-7.903 | MaxDD=1.871 | WR=0.324 | Return=-84.6% | Trades=1226
|
|
[2026-05-16 11:25:16,830 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:19,025 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:19,025 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:19,025 INFO] src.engine_hmm: Bull 0.9760 0.0013 0.0227
|
|
[2026-05-16 11:25:19,025 INFO] src.engine_hmm: Bear 0.0023 0.9799 0.0179
|
|
[2026-05-16 11:25:19,026 INFO] src.engine_hmm: Chop 0.0054 0.0225 0.9721
|
|
[2026-05-16 11:25:19,026 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:19,026 INFO] src.engine_hmm: Bull: return=0.032514, vol=1.606066, rsi_slope=-0.014394
|
|
[2026-05-16 11:25:19,026 INFO] src.engine_hmm: Bear: return=-0.024151, vol=-0.518890, rsi_slope=-0.000158
|
|
[2026-05-16 11:25:19,026 INFO] src.engine_hmm: Chop: return=0.016758, vol=0.059743, rsi_slope=0.004943
|
|
[2026-05-16 11:25:19,027 INFO] src.engine_hmm: Total regime transitions: 1047
|
|
[2026-05-16 11:25:19,027 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:19,027 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:19,027 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:19,028 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:19,028 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:19,028 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:19,028 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:19,029 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:19,029 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:19,029 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:19,082 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:19,114 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:19,330 INFO] src.engine_xgb: XGB Train Acc: 0.5846 | Test Acc: 0.5846
|
|
[2026-05-16 11:25:19,331 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13460813), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.105953254), 'atr_normalized': np.float32(0.11075658), 'prev_log_return': np.float32(0.10786036), 'usdchf_log_return': np.float32(0.23176832), 'xagusd_log_return': np.float32(0.102223895), 'xtiusd_log_return': np.float32(0.10170246), 'synth_vix_zscore': np.float32(0.10512699)}
|
|
[2026-05-16 11:25:19,331 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:25:19,577 INFO] src.engine_xgb: XGB Train Acc: 0.5752 | Test Acc: 0.5752
|
|
[2026-05-16 11:25:19,577 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10523781), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11003411), 'atr_normalized': np.float32(0.114417575), 'prev_log_return': np.float32(0.102952376), 'usdchf_log_return': np.float32(0.21846886), 'xagusd_log_return': np.float32(0.11850038), 'xtiusd_log_return': np.float32(0.111997545), 'synth_vix_zscore': np.float32(0.11839139)}
|
|
[2026-05-16 11:25:19,578 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:25:19,876 INFO] src.engine_xgb: XGB Train Acc: 0.5601 | Test Acc: 0.5601
|
|
[2026-05-16 11:25:19,876 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09421879), 'gmm_vol_cluster': np.float32(0.08287978), 'rsi_slope': np.float32(0.10385613), 'atr_normalized': np.float32(0.10950924), 'prev_log_return': np.float32(0.102240525), 'usdchf_log_return': np.float32(0.17933072), 'xagusd_log_return': np.float32(0.10507541), 'xtiusd_log_return': np.float32(0.11624038), 'synth_vix_zscore': np.float32(0.10664896)}
|
|
[2026-05-16 11:25:19,876 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:25:19,878 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:20,197 INFO] src.backtester: Backtest [H1]: Sharpe=-1.824 | MaxDD=0.537 | WR=0.397 | Return=-37.9% | Trades=446
|
|
[2026-05-16 11:25:20,197 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:22,246 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:22,246 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:22,246 INFO] src.engine_hmm: Bull 0.9733 0.0064 0.0204
|
|
[2026-05-16 11:25:22,246 INFO] src.engine_hmm: Bear 0.0229 0.9765 0.0006
|
|
[2026-05-16 11:25:22,247 INFO] src.engine_hmm: Chop 0.0174 0.0014 0.9812
|
|
[2026-05-16 11:25:22,247 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:22,247 INFO] src.engine_hmm: Bull: return=0.044202, vol=0.051834, rsi_slope=-0.000710
|
|
[2026-05-16 11:25:22,247 INFO] src.engine_hmm: Bear: return=-0.057321, vol=1.637456, rsi_slope=-0.002809
|
|
[2026-05-16 11:25:22,247 INFO] src.engine_hmm: Chop: return=-0.022859, vol=-0.547498, rsi_slope=0.001506
|
|
[2026-05-16 11:25:22,248 INFO] src.engine_hmm: Total regime transitions: 986
|
|
[2026-05-16 11:25:22,248 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:22,248 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:22,248 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:22,249 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:22,249 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:22,249 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:22,249 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:22,249 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:22,250 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:22,250 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:22,308 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:22,342 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:22,582 INFO] src.engine_xgb: XGB Train Acc: 0.5806 | Test Acc: 0.5806
|
|
[2026-05-16 11:25:22,583 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1174831), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10757591), 'atr_normalized': np.float32(0.10650841), 'prev_log_return': np.float32(0.102441445), 'usdchf_log_return': np.float32(0.23879947), 'xagusd_log_return': np.float32(0.10727548), 'xtiusd_log_return': np.float32(0.10720034), 'synth_vix_zscore': np.float32(0.112715825)}
|
|
[2026-05-16 11:25:22,583 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:25:22,898 INFO] src.engine_xgb: XGB Train Acc: 0.5799 | Test Acc: 0.5799
|
|
[2026-05-16 11:25:22,899 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11857869), 'gmm_vol_cluster': np.float32(0.10983011), 'rsi_slope': np.float32(0.09472978), 'atr_normalized': np.float32(0.094293185), 'prev_log_return': np.float32(0.09777834), 'usdchf_log_return': np.float32(0.19492821), 'xagusd_log_return': np.float32(0.09118), 'xtiusd_log_return': np.float32(0.096367955), 'synth_vix_zscore': np.float32(0.10231373)}
|
|
[2026-05-16 11:25:22,899 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:25:23,251 INFO] src.engine_xgb: XGB Train Acc: 0.5638 | Test Acc: 0.5638
|
|
[2026-05-16 11:25:23,252 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09919264), 'gmm_vol_cluster': np.float32(0.0997425), 'rsi_slope': np.float32(0.10159635), 'atr_normalized': np.float32(0.11411755), 'prev_log_return': np.float32(0.09979055), 'usdchf_log_return': np.float32(0.16434242), 'xagusd_log_return': np.float32(0.103496484), 'xtiusd_log_return': np.float32(0.10606598), 'synth_vix_zscore': np.float32(0.1116555)}
|
|
[2026-05-16 11:25:23,252 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:25:23,253 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:23,563 INFO] src.backtester: Backtest [H1]: Sharpe=-4.579 | MaxDD=1.113 | WR=0.323 | Return=-66.2% | Trades=734
|
|
[2026-05-16 11:25:23,564 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:26,377 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:26,378 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:26,378 INFO] src.engine_hmm: Bull 0.9743 0.0059 0.0198
|
|
[2026-05-16 11:25:26,378 INFO] src.engine_hmm: Bear 0.0227 0.9768 0.0006
|
|
[2026-05-16 11:25:26,378 INFO] src.engine_hmm: Chop 0.0169 0.0016 0.9814
|
|
[2026-05-16 11:25:26,379 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:26,379 INFO] src.engine_hmm: Bull: return=0.021652, vol=0.052718, rsi_slope=-0.000762
|
|
[2026-05-16 11:25:26,379 INFO] src.engine_hmm: Bear: return=-0.085958, vol=1.651352, rsi_slope=-0.000483
|
|
[2026-05-16 11:25:26,380 INFO] src.engine_hmm: Chop: return=0.005918, vol=-0.547302, rsi_slope=0.000851
|
|
[2026-05-16 11:25:26,380 INFO] src.engine_hmm: Total regime transitions: 973
|
|
[2026-05-16 11:25:26,380 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:26,381 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:26,381 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:26,381 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:26,382 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:26,382 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 10:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:26,382 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:26,383 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:26,383 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:26,383 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:26,456 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:26,496 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:26,816 INFO] src.engine_xgb: XGB Train Acc: 0.5816 | Test Acc: 0.5816
|
|
[2026-05-16 11:25:26,817 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13362813), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10953678), 'atr_normalized': np.float32(0.10951465), 'prev_log_return': np.float32(0.10804762), 'usdchf_log_return': np.float32(0.23786278), 'xagusd_log_return': np.float32(0.100470066), 'xtiusd_log_return': np.float32(0.10110363), 'synth_vix_zscore': np.float32(0.099836275)}
|
|
[2026-05-16 11:25:26,817 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:25:27,091 INFO] src.engine_xgb: XGB Train Acc: 0.5766 | Test Acc: 0.5766
|
|
[2026-05-16 11:25:27,092 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11843998), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11256656), 'atr_normalized': np.float32(0.116137706), 'prev_log_return': np.float32(0.113528885), 'usdchf_log_return': np.float32(0.21309398), 'xagusd_log_return': np.float32(0.10627895), 'xtiusd_log_return': np.float32(0.108932346), 'synth_vix_zscore': np.float32(0.11102159)}
|
|
[2026-05-16 11:25:27,092 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:25:27,364 INFO] src.engine_xgb: XGB Train Acc: 0.5647 | Test Acc: 0.5647
|
|
[2026-05-16 11:25:27,365 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.096491724), 'gmm_vol_cluster': np.float32(0.11108419), 'rsi_slope': np.float32(0.10354471), 'atr_normalized': np.float32(0.10621763), 'prev_log_return': np.float32(0.09847705), 'usdchf_log_return': np.float32(0.17529686), 'xagusd_log_return': np.float32(0.10271344), 'xtiusd_log_return': np.float32(0.09973536), 'synth_vix_zscore': np.float32(0.10643904)}
|
|
[2026-05-16 11:25:27,365 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:25:27,367 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:27,691 INFO] src.backtester: Backtest [H1]: Sharpe=-3.551 | MaxDD=0.830 | WR=0.346 | Return=-55.1% | Trades=700
|
|
[2026-05-16 11:25:27,692 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:30,004 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:30,005 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:30,005 INFO] src.engine_hmm: Bull 0.9657 0.0246 0.0096
|
|
[2026-05-16 11:25:30,005 INFO] src.engine_hmm: Bear 0.0187 0.9768 0.0045
|
|
[2026-05-16 11:25:30,005 INFO] src.engine_hmm: Chop 0.0256 0.0021 0.9724
|
|
[2026-05-16 11:25:30,005 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:30,006 INFO] src.engine_hmm: Bull: return=0.045115, vol=0.019125, rsi_slope=0.002581
|
|
[2026-05-16 11:25:30,006 INFO] src.engine_hmm: Bear: return=-0.028730, vol=-0.700899, rsi_slope=-0.003751
|
|
[2026-05-16 11:25:30,006 INFO] src.engine_hmm: Chop: return=-0.024982, vol=1.433656, rsi_slope=0.002991
|
|
[2026-05-16 11:25:30,006 INFO] src.engine_hmm: Total regime transitions: 1229
|
|
[2026-05-16 11:25:30,007 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:30,007 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:30,007 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:30,007 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:30,008 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:30,008 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:30,008 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:30,009 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:30,009 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:30,009 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:30,068 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:30,107 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:30,340 INFO] src.engine_xgb: XGB Train Acc: 0.5835 | Test Acc: 0.5835
|
|
[2026-05-16 11:25:30,340 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10822596), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11286603), 'atr_normalized': np.float32(0.11432034), 'prev_log_return': np.float32(0.1089829), 'usdchf_log_return': np.float32(0.2317658), 'xagusd_log_return': np.float32(0.103643104), 'xtiusd_log_return': np.float32(0.10774432), 'synth_vix_zscore': np.float32(0.11245152)}
|
|
[2026-05-16 11:25:30,341 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:25:30,590 INFO] src.engine_xgb: XGB Train Acc: 0.5759 | Test Acc: 0.5759
|
|
[2026-05-16 11:25:30,591 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.120033525), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10553311), 'atr_normalized': np.float32(0.105575845), 'prev_log_return': np.float32(0.103076845), 'usdchf_log_return': np.float32(0.22725336), 'xagusd_log_return': np.float32(0.10898713), 'xtiusd_log_return': np.float32(0.11518951), 'synth_vix_zscore': np.float32(0.11435065)}
|
|
[2026-05-16 11:25:30,591 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:25:30,853 INFO] src.engine_xgb: XGB Train Acc: 0.5688 | Test Acc: 0.5688
|
|
[2026-05-16 11:25:30,853 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.098203376), 'gmm_vol_cluster': np.float32(0.09371128), 'rsi_slope': np.float32(0.10848675), 'atr_normalized': np.float32(0.11844566), 'prev_log_return': np.float32(0.09648332), 'usdchf_log_return': np.float32(0.1780731), 'xagusd_log_return': np.float32(0.101109825), 'xtiusd_log_return': np.float32(0.09883713), 'synth_vix_zscore': np.float32(0.106649585)}
|
|
[2026-05-16 11:25:30,854 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:25:30,855 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:31,166 INFO] src.backtester: Backtest [H1]: Sharpe=-3.607 | MaxDD=0.840 | WR=0.365 | Return=-56.3% | Trades=924
|
|
[2026-05-16 11:25:31,166 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:34,087 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:34,088 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:34,088 INFO] src.engine_hmm: Bull 0.9707 0.0048 0.0245
|
|
[2026-05-16 11:25:34,088 INFO] src.engine_hmm: Bear 0.0235 0.9749 0.0016
|
|
[2026-05-16 11:25:34,088 INFO] src.engine_hmm: Chop 0.0186 0.0026 0.9788
|
|
[2026-05-16 11:25:34,089 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:34,089 INFO] src.engine_hmm: Bull: return=0.018678, vol=0.074969, rsi_slope=0.000732
|
|
[2026-05-16 11:25:34,089 INFO] src.engine_hmm: Bear: return=-0.042342, vol=1.684819, rsi_slope=-0.008703
|
|
[2026-05-16 11:25:34,089 INFO] src.engine_hmm: Chop: return=-0.004598, vol=-0.510513, rsi_slope=0.001688
|
|
[2026-05-16 11:25:34,090 INFO] src.engine_hmm: Total regime transitions: 1088
|
|
[2026-05-16 11:25:34,090 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:34,090 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:34,090 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:34,091 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:34,091 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:34,091 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:34,091 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:34,091 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:34,092 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:34,092 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:34,148 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:34,183 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:34,409 INFO] src.engine_xgb: XGB Train Acc: 0.5791 | Test Acc: 0.5791
|
|
[2026-05-16 11:25:34,409 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14440823), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.103983685), 'atr_normalized': np.float32(0.10317675), 'prev_log_return': np.float32(0.103764035), 'usdchf_log_return': np.float32(0.23217502), 'xagusd_log_return': np.float32(0.10340088), 'xtiusd_log_return': np.float32(0.100827865), 'synth_vix_zscore': np.float32(0.10826355)}
|
|
[2026-05-16 11:25:34,409 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:25:34,736 INFO] src.engine_xgb: XGB Train Acc: 0.5706 | Test Acc: 0.5706
|
|
[2026-05-16 11:25:34,737 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10444108), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11734413), 'atr_normalized': np.float32(0.120738685), 'prev_log_return': np.float32(0.11076488), 'usdchf_log_return': np.float32(0.21123035), 'xagusd_log_return': np.float32(0.11117898), 'xtiusd_log_return': np.float32(0.11229324), 'synth_vix_zscore': np.float32(0.112008736)}
|
|
[2026-05-16 11:25:34,737 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:25:35,054 INFO] src.engine_xgb: XGB Train Acc: 0.5617 | Test Acc: 0.5617
|
|
[2026-05-16 11:25:35,054 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09966642), 'gmm_vol_cluster': np.float32(0.09771625), 'rsi_slope': np.float32(0.100678734), 'atr_normalized': np.float32(0.10874145), 'prev_log_return': np.float32(0.10338893), 'usdchf_log_return': np.float32(0.17688386), 'xagusd_log_return': np.float32(0.10267061), 'xtiusd_log_return': np.float32(0.10424997), 'synth_vix_zscore': np.float32(0.1060037)}
|
|
[2026-05-16 11:25:35,055 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:25:35,056 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:35,373 INFO] src.backtester: Backtest [H1]: Sharpe=-2.733 | MaxDD=0.688 | WR=0.330 | Return=-49.2% | Trades=572
|
|
[2026-05-16 11:25:35,373 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:38,695 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:38,696 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:38,696 INFO] src.engine_hmm: Bull 0.9719 0.0057 0.0225
|
|
[2026-05-16 11:25:38,696 INFO] src.engine_hmm: Bear 0.0236 0.9757 0.0007
|
|
[2026-05-16 11:25:38,696 INFO] src.engine_hmm: Chop 0.0176 0.0017 0.9807
|
|
[2026-05-16 11:25:38,696 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:38,697 INFO] src.engine_hmm: Bull: return=0.040371, vol=0.080979, rsi_slope=-0.000330
|
|
[2026-05-16 11:25:38,697 INFO] src.engine_hmm: Bear: return=-0.140254, vol=1.737801, rsi_slope=-0.004788
|
|
[2026-05-16 11:25:38,697 INFO] src.engine_hmm: Chop: return=0.002974, vol=-0.531093, rsi_slope=0.001554
|
|
[2026-05-16 11:25:38,697 INFO] src.engine_hmm: Total regime transitions: 1021
|
|
[2026-05-16 11:25:38,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:38,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:38,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:38,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:38,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:38,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:38,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:38,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:38,700 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:38,700 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:38,757 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:38,793 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:39,005 INFO] src.engine_xgb: XGB Train Acc: 0.5704 | Test Acc: 0.5704
|
|
[2026-05-16 11:25:39,005 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12806773), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10869571), 'atr_normalized': np.float32(0.10729131), 'prev_log_return': np.float32(0.1063573), 'usdchf_log_return': np.float32(0.22333172), 'xagusd_log_return': np.float32(0.11017653), 'xtiusd_log_return': np.float32(0.10807065), 'synth_vix_zscore': np.float32(0.108009)}
|
|
[2026-05-16 11:25:39,006 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:25:39,246 INFO] src.engine_xgb: XGB Train Acc: 0.5697 | Test Acc: 0.5697
|
|
[2026-05-16 11:25:39,246 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10656834), 'gmm_vol_cluster': np.float32(0.06881308), 'rsi_slope': np.float32(0.1028519), 'atr_normalized': np.float32(0.10752742), 'prev_log_return': np.float32(0.10387466), 'usdchf_log_return': np.float32(0.20021182), 'xagusd_log_return': np.float32(0.104197346), 'xtiusd_log_return': np.float32(0.10052305), 'synth_vix_zscore': np.float32(0.105432354)}
|
|
[2026-05-16 11:25:39,247 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:25:39,512 INFO] src.engine_xgb: XGB Train Acc: 0.5643 | Test Acc: 0.5643
|
|
[2026-05-16 11:25:39,513 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10448624), 'gmm_vol_cluster': np.float32(0.08784562), 'rsi_slope': np.float32(0.09708244), 'atr_normalized': np.float32(0.11670114), 'prev_log_return': np.float32(0.10133501), 'usdchf_log_return': np.float32(0.17609426), 'xagusd_log_return': np.float32(0.10143601), 'xtiusd_log_return': np.float32(0.099177666), 'synth_vix_zscore': np.float32(0.11584166)}
|
|
[2026-05-16 11:25:39,513 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:25:39,514 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:39,817 INFO] src.backtester: Backtest [H1]: Sharpe=-3.830 | MaxDD=0.771 | WR=0.322 | Return=-52.8% | Trades=506
|
|
[2026-05-16 11:25:39,817 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:43,527 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:43,528 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:43,528 INFO] src.engine_hmm: Bull 0.9810 0.0022 0.0168
|
|
[2026-05-16 11:25:43,528 INFO] src.engine_hmm: Bear 0.0010 0.9755 0.0235
|
|
[2026-05-16 11:25:43,528 INFO] src.engine_hmm: Chop 0.0222 0.0052 0.9725
|
|
[2026-05-16 11:25:43,528 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:43,529 INFO] src.engine_hmm: Bull: return=0.031566, vol=-0.528391, rsi_slope=-0.001222
|
|
[2026-05-16 11:25:43,529 INFO] src.engine_hmm: Bear: return=-0.189430, vol=1.731478, rsi_slope=-0.004307
|
|
[2026-05-16 11:25:43,529 INFO] src.engine_hmm: Chop: return=0.022550, vol=0.079100, rsi_slope=0.002819
|
|
[2026-05-16 11:25:43,529 INFO] src.engine_hmm: Total regime transitions: 997
|
|
[2026-05-16 11:25:43,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:43,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:43,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:43,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:43,530 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:43,531 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:43,531 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:43,531 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:43,531 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:43,531 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:43,589 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:43,624 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:43,842 INFO] src.engine_xgb: XGB Train Acc: 0.5690 | Test Acc: 0.5690
|
|
[2026-05-16 11:25:43,842 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1074092), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11162514), 'atr_normalized': np.float32(0.11667822), 'prev_log_return': np.float32(0.10995206), 'usdchf_log_return': np.float32(0.22711207), 'xagusd_log_return': np.float32(0.11106177), 'xtiusd_log_return': np.float32(0.10593889), 'synth_vix_zscore': np.float32(0.11022264)}
|
|
[2026-05-16 11:25:43,843 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:25:44,127 INFO] src.engine_xgb: XGB Train Acc: 0.5676 | Test Acc: 0.5676
|
|
[2026-05-16 11:25:44,128 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09341247), 'gmm_vol_cluster': np.float32(0.11924104), 'rsi_slope': np.float32(0.10046059), 'atr_normalized': np.float32(0.09441483), 'prev_log_return': np.float32(0.09600663), 'usdchf_log_return': np.float32(0.19655448), 'xagusd_log_return': np.float32(0.101368606), 'xtiusd_log_return': np.float32(0.09563088), 'synth_vix_zscore': np.float32(0.1029104)}
|
|
[2026-05-16 11:25:44,128 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:25:44,446 INFO] src.engine_xgb: XGB Train Acc: 0.5625 | Test Acc: 0.5625
|
|
[2026-05-16 11:25:44,447 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10299603), 'gmm_vol_cluster': np.float32(0.09215738), 'rsi_slope': np.float32(0.10450817), 'atr_normalized': np.float32(0.109984286), 'prev_log_return': np.float32(0.097028725), 'usdchf_log_return': np.float32(0.1766698), 'xagusd_log_return': np.float32(0.098443136), 'xtiusd_log_return': np.float32(0.106544234), 'synth_vix_zscore': np.float32(0.111668244)}
|
|
[2026-05-16 11:25:44,447 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:25:44,449 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:44,780 INFO] src.backtester: Backtest [H1]: Sharpe=-6.992 | MaxDD=1.622 | WR=0.322 | Return=-80.2% | Trades=1199
|
|
[2026-05-16 11:25:44,780 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:47,214 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:47,215 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:47,215 INFO] src.engine_hmm: Bull 0.9648 0.0094 0.0258
|
|
[2026-05-16 11:25:47,215 INFO] src.engine_hmm: Bear 0.0276 0.9699 0.0025
|
|
[2026-05-16 11:25:47,215 INFO] src.engine_hmm: Chop 0.0195 0.0057 0.9747
|
|
[2026-05-16 11:25:47,215 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:47,216 INFO] src.engine_hmm: Bull: return=0.020839, vol=0.011673, rsi_slope=0.001179
|
|
[2026-05-16 11:25:47,216 INFO] src.engine_hmm: Bear: return=-0.055983, vol=1.422462, rsi_slope=0.002289
|
|
[2026-05-16 11:25:47,216 INFO] src.engine_hmm: Chop: return=0.007572, vol=-0.696920, rsi_slope=-0.002203
|
|
[2026-05-16 11:25:47,216 INFO] src.engine_hmm: Total regime transitions: 1299
|
|
[2026-05-16 11:25:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:47,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:47,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:47,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:47,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:47,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:47,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:47,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:47,220 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 02:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:47,286 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:47,325 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:47,594 INFO] src.engine_xgb: XGB Train Acc: 0.5770 | Test Acc: 0.5770
|
|
[2026-05-16 11:25:47,594 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.114371575), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.103382416), 'atr_normalized': np.float32(0.111860625), 'prev_log_return': np.float32(0.10298698), 'usdchf_log_return': np.float32(0.24645896), 'xagusd_log_return': np.float32(0.11066027), 'xtiusd_log_return': np.float32(0.10426458), 'synth_vix_zscore': np.float32(0.10601462)}
|
|
[2026-05-16 11:25:47,595 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:25:47,863 INFO] src.engine_xgb: XGB Train Acc: 0.5739 | Test Acc: 0.5739
|
|
[2026-05-16 11:25:47,864 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11482966), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10754095), 'atr_normalized': np.float32(0.11345128), 'prev_log_return': np.float32(0.117915854), 'usdchf_log_return': np.float32(0.21889272), 'xagusd_log_return': np.float32(0.10873176), 'xtiusd_log_return': np.float32(0.10840497), 'synth_vix_zscore': np.float32(0.1102329)}
|
|
[2026-05-16 11:25:47,864 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:25:48,134 INFO] src.engine_xgb: XGB Train Acc: 0.5614 | Test Acc: 0.5614
|
|
[2026-05-16 11:25:48,134 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09609403), 'gmm_vol_cluster': np.float32(0.07483615), 'rsi_slope': np.float32(0.10311916), 'atr_normalized': np.float32(0.115714565), 'prev_log_return': np.float32(0.10774415), 'usdchf_log_return': np.float32(0.1827742), 'xagusd_log_return': np.float32(0.107901834), 'xtiusd_log_return': np.float32(0.1026613), 'synth_vix_zscore': np.float32(0.109154634)}
|
|
[2026-05-16 11:25:48,135 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:25:48,136 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:48,445 INFO] src.backtester: Backtest [H1]: Sharpe=-1.871 | MaxDD=0.611 | WR=0.392 | Return=-37.7% | Trades=664
|
|
[2026-05-16 11:25:48,445 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:51,295 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:51,295 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:51,296 INFO] src.engine_hmm: Bull 0.9730 0.0216 0.0053
|
|
[2026-05-16 11:25:51,296 INFO] src.engine_hmm: Bear 0.0184 0.9800 0.0016
|
|
[2026-05-16 11:25:51,296 INFO] src.engine_hmm: Chop 0.0218 0.0012 0.9770
|
|
[2026-05-16 11:25:51,296 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:51,296 INFO] src.engine_hmm: Bull: return=0.049880, vol=0.056596, rsi_slope=0.005687
|
|
[2026-05-16 11:25:51,297 INFO] src.engine_hmm: Bear: return=-0.050986, vol=-0.512929, rsi_slope=0.000303
|
|
[2026-05-16 11:25:51,297 INFO] src.engine_hmm: Chop: return=0.020443, vol=1.671229, rsi_slope=-0.019818
|
|
[2026-05-16 11:25:51,297 INFO] src.engine_hmm: Total regime transitions: 1004
|
|
[2026-05-16 11:25:51,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:51,297 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:51,298 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:51,300 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-06 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:51,300 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-09 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:51,355 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:51,391 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:51,650 INFO] src.engine_xgb: XGB Train Acc: 0.5757 | Test Acc: 0.5757
|
|
[2026-05-16 11:25:51,651 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.112133026), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.111559086), 'atr_normalized': np.float32(0.11061824), 'prev_log_return': np.float32(0.11304634), 'usdchf_log_return': np.float32(0.23615058), 'xagusd_log_return': np.float32(0.10714772), 'xtiusd_log_return': np.float32(0.10175582), 'synth_vix_zscore': np.float32(0.107589185)}
|
|
[2026-05-16 11:25:51,651 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:25:51,954 INFO] src.engine_xgb: XGB Train Acc: 0.5771 | Test Acc: 0.5771
|
|
[2026-05-16 11:25:51,954 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14205408), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.1101802), 'atr_normalized': np.float32(0.11012051), 'prev_log_return': np.float32(0.10213132), 'usdchf_log_return': np.float32(0.20402367), 'xagusd_log_return': np.float32(0.10879793), 'xtiusd_log_return': np.float32(0.11045079), 'synth_vix_zscore': np.float32(0.112241544)}
|
|
[2026-05-16 11:25:51,955 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:25:52,262 INFO] src.engine_xgb: XGB Train Acc: 0.5689 | Test Acc: 0.5689
|
|
[2026-05-16 11:25:52,263 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1181414), 'gmm_vol_cluster': np.float32(0.09652698), 'rsi_slope': np.float32(0.09512409), 'atr_normalized': np.float32(0.10762723), 'prev_log_return': np.float32(0.09354911), 'usdchf_log_return': np.float32(0.18024544), 'xagusd_log_return': np.float32(0.1058944), 'xtiusd_log_return': np.float32(0.10345998), 'synth_vix_zscore': np.float32(0.099431336)}
|
|
[2026-05-16 11:25:52,264 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:25:52,266 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:52,600 INFO] src.backtester: Backtest [H1]: Sharpe=-4.397 | MaxDD=1.328 | WR=0.372 | Return=-72.5% | Trades=936
|
|
[2026-05-16 11:25:52,601 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:55,104 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:55,104 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Bull 0.9742 0.0048 0.0210
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Bear 0.0217 0.9770 0.0013
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Chop 0.0168 0.0018 0.9814
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Bull: return=0.043188, vol=0.072185, rsi_slope=0.003926
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Bear: return=-0.044360, vol=1.713975, rsi_slope=-0.007589
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Chop: return=-0.026153, vol=-0.506414, rsi_slope=-0.001457
|
|
[2026-05-16 11:25:55,105 INFO] src.engine_hmm: Total regime transitions: 945
|
|
[2026-05-16 11:25:55,106 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:55,106 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 22:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:55,107 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:25:55,107 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:25:55,107 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:55,107 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:55,107 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:55,108 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:55,108 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:55,108 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 21:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:55,162 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:55,195 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:55,427 INFO] src.engine_xgb: XGB Train Acc: 0.5803 | Test Acc: 0.5803
|
|
[2026-05-16 11:25:55,428 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12304386), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.111180976), 'atr_normalized': np.float32(0.0979749), 'prev_log_return': np.float32(0.10460925), 'usdchf_log_return': np.float32(0.2474437), 'xagusd_log_return': np.float32(0.10688368), 'xtiusd_log_return': np.float32(0.104823366), 'synth_vix_zscore': np.float32(0.10404021)}
|
|
[2026-05-16 11:25:55,428 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:25:55,706 INFO] src.engine_xgb: XGB Train Acc: 0.5694 | Test Acc: 0.5694
|
|
[2026-05-16 11:25:55,706 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12411631), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11074387), 'atr_normalized': np.float32(0.11392079), 'prev_log_return': np.float32(0.108269714), 'usdchf_log_return': np.float32(0.20958966), 'xagusd_log_return': np.float32(0.108389504), 'xtiusd_log_return': np.float32(0.10541677), 'synth_vix_zscore': np.float32(0.11955337)}
|
|
[2026-05-16 11:25:55,707 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:25:56,022 INFO] src.engine_xgb: XGB Train Acc: 0.5630 | Test Acc: 0.5630
|
|
[2026-05-16 11:25:56,023 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11300544), 'gmm_vol_cluster': np.float32(0.078004256), 'rsi_slope': np.float32(0.108449295), 'atr_normalized': np.float32(0.10431101), 'prev_log_return': np.float32(0.09990404), 'usdchf_log_return': np.float32(0.18860121), 'xagusd_log_return': np.float32(0.098240964), 'xtiusd_log_return': np.float32(0.105789654), 'synth_vix_zscore': np.float32(0.1036941)}
|
|
[2026-05-16 11:25:56,023 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:25:56,025 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:56,342 INFO] src.backtester: Backtest [H1]: Sharpe=-3.349 | MaxDD=1.037 | WR=0.377 | Return=-63.0% | Trades=839
|
|
[2026-05-16 11:25:56,343 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:25:59,673 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:25:59,674 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:25:59,674 INFO] src.engine_hmm: Bull 0.9665 0.0031 0.0304
|
|
[2026-05-16 11:25:59,674 INFO] src.engine_hmm: Bear 0.0058 0.9757 0.0185
|
|
[2026-05-16 11:25:59,674 INFO] src.engine_hmm: Chop 0.0095 0.0253 0.9652
|
|
[2026-05-16 11:25:59,675 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:25:59,675 INFO] src.engine_hmm: Bull: return=0.048333, vol=1.501242, rsi_slope=0.001719
|
|
[2026-05-16 11:25:59,675 INFO] src.engine_hmm: Bear: return=-0.037442, vol=-0.716343, rsi_slope=-0.002808
|
|
[2026-05-16 11:25:59,675 INFO] src.engine_hmm: Chop: return=0.018376, vol=0.078416, rsi_slope=0.002280
|
|
[2026-05-16 11:25:59,675 INFO] src.engine_hmm: Total regime transitions: 1310
|
|
[2026-05-16 11:25:59,676 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:59,676 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:59,676 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:59,677 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:59,677 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:59,677 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:59,677 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:25:59,678 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:25:59,678 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:25:59,678 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:25:59,738 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:25:59,775 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:00,020 INFO] src.engine_xgb: XGB Train Acc: 0.5782 | Test Acc: 0.5782
|
|
[2026-05-16 11:26:00,020 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11133511), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10146996), 'atr_normalized': np.float32(0.10596876), 'prev_log_return': np.float32(0.10643526), 'usdchf_log_return': np.float32(0.25389627), 'xagusd_log_return': np.float32(0.10431225), 'xtiusd_log_return': np.float32(0.10234843), 'synth_vix_zscore': np.float32(0.114233986)}
|
|
[2026-05-16 11:26:00,021 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:26:00,279 INFO] src.engine_xgb: XGB Train Acc: 0.5695 | Test Acc: 0.5695
|
|
[2026-05-16 11:26:00,279 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12072857), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11352573), 'atr_normalized': np.float32(0.11271887), 'prev_log_return': np.float32(0.11127207), 'usdchf_log_return': np.float32(0.21163757), 'xagusd_log_return': np.float32(0.10384194), 'xtiusd_log_return': np.float32(0.10849303), 'synth_vix_zscore': np.float32(0.11778216)}
|
|
[2026-05-16 11:26:00,280 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:26:00,595 INFO] src.engine_xgb: XGB Train Acc: 0.5719 | Test Acc: 0.5719
|
|
[2026-05-16 11:26:00,595 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11282993), 'gmm_vol_cluster': np.float32(0.10375206), 'rsi_slope': np.float32(0.10526279), 'atr_normalized': np.float32(0.099151075), 'prev_log_return': np.float32(0.09175436), 'usdchf_log_return': np.float32(0.19200023), 'xagusd_log_return': np.float32(0.098568685), 'xtiusd_log_return': np.float32(0.0954476), 'synth_vix_zscore': np.float32(0.10123326)}
|
|
[2026-05-16 11:26:00,596 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:26:00,597 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:00,947 INFO] src.backtester: Backtest [H1]: Sharpe=-2.417 | MaxDD=1.158 | WR=0.395 | Return=-67.7% | Trades=813
|
|
[2026-05-16 11:26:00,947 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:03,091 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:03,092 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:26:03,092 INFO] src.engine_hmm: Bull 0.9750 0.0057 0.0193
|
|
[2026-05-16 11:26:03,092 INFO] src.engine_hmm: Bear 0.0215 0.9778 0.0007
|
|
[2026-05-16 11:26:03,092 INFO] src.engine_hmm: Chop 0.0164 0.0012 0.9825
|
|
[2026-05-16 11:26:03,093 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:03,093 INFO] src.engine_hmm: Bull: return=0.063845, vol=0.058396, rsi_slope=-0.001272
|
|
[2026-05-16 11:26:03,093 INFO] src.engine_hmm: Bear: return=-0.127922, vol=1.709270, rsi_slope=0.003179
|
|
[2026-05-16 11:26:03,093 INFO] src.engine_hmm: Chop: return=-0.021280, vol=-0.536715, rsi_slope=0.000246
|
|
[2026-05-16 11:26:03,094 INFO] src.engine_hmm: Total regime transitions: 922
|
|
[2026-05-16 11:26:03,094 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:03,095 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:03,095 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:03,095 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:03,096 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:03,096 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 20:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:03,096 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:03,096 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:03,097 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:03,097 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:26:03,158 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:03,198 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:03,426 INFO] src.engine_xgb: XGB Train Acc: 0.5733 | Test Acc: 0.5733
|
|
[2026-05-16 11:26:03,427 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12079562), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.108569086), 'atr_normalized': np.float32(0.102578014), 'prev_log_return': np.float32(0.106867194), 'usdchf_log_return': np.float32(0.24574782), 'xagusd_log_return': np.float32(0.11006318), 'xtiusd_log_return': np.float32(0.09814187), 'synth_vix_zscore': np.float32(0.10723721)}
|
|
[2026-05-16 11:26:03,427 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:26:03,689 INFO] src.engine_xgb: XGB Train Acc: 0.5723 | Test Acc: 0.5723
|
|
[2026-05-16 11:26:03,689 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13345112), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11384776), 'atr_normalized': np.float32(0.11200315), 'prev_log_return': np.float32(0.10660831), 'usdchf_log_return': np.float32(0.20723496), 'xagusd_log_return': np.float32(0.11002839), 'xtiusd_log_return': np.float32(0.103732124), 'synth_vix_zscore': np.float32(0.11309419)}
|
|
[2026-05-16 11:26:03,690 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:26:03,967 INFO] src.engine_xgb: XGB Train Acc: 0.5644 | Test Acc: 0.5644
|
|
[2026-05-16 11:26:03,968 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12447425), 'gmm_vol_cluster': np.float32(0.09582306), 'rsi_slope': np.float32(0.10084294), 'atr_normalized': np.float32(0.10472224), 'prev_log_return': np.float32(0.09813948), 'usdchf_log_return': np.float32(0.17100275), 'xagusd_log_return': np.float32(0.10389731), 'xtiusd_log_return': np.float32(0.097581334), 'synth_vix_zscore': np.float32(0.10351658)}
|
|
[2026-05-16 11:26:03,968 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:26:03,970 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:04,280 INFO] src.backtester: Backtest [H1]: Sharpe=-4.086 | MaxDD=1.066 | WR=0.363 | Return=-65.3% | Trades=787
|
|
[2026-05-16 11:26:04,281 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:06,332 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:06,333 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:26:06,333 INFO] src.engine_hmm: Bull 0.9666 0.0231 0.0103
|
|
[2026-05-16 11:26:06,333 INFO] src.engine_hmm: Bear 0.0187 0.9773 0.0039
|
|
[2026-05-16 11:26:06,334 INFO] src.engine_hmm: Chop 0.0263 0.0013 0.9724
|
|
[2026-05-16 11:26:06,334 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:06,334 INFO] src.engine_hmm: Bull: return=0.043478, vol=-0.003621, rsi_slope=0.005723
|
|
[2026-05-16 11:26:06,335 INFO] src.engine_hmm: Bear: return=-0.044822, vol=-0.705659, rsi_slope=-0.003965
|
|
[2026-05-16 11:26:06,335 INFO] src.engine_hmm: Chop: return=0.006719, vol=1.418968, rsi_slope=-0.002989
|
|
[2026-05-16 11:26:06,336 INFO] src.engine_hmm: Total regime transitions: 1218
|
|
[2026-05-16 11:26:06,336 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:06,337 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:06,337 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:06,338 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:06,338 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:06,338 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:06,339 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:06,339 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:06,339 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:06,340 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:06,419 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:06,461 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:06,739 INFO] src.engine_xgb: XGB Train Acc: 0.5773 | Test Acc: 0.5773
|
|
[2026-05-16 11:26:06,739 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10757009), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.112341724), 'atr_normalized': np.float32(0.10996247), 'prev_log_return': np.float32(0.11369041), 'usdchf_log_return': np.float32(0.23023579), 'xagusd_log_return': np.float32(0.10408909), 'xtiusd_log_return': np.float32(0.110436775), 'synth_vix_zscore': np.float32(0.11167364)}
|
|
[2026-05-16 11:26:06,740 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:26:07,052 INFO] src.engine_xgb: XGB Train Acc: 0.5706 | Test Acc: 0.5706
|
|
[2026-05-16 11:26:07,052 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.123998106), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10764471), 'atr_normalized': np.float32(0.10978532), 'prev_log_return': np.float32(0.10781291), 'usdchf_log_return': np.float32(0.2173394), 'xagusd_log_return': np.float32(0.1128546), 'xtiusd_log_return': np.float32(0.10780303), 'synth_vix_zscore': np.float32(0.11276189)}
|
|
[2026-05-16 11:26:07,053 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:26:07,365 INFO] src.engine_xgb: XGB Train Acc: 0.5664 | Test Acc: 0.5664
|
|
[2026-05-16 11:26:07,366 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.091785714), 'gmm_vol_cluster': np.float32(0.11489789), 'rsi_slope': np.float32(0.10387532), 'atr_normalized': np.float32(0.10649884), 'prev_log_return': np.float32(0.09828093), 'usdchf_log_return': np.float32(0.17733154), 'xagusd_log_return': np.float32(0.1005954), 'xtiusd_log_return': np.float32(0.09958498), 'synth_vix_zscore': np.float32(0.10714943)}
|
|
[2026-05-16 11:26:07,366 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:26:07,367 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:07,715 INFO] src.backtester: Backtest [H1]: Sharpe=-4.306 | MaxDD=1.056 | WR=0.371 | Return=-65.2% | Trades=955
|
|
[2026-05-16 11:26:07,715 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:10,250 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:10,250 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:26:10,251 INFO] src.engine_hmm: Bull 0.9667 0.0096 0.0236
|
|
[2026-05-16 11:26:10,251 INFO] src.engine_hmm: Bear 0.0271 0.9712 0.0016
|
|
[2026-05-16 11:26:10,251 INFO] src.engine_hmm: Chop 0.0177 0.0041 0.9783
|
|
[2026-05-16 11:26:10,251 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:10,252 INFO] src.engine_hmm: Bull: return=0.055076, vol=0.032545, rsi_slope=0.001637
|
|
[2026-05-16 11:26:10,252 INFO] src.engine_hmm: Bear: return=-0.083630, vol=1.470615, rsi_slope=0.009146
|
|
[2026-05-16 11:26:10,252 INFO] src.engine_hmm: Chop: return=-0.012296, vol=-0.675065, rsi_slope=-0.005476
|
|
[2026-05-16 11:26:10,253 INFO] src.engine_hmm: Total regime transitions: 1211
|
|
[2026-05-16 11:26:10,253 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:10,253 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:10,254 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:10,254 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:10,254 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:10,255 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:10,255 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:26:10,255 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:26:10,256 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:10,256 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:10,322 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:10,361 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:10,609 INFO] src.engine_xgb: XGB Train Acc: 0.5796 | Test Acc: 0.5796
|
|
[2026-05-16 11:26:10,610 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09974643), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10332797), 'atr_normalized': np.float32(0.11359241), 'prev_log_return': np.float32(0.113699585), 'usdchf_log_return': np.float32(0.25048298), 'xagusd_log_return': np.float32(0.10385929), 'xtiusd_log_return': np.float32(0.1064285), 'synth_vix_zscore': np.float32(0.1088629)}
|
|
[2026-05-16 11:26:10,610 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:26:10,879 INFO] src.engine_xgb: XGB Train Acc: 0.5739 | Test Acc: 0.5739
|
|
[2026-05-16 11:26:10,879 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.120488174), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11033748), 'atr_normalized': np.float32(0.10672646), 'prev_log_return': np.float32(0.10536043), 'usdchf_log_return': np.float32(0.22517139), 'xagusd_log_return': np.float32(0.10211965), 'xtiusd_log_return': np.float32(0.11588127), 'synth_vix_zscore': np.float32(0.11391504)}
|
|
[2026-05-16 11:26:10,880 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:26:11,152 INFO] src.engine_xgb: XGB Train Acc: 0.5726 | Test Acc: 0.5726
|
|
[2026-05-16 11:26:11,153 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.108868234), 'gmm_vol_cluster': np.float32(0.09908514), 'rsi_slope': np.float32(0.10501883), 'atr_normalized': np.float32(0.10415937), 'prev_log_return': np.float32(0.09202058), 'usdchf_log_return': np.float32(0.1958448), 'xagusd_log_return': np.float32(0.09443151), 'xtiusd_log_return': np.float32(0.09429752), 'synth_vix_zscore': np.float32(0.10627404)}
|
|
[2026-05-16 11:26:11,153 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:26:11,156 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:11,481 INFO] src.backtester: Backtest [H1]: Sharpe=-2.222 | MaxDD=0.881 | WR=0.393 | Return=-50.2% | Trades=1042
|
|
[2026-05-16 11:26:11,483 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:11,512 WARNING] src.optimizer: CPCV [H1]: only 0 valid paths — rejecting trial.
|
|
[2026-05-16 11:26:11,574 INFO] src.optimizer: Trial 1 [H1/headway_cent]: score=-50.000 | valid_paths=0/15 | std_sharpe=0.000 | median_trades=813
|
|
Best trial: 1. Best value: -50: 2%|█▏ | 2/130 [02:28<2:33:04, 71.76s/it][2026-05-16 11:26:15,395 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:15,395 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:15,395 INFO] src.engine_hmm: Bull 0.9772 0.0024 0.0158 0.0046
|
|
[2026-05-16 11:26:15,395 INFO] src.engine_hmm: Bear 0.0032 0.9802 0.0123 0.0043
|
|
[2026-05-16 11:26:15,396 INFO] src.engine_hmm: Chop_Low 0.0108 0.0105 0.9777 0.0010
|
|
[2026-05-16 11:26:15,396 INFO] src.engine_hmm: Chop_High 0.0108 0.0113 0.0000 0.9778
|
|
[2026-05-16 11:26:15,396 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:15,396 INFO] src.engine_hmm: Bull: return=0.746329, vol=0.040962, rsi_slope=-0.026612
|
|
[2026-05-16 11:26:15,397 INFO] src.engine_hmm: Bear: return=-0.735504, vol=-0.179698, rsi_slope=0.039937
|
|
[2026-05-16 11:26:15,397 INFO] src.engine_hmm: Chop_Low: return=0.081781, vol=-0.501427, rsi_slope=-0.009860
|
|
[2026-05-16 11:26:15,397 INFO] src.engine_hmm: Chop_High: return=-0.123735, vol=1.701692, rsi_slope=-0.007742
|
|
[2026-05-16 11:26:15,397 INFO] src.engine_hmm: Total regime transitions: 973
|
|
[2026-05-16 11:26:15,398 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-07 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:26:15,398 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 14:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:26:15,398 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:26:15,399 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:26:15,399 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-19 08:00:00: Bull -> Bear
|
|
[2026-05-16 11:26:15,399 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 11:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:15,399 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-22 11:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:15,400 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 15:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:15,400 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:15,400 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 01:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:26:15,470 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:15,508 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:15,750 INFO] src.engine_xgb: XGB Train Acc: 0.5848 | Test Acc: 0.5848
|
|
[2026-05-16 11:26:15,750 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15280041), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10151464), 'atr_normalized': np.float32(0.10497595), 'prev_log_return': np.float32(0.095437914), 'usdchf_log_return': np.float32(0.25349846), 'xagusd_log_return': np.float32(0.094398156), 'xtiusd_log_return': np.float32(0.09941152), 'synth_vix_zscore': np.float32(0.097962976)}
|
|
[2026-05-16 11:26:15,752 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:26:16,013 INFO] src.engine_xgb: XGB Train Acc: 0.5852 | Test Acc: 0.5852
|
|
[2026-05-16 11:26:16,013 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11322069), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.1033694), 'atr_normalized': np.float32(0.11468521), 'prev_log_return': np.float32(0.093763255), 'usdchf_log_return': np.float32(0.25693673), 'xagusd_log_return': np.float32(0.10429399), 'xtiusd_log_return': np.float32(0.099866025), 'synth_vix_zscore': np.float32(0.11386476)}
|
|
[2026-05-16 11:26:16,014 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:26:16,287 INFO] src.engine_xgb: XGB Train Acc: 0.5839 | Test Acc: 0.5839
|
|
[2026-05-16 11:26:16,287 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14732058), 'gmm_vol_cluster': np.float32(0.08735476), 'rsi_slope': np.float32(0.091576956), 'atr_normalized': np.float32(0.105314806), 'prev_log_return': np.float32(0.08954033), 'usdchf_log_return': np.float32(0.18161583), 'xagusd_log_return': np.float32(0.09793007), 'xtiusd_log_return': np.float32(0.09524071), 'synth_vix_zscore': np.float32(0.10410598)}
|
|
[2026-05-16 11:26:16,288 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:26:16,289 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:16,610 INFO] src.backtester: Backtest [H1]: Sharpe=-1.905 | MaxDD=0.385 | WR=0.405 | Return=-29.6% | Trades=819
|
|
[2026-05-16 11:26:16,611 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:19,253 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:19,253 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:19,253 INFO] src.engine_hmm: Bull 0.9789 0.0015 0.0153 0.0043
|
|
[2026-05-16 11:26:19,254 INFO] src.engine_hmm: Bear 0.0028 0.9822 0.0121 0.0029
|
|
[2026-05-16 11:26:19,254 INFO] src.engine_hmm: Chop_Low 0.0110 0.0106 0.9778 0.0007
|
|
[2026-05-16 11:26:19,254 INFO] src.engine_hmm: Chop_High 0.0096 0.0104 0.0000 0.9801
|
|
[2026-05-16 11:26:19,254 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:19,254 INFO] src.engine_hmm: Bull: return=0.761430, vol=0.061363, rsi_slope=-0.035846
|
|
[2026-05-16 11:26:19,255 INFO] src.engine_hmm: Bear: return=-0.746128, vol=-0.188760, rsi_slope=0.041442
|
|
[2026-05-16 11:26:19,255 INFO] src.engine_hmm: Chop_Low: return=0.048121, vol=-0.456959, rsi_slope=-0.002945
|
|
[2026-05-16 11:26:19,255 INFO] src.engine_hmm: Chop_High: return=-0.014301, vol=1.774908, rsi_slope=-0.013972
|
|
[2026-05-16 11:26:19,255 INFO] src.engine_hmm: Total regime transitions: 885
|
|
[2026-05-16 11:26:19,256 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:19,256 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:19,256 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:19,256 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 02:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:19,257 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 11:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:19,257 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-08 07:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:19,257 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 11:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:19,257 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-16 09:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:19,258 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-17 21:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:19,258 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-18 18:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:19,315 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:19,348 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:19,546 INFO] src.engine_xgb: XGB Train Acc: 0.5918 | Test Acc: 0.5918
|
|
[2026-05-16 11:26:19,547 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14462969), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09496817), 'atr_normalized': np.float32(0.104517706), 'prev_log_return': np.float32(0.10385945), 'usdchf_log_return': np.float32(0.27537733), 'xagusd_log_return': np.float32(0.09029293), 'xtiusd_log_return': np.float32(0.09837296), 'synth_vix_zscore': np.float32(0.08798177)}
|
|
[2026-05-16 11:26:19,547 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:26:19,773 INFO] src.engine_xgb: XGB Train Acc: 0.5852 | Test Acc: 0.5852
|
|
[2026-05-16 11:26:19,773 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11640536), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09893719), 'atr_normalized': np.float32(0.10860471), 'prev_log_return': np.float32(0.09849823), 'usdchf_log_return': np.float32(0.2588824), 'xagusd_log_return': np.float32(0.10399175), 'xtiusd_log_return': np.float32(0.09957644), 'synth_vix_zscore': np.float32(0.11510386)}
|
|
[2026-05-16 11:26:19,774 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:26:20,033 INFO] src.engine_xgb: XGB Train Acc: 0.5879 | Test Acc: 0.5879
|
|
[2026-05-16 11:26:20,033 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10106396), 'gmm_vol_cluster': np.float32(0.09241991), 'rsi_slope': np.float32(0.099015854), 'atr_normalized': np.float32(0.106490366), 'prev_log_return': np.float32(0.09482341), 'usdchf_log_return': np.float32(0.20709443), 'xagusd_log_return': np.float32(0.097649455), 'xtiusd_log_return': np.float32(0.09797435), 'synth_vix_zscore': np.float32(0.10346822)}
|
|
[2026-05-16 11:26:20,034 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:26:20,035 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:20,328 INFO] src.backtester: Backtest [H1]: Sharpe=-0.150 | MaxDD=0.162 | WR=0.457 | Return=-3.1% | Trades=858
|
|
[2026-05-16 11:26:20,329 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:23,788 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:23,788 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:23,789 INFO] src.engine_hmm: Bull 0.9807 0.0027 0.0121 0.0045
|
|
[2026-05-16 11:26:23,789 INFO] src.engine_hmm: Bear 0.0027 0.9785 0.0146 0.0042
|
|
[2026-05-16 11:26:23,789 INFO] src.engine_hmm: Chop_Low 0.0106 0.0112 0.9779 0.0003
|
|
[2026-05-16 11:26:23,789 INFO] src.engine_hmm: Chop_High 0.0089 0.0114 0.0002 0.9794
|
|
[2026-05-16 11:26:23,789 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:23,790 INFO] src.engine_hmm: Bull: return=0.746129, vol=0.026406, rsi_slope=-0.035039
|
|
[2026-05-16 11:26:23,790 INFO] src.engine_hmm: Bear: return=-0.706927, vol=-0.179789, rsi_slope=0.042211
|
|
[2026-05-16 11:26:23,790 INFO] src.engine_hmm: Chop_Low: return=0.006519, vol=-0.497629, rsi_slope=-0.003182
|
|
[2026-05-16 11:26:23,790 INFO] src.engine_hmm: Chop_High: return=-0.132477, vol=1.722519, rsi_slope=-0.006224
|
|
[2026-05-16 11:26:23,790 INFO] src.engine_hmm: Total regime transitions: 899
|
|
[2026-05-16 11:26:23,791 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:23,791 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:23,791 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:23,791 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 02:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:23,792 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 11:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:23,792 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-08 07:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:23,792 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 06:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:23,792 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-16 10:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:23,793 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-17 21:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:23,793 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-18 18:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:23,858 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:23,901 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:24,113 INFO] src.engine_xgb: XGB Train Acc: 0.5901 | Test Acc: 0.5901
|
|
[2026-05-16 11:26:24,113 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16280772), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.086393446), 'atr_normalized': np.float32(0.096869245), 'prev_log_return': np.float32(0.09339016), 'usdchf_log_return': np.float32(0.27590454), 'xagusd_log_return': np.float32(0.08492203), 'xtiusd_log_return': np.float32(0.095064625), 'synth_vix_zscore': np.float32(0.10464819)}
|
|
[2026-05-16 11:26:24,114 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:26:24,338 INFO] src.engine_xgb: XGB Train Acc: 0.5864 | Test Acc: 0.5864
|
|
[2026-05-16 11:26:24,338 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12623866), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09743536), 'atr_normalized': np.float32(0.11144516), 'prev_log_return': np.float32(0.10050357), 'usdchf_log_return': np.float32(0.25168929), 'xagusd_log_return': np.float32(0.099897414), 'xtiusd_log_return': np.float32(0.098462924), 'synth_vix_zscore': np.float32(0.11432757)}
|
|
[2026-05-16 11:26:24,339 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:26:24,580 INFO] src.engine_xgb: XGB Train Acc: 0.5912 | Test Acc: 0.5912
|
|
[2026-05-16 11:26:24,580 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11077635), 'gmm_vol_cluster': np.float32(0.10242297), 'rsi_slope': np.float32(0.0933021), 'atr_normalized': np.float32(0.11238631), 'prev_log_return': np.float32(0.09376586), 'usdchf_log_return': np.float32(0.18381591), 'xagusd_log_return': np.float32(0.101379044), 'xtiusd_log_return': np.float32(0.09511248), 'synth_vix_zscore': np.float32(0.10703895)}
|
|
[2026-05-16 11:26:24,581 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:26:24,582 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:24,882 INFO] src.backtester: Backtest [H1]: Sharpe=-0.573 | MaxDD=0.176 | WR=0.446 | Return=-11.3% | Trades=971
|
|
[2026-05-16 11:26:24,882 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:30,943 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:30,943 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:30,944 INFO] src.engine_hmm: Bull 0.9809 0.0033 0.0117 0.0042
|
|
[2026-05-16 11:26:30,944 INFO] src.engine_hmm: Bear 0.0034 0.9780 0.0140 0.0046
|
|
[2026-05-16 11:26:30,944 INFO] src.engine_hmm: Chop_Low 0.0090 0.0098 0.9809 0.0003
|
|
[2026-05-16 11:26:30,944 INFO] src.engine_hmm: Chop_High 0.0088 0.0111 0.0000 0.9801
|
|
[2026-05-16 11:26:30,945 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:30,945 INFO] src.engine_hmm: Bull: return=0.730959, vol=-0.009822, rsi_slope=-0.034497
|
|
[2026-05-16 11:26:30,945 INFO] src.engine_hmm: Bear: return=-0.729493, vol=-0.071196, rsi_slope=0.035067
|
|
[2026-05-16 11:26:30,945 INFO] src.engine_hmm: Chop_Low: return=-0.004701, vol=-0.529984, rsi_slope=0.001543
|
|
[2026-05-16 11:26:30,946 INFO] src.engine_hmm: Chop_High: return=-0.047508, vol=1.746841, rsi_slope=-0.003053
|
|
[2026-05-16 11:26:30,946 INFO] src.engine_hmm: Total regime transitions: 867
|
|
[2026-05-16 11:26:30,947 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:30,947 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 16:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:30,948 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:30,949 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:30,949 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:30,949 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-08 07:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:30,949 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 11:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:30,950 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-16 09:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:30,950 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-17 21:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:30,950 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-18 18:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:31,018 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:31,058 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:31,283 INFO] src.engine_xgb: XGB Train Acc: 0.5904 | Test Acc: 0.5904
|
|
[2026-05-16 11:26:31,283 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13142663), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.101816036), 'atr_normalized': np.float32(0.10724966), 'prev_log_return': np.float32(0.100938275), 'usdchf_log_return': np.float32(0.2851226), 'xagusd_log_return': np.float32(0.09078281), 'xtiusd_log_return': np.float32(0.09477471), 'synth_vix_zscore': np.float32(0.08788929)}
|
|
[2026-05-16 11:26:31,284 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:26:31,521 INFO] src.engine_xgb: XGB Train Acc: 0.5837 | Test Acc: 0.5837
|
|
[2026-05-16 11:26:31,521 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12537053), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10033276), 'atr_normalized': np.float32(0.10750478), 'prev_log_return': np.float32(0.103315584), 'usdchf_log_return': np.float32(0.25953963), 'xagusd_log_return': np.float32(0.09910015), 'xtiusd_log_return': np.float32(0.09341653), 'synth_vix_zscore': np.float32(0.111420006)}
|
|
[2026-05-16 11:26:31,522 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:26:31,790 INFO] src.engine_xgb: XGB Train Acc: 0.5886 | Test Acc: 0.5886
|
|
[2026-05-16 11:26:31,791 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1569378), 'gmm_vol_cluster': np.float32(0.09408778), 'rsi_slope': np.float32(0.09364111), 'atr_normalized': np.float32(0.09462468), 'prev_log_return': np.float32(0.08854309), 'usdchf_log_return': np.float32(0.18171483), 'xagusd_log_return': np.float32(0.09197794), 'xtiusd_log_return': np.float32(0.092940755), 'synth_vix_zscore': np.float32(0.105531976)}
|
|
[2026-05-16 11:26:31,791 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:26:31,793 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:32,102 INFO] src.backtester: Backtest [H1]: Sharpe=-1.212 | MaxDD=0.357 | WR=0.443 | Return=-22.0% | Trades=946
|
|
[2026-05-16 11:26:32,103 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:36,148 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:36,148 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:36,148 INFO] src.engine_hmm: Bull 0.9818 0.0037 0.0134 0.0011
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: Bear 0.0036 0.9769 0.0004 0.0190
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: Chop_Low 0.0099 0.0012 0.9748 0.0141
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: Chop_High 0.0021 0.0078 0.0163 0.9738
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: Bull: return=1.182447, vol=0.464502, rsi_slope=-0.045480
|
|
[2026-05-16 11:26:36,149 INFO] src.engine_hmm: Bear: return=-1.295905, vol=1.088897, rsi_slope=0.037276
|
|
[2026-05-16 11:26:36,150 INFO] src.engine_hmm: Chop_Low: return=0.233212, vol=-0.574966, rsi_slope=-0.012988
|
|
[2026-05-16 11:26:36,150 INFO] src.engine_hmm: Chop_High: return=-0.523504, vol=-0.326328, rsi_slope=0.031066
|
|
[2026-05-16 11:26:36,150 INFO] src.engine_hmm: Total regime transitions: 999
|
|
[2026-05-16 11:26:36,150 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-07 16:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:36,151 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-08 18:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:36,151 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:26:36,151 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:36,152 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-22 18:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:36,152 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 02:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:36,152 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 11:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:36,152 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:36,153 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 06:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:36,153 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-16 09:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:36,216 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:36,253 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:36,465 INFO] src.engine_xgb: XGB Train Acc: 0.5918 | Test Acc: 0.5918
|
|
[2026-05-16 11:26:36,465 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13195428), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09284892), 'atr_normalized': np.float32(0.105772436), 'prev_log_return': np.float32(0.09548587), 'usdchf_log_return': np.float32(0.2920704), 'xagusd_log_return': np.float32(0.09089239), 'xtiusd_log_return': np.float32(0.09250336), 'synth_vix_zscore': np.float32(0.09847236)}
|
|
[2026-05-16 11:26:36,466 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:26:36,738 INFO] src.engine_xgb: XGB Train Acc: 0.5813 | Test Acc: 0.5813
|
|
[2026-05-16 11:26:36,739 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14400128), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08833775), 'atr_normalized': np.float32(0.09374953), 'prev_log_return': np.float32(0.09933313), 'usdchf_log_return': np.float32(0.26685593), 'xagusd_log_return': np.float32(0.09908074), 'xtiusd_log_return': np.float32(0.1002818), 'synth_vix_zscore': np.float32(0.108359866)}
|
|
[2026-05-16 11:26:36,739 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:26:37,009 INFO] src.engine_xgb: XGB Train Acc: 0.5800 | Test Acc: 0.5800
|
|
[2026-05-16 11:26:37,009 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12760517), 'gmm_vol_cluster': np.float32(0.09556269), 'rsi_slope': np.float32(0.10655386), 'atr_normalized': np.float32(0.11609938), 'prev_log_return': np.float32(0.08774453), 'usdchf_log_return': np.float32(0.1886352), 'xagusd_log_return': np.float32(0.08589187), 'xtiusd_log_return': np.float32(0.09580094), 'synth_vix_zscore': np.float32(0.096106365)}
|
|
[2026-05-16 11:26:37,010 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:26:37,012 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:37,330 INFO] src.backtester: Backtest [H1]: Sharpe=0.201 | MaxDD=0.136 | WR=0.452 | Return=7.0% | Trades=717
|
|
[2026-05-16 11:26:37,331 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:43,581 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:43,581 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:43,581 INFO] src.engine_hmm: Bull 0.9762 0.0012 0.0183 0.0043
|
|
[2026-05-16 11:26:43,581 INFO] src.engine_hmm: Bear 0.0026 0.9839 0.0100 0.0036
|
|
[2026-05-16 11:26:43,582 INFO] src.engine_hmm: Chop_Low 0.0119 0.0105 0.9765 0.0011
|
|
[2026-05-16 11:26:43,582 INFO] src.engine_hmm: Chop_High 0.0098 0.0117 0.0000 0.9785
|
|
[2026-05-16 11:26:43,582 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:43,582 INFO] src.engine_hmm: Bull: return=0.801694, vol=0.075624, rsi_slope=-0.025956
|
|
[2026-05-16 11:26:43,583 INFO] src.engine_hmm: Bear: return=-0.713533, vol=-0.239809, rsi_slope=0.033804
|
|
[2026-05-16 11:26:43,583 INFO] src.engine_hmm: Chop_Low: return=0.143936, vol=-0.437932, rsi_slope=-0.010468
|
|
[2026-05-16 11:26:43,583 INFO] src.engine_hmm: Chop_High: return=-0.162657, vol=1.701699, rsi_slope=-0.007416
|
|
[2026-05-16 11:26:43,583 INFO] src.engine_hmm: Total regime transitions: 920
|
|
[2026-05-16 11:26:43,584 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:43,584 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:43,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:43,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:43,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:43,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 05:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:43,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:43,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:43,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:43,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:26:43,655 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:43,695 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:43,931 INFO] src.engine_xgb: XGB Train Acc: 0.5879 | Test Acc: 0.5879
|
|
[2026-05-16 11:26:43,932 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1585388), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.086551435), 'atr_normalized': np.float32(0.11072327), 'prev_log_return': np.float32(0.09313409), 'usdchf_log_return': np.float32(0.26501563), 'xagusd_log_return': np.float32(0.09690508), 'xtiusd_log_return': np.float32(0.08846481), 'synth_vix_zscore': np.float32(0.10066695)}
|
|
[2026-05-16 11:26:43,932 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:26:44,182 INFO] src.engine_xgb: XGB Train Acc: 0.5856 | Test Acc: 0.5856
|
|
[2026-05-16 11:26:44,182 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.121534795), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10649496), 'atr_normalized': np.float32(0.11301954), 'prev_log_return': np.float32(0.10334138), 'usdchf_log_return': np.float32(0.24575025), 'xagusd_log_return': np.float32(0.10143134), 'xtiusd_log_return': np.float32(0.10081875), 'synth_vix_zscore': np.float32(0.10760905)}
|
|
[2026-05-16 11:26:44,183 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:26:44,433 INFO] src.engine_xgb: XGB Train Acc: 0.5870 | Test Acc: 0.5870
|
|
[2026-05-16 11:26:44,434 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.17055601), 'gmm_vol_cluster': np.float32(0.07187136), 'rsi_slope': np.float32(0.091286905), 'atr_normalized': np.float32(0.096618146), 'prev_log_return': np.float32(0.08978506), 'usdchf_log_return': np.float32(0.19430968), 'xagusd_log_return': np.float32(0.08660785), 'xtiusd_log_return': np.float32(0.09809954), 'synth_vix_zscore': np.float32(0.100865446)}
|
|
[2026-05-16 11:26:44,435 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:26:44,436 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:44,732 INFO] src.backtester: Backtest [H1]: Sharpe=-0.903 | MaxDD=0.298 | WR=0.405 | Return=-16.6% | Trades=790
|
|
[2026-05-16 11:26:44,732 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:48,613 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:48,613 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:48,613 INFO] src.engine_hmm: Bull 0.9786 0.0018 0.0149 0.0046
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Bear 0.0026 0.9810 0.0121 0.0043
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Chop_Low 0.0122 0.0116 0.9756 0.0006
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Chop_High 0.0093 0.0117 0.0003 0.9787
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Bull: return=0.763379, vol=0.023068, rsi_slope=-0.025953
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Bear: return=-0.699767, vol=-0.234073, rsi_slope=0.034613
|
|
[2026-05-16 11:26:48,614 INFO] src.engine_hmm: Chop_Low: return=0.079139, vol=-0.472265, rsi_slope=-0.008678
|
|
[2026-05-16 11:26:48,615 INFO] src.engine_hmm: Chop_High: return=-0.205465, vol=1.667672, rsi_slope=-0.003421
|
|
[2026-05-16 11:26:48,615 INFO] src.engine_hmm: Total regime transitions: 947
|
|
[2026-05-16 11:26:48,615 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:48,616 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:48,616 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:48,617 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:48,617 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:48,617 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:48,617 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:48,618 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 05:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:48,618 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:48,619 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:48,684 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:48,724 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:48,932 INFO] src.engine_xgb: XGB Train Acc: 0.5898 | Test Acc: 0.5898
|
|
[2026-05-16 11:26:48,933 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.18462457), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08551719), 'atr_normalized': np.float32(0.0956499), 'prev_log_return': np.float32(0.0945616), 'usdchf_log_return': np.float32(0.25530317), 'xagusd_log_return': np.float32(0.09545448), 'xtiusd_log_return': np.float32(0.09342837), 'synth_vix_zscore': np.float32(0.095460825)}
|
|
[2026-05-16 11:26:48,933 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:26:49,177 INFO] src.engine_xgb: XGB Train Acc: 0.5836 | Test Acc: 0.5836
|
|
[2026-05-16 11:26:49,178 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12129683), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11157602), 'atr_normalized': np.float32(0.105495155), 'prev_log_return': np.float32(0.10344475), 'usdchf_log_return': np.float32(0.23405704), 'xagusd_log_return': np.float32(0.106797084), 'xtiusd_log_return': np.float32(0.10336131), 'synth_vix_zscore': np.float32(0.113971755)}
|
|
[2026-05-16 11:26:49,178 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:26:49,423 INFO] src.engine_xgb: XGB Train Acc: 0.5849 | Test Acc: 0.5849
|
|
[2026-05-16 11:26:49,424 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1361956), 'gmm_vol_cluster': np.float32(0.079570234), 'rsi_slope': np.float32(0.09845261), 'atr_normalized': np.float32(0.097133614), 'prev_log_return': np.float32(0.09303746), 'usdchf_log_return': np.float32(0.19522192), 'xagusd_log_return': np.float32(0.094146244), 'xtiusd_log_return': np.float32(0.090428), 'synth_vix_zscore': np.float32(0.11581433)}
|
|
[2026-05-16 11:26:49,424 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:26:49,426 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:49,719 INFO] src.backtester: Backtest [H1]: Sharpe=-1.366 | MaxDD=0.297 | WR=0.427 | Return=-22.5% | Trades=824
|
|
[2026-05-16 11:26:49,719 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Bull 0.9804 0.0024 0.0132 0.0040
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Bear 0.0031 0.9789 0.0132 0.0049
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Chop_Low 0.0101 0.0097 0.9795 0.0007
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Chop_High 0.0087 0.0120 0.0001 0.9792
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Bull: return=0.739817, vol=-0.040671, rsi_slope=-0.027180
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Bear: return=-0.754481, vol=-0.090157, rsi_slope=0.032110
|
|
[2026-05-16 11:26:53,557 INFO] src.engine_hmm: Chop_Low: return=0.014234, vol=-0.517962, rsi_slope=-0.001986
|
|
[2026-05-16 11:26:53,558 INFO] src.engine_hmm: Chop_High: return=-0.102050, vol=1.709124, rsi_slope=-0.001352
|
|
[2026-05-16 11:26:53,558 INFO] src.engine_hmm: Total regime transitions: 899
|
|
[2026-05-16 11:26:53,558 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:53,559 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:53,559 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:26:53,559 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:53,559 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:53,560 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:26:53,560 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:53,560 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:53,560 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:53,560 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 03:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:53,623 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:53,659 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:53,868 INFO] src.engine_xgb: XGB Train Acc: 0.5915 | Test Acc: 0.5915
|
|
[2026-05-16 11:26:53,868 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1881939), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09656299), 'atr_normalized': np.float32(0.094807096), 'prev_log_return': np.float32(0.09684752), 'usdchf_log_return': np.float32(0.2487941), 'xagusd_log_return': np.float32(0.087433934), 'xtiusd_log_return': np.float32(0.08796658), 'synth_vix_zscore': np.float32(0.09939389)}
|
|
[2026-05-16 11:26:53,869 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:26:54,097 INFO] src.engine_xgb: XGB Train Acc: 0.5846 | Test Acc: 0.5846
|
|
[2026-05-16 11:26:54,098 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12520228), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11036626), 'atr_normalized': np.float32(0.10591367), 'prev_log_return': np.float32(0.09660323), 'usdchf_log_return': np.float32(0.24640992), 'xagusd_log_return': np.float32(0.102734715), 'xtiusd_log_return': np.float32(0.10113556), 'synth_vix_zscore': np.float32(0.11163439)}
|
|
[2026-05-16 11:26:54,099 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:26:54,349 INFO] src.engine_xgb: XGB Train Acc: 0.5846 | Test Acc: 0.5846
|
|
[2026-05-16 11:26:54,350 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13551132), 'gmm_vol_cluster': np.float32(0.0978653), 'rsi_slope': np.float32(0.08843825), 'atr_normalized': np.float32(0.096164666), 'prev_log_return': np.float32(0.09320451), 'usdchf_log_return': np.float32(0.18736774), 'xagusd_log_return': np.float32(0.0998534), 'xtiusd_log_return': np.float32(0.09709494), 'synth_vix_zscore': np.float32(0.104499824)}
|
|
[2026-05-16 11:26:54,350 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:26:54,351 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:54,655 INFO] src.backtester: Backtest [H1]: Sharpe=-2.116 | MaxDD=0.393 | WR=0.392 | Return=-31.5% | Trades=711
|
|
[2026-05-16 11:26:54,656 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:26:59,669 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:26:59,669 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:26:59,670 INFO] src.engine_hmm: Bull 0.9765 0.0000 0.0160 0.0075
|
|
[2026-05-16 11:26:59,670 INFO] src.engine_hmm: Bear 0.0000 0.9791 0.0144 0.0066
|
|
[2026-05-16 11:26:59,670 INFO] src.engine_hmm: Chop_Low 0.0142 0.0144 0.9679 0.0036
|
|
[2026-05-16 11:26:59,670 INFO] src.engine_hmm: Chop_High 0.0091 0.0101 0.0061 0.9747
|
|
[2026-05-16 11:26:59,671 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:26:59,671 INFO] src.engine_hmm: Bull: return=0.825738, vol=-0.323109, rsi_slope=-0.041301
|
|
[2026-05-16 11:26:59,671 INFO] src.engine_hmm: Bear: return=-0.812254, vol=-0.238977, rsi_slope=0.037351
|
|
[2026-05-16 11:26:59,671 INFO] src.engine_hmm: Chop_Low: return=0.027682, vol=-0.408083, rsi_slope=0.001648
|
|
[2026-05-16 11:26:59,671 INFO] src.engine_hmm: Chop_High: return=0.121470, vol=1.415768, rsi_slope=-0.005692
|
|
[2026-05-16 11:26:59,672 INFO] src.engine_hmm: Total regime transitions: 1121
|
|
[2026-05-16 11:26:59,672 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:59,673 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:59,673 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:26:59,673 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 10:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:26:59,673 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:26:59,674 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 04:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:26:59,674 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:59,674 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:59,675 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:26:59,675 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:26:59,741 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:26:59,780 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:00,002 INFO] src.engine_xgb: XGB Train Acc: 0.5880 | Test Acc: 0.5880
|
|
[2026-05-16 11:27:00,003 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14556889), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08936724), 'atr_normalized': np.float32(0.097601324), 'prev_log_return': np.float32(0.08432021), 'usdchf_log_return': np.float32(0.28649783), 'xagusd_log_return': np.float32(0.09983765), 'xtiusd_log_return': np.float32(0.096545756), 'synth_vix_zscore': np.float32(0.10026101)}
|
|
[2026-05-16 11:27:00,004 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:27:00,268 INFO] src.engine_xgb: XGB Train Acc: 0.5812 | Test Acc: 0.5812
|
|
[2026-05-16 11:27:00,269 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11499078), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09930271), 'atr_normalized': np.float32(0.107822925), 'prev_log_return': np.float32(0.09893324), 'usdchf_log_return': np.float32(0.26754355), 'xagusd_log_return': np.float32(0.109188385), 'xtiusd_log_return': np.float32(0.09612547), 'synth_vix_zscore': np.float32(0.10609287)}
|
|
[2026-05-16 11:27:00,269 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:27:00,523 INFO] src.engine_xgb: XGB Train Acc: 0.5888 | Test Acc: 0.5888
|
|
[2026-05-16 11:27:00,524 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11768465), 'gmm_vol_cluster': np.float32(0.07536905), 'rsi_slope': np.float32(0.10593437), 'atr_normalized': np.float32(0.11600137), 'prev_log_return': np.float32(0.08430493), 'usdchf_log_return': np.float32(0.19773974), 'xagusd_log_return': np.float32(0.1027287), 'xtiusd_log_return': np.float32(0.093583815), 'synth_vix_zscore': np.float32(0.10665343)}
|
|
[2026-05-16 11:27:00,524 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:27:00,526 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:00,821 INFO] src.backtester: Backtest [H1]: Sharpe=-1.333 | MaxDD=0.277 | WR=0.423 | Return=-19.2% | Trades=659
|
|
[2026-05-16 11:27:00,822 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:06,425 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:06,425 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:06,425 INFO] src.engine_hmm: Bull 0.9808 0.0017 0.0133 0.0041
|
|
[2026-05-16 11:27:06,426 INFO] src.engine_hmm: Bear 0.0026 0.9831 0.0115 0.0027
|
|
[2026-05-16 11:27:06,426 INFO] src.engine_hmm: Chop_Low 0.0120 0.0109 0.9765 0.0006
|
|
[2026-05-16 11:27:06,426 INFO] src.engine_hmm: Chop_High 0.0083 0.0107 0.0002 0.9807
|
|
[2026-05-16 11:27:06,426 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:06,426 INFO] src.engine_hmm: Bull: return=0.753295, vol=0.057427, rsi_slope=-0.031338
|
|
[2026-05-16 11:27:06,427 INFO] src.engine_hmm: Bear: return=-0.714903, vol=-0.237411, rsi_slope=0.037549
|
|
[2026-05-16 11:27:06,427 INFO] src.engine_hmm: Chop_Low: return=0.046269, vol=-0.450974, rsi_slope=-0.004264
|
|
[2026-05-16 11:27:06,427 INFO] src.engine_hmm: Chop_High: return=-0.122431, vol=1.725688, rsi_slope=-0.009287
|
|
[2026-05-16 11:27:06,427 INFO] src.engine_hmm: Total regime transitions: 853
|
|
[2026-05-16 11:27:06,428 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:06,428 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:06,428 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:06,429 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:06,429 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 10:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:06,429 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:06,429 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 07:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:06,429 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:06,430 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:06,430 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:06,491 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:06,527 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:06,745 INFO] src.engine_xgb: XGB Train Acc: 0.5952 | Test Acc: 0.5952
|
|
[2026-05-16 11:27:06,746 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1974197), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08966667), 'atr_normalized': np.float32(0.09514776), 'prev_log_return': np.float32(0.09202594), 'usdchf_log_return': np.float32(0.25723103), 'xagusd_log_return': np.float32(0.08875835), 'xtiusd_log_return': np.float32(0.087665804), 'synth_vix_zscore': np.float32(0.09208472)}
|
|
[2026-05-16 11:27:06,746 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:27:06,980 INFO] src.engine_xgb: XGB Train Acc: 0.5881 | Test Acc: 0.5881
|
|
[2026-05-16 11:27:06,980 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13409775), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.104517505), 'atr_normalized': np.float32(0.10700122), 'prev_log_return': np.float32(0.096379735), 'usdchf_log_return': np.float32(0.25077492), 'xagusd_log_return': np.float32(0.09730669), 'xtiusd_log_return': np.float32(0.09490056), 'synth_vix_zscore': np.float32(0.11502167)}
|
|
[2026-05-16 11:27:06,981 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:27:07,240 INFO] src.engine_xgb: XGB Train Acc: 0.5864 | Test Acc: 0.5864
|
|
[2026-05-16 11:27:07,241 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12044801), 'gmm_vol_cluster': np.float32(0.09529474), 'rsi_slope': np.float32(0.08867125), 'atr_normalized': np.float32(0.11008038), 'prev_log_return': np.float32(0.08883755), 'usdchf_log_return': np.float32(0.21060893), 'xagusd_log_return': np.float32(0.09742477), 'xtiusd_log_return': np.float32(0.09224701), 'synth_vix_zscore': np.float32(0.09638728)}
|
|
[2026-05-16 11:27:07,241 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:27:07,243 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:07,534 INFO] src.backtester: Backtest [H1]: Sharpe=-0.633 | MaxDD=0.183 | WR=0.425 | Return=-13.0% | Trades=848
|
|
[2026-05-16 11:27:07,535 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:13,632 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:13,632 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:13,632 INFO] src.engine_hmm: Bull 0.9810 0.0018 0.0139 0.0033
|
|
[2026-05-16 11:27:13,633 INFO] src.engine_hmm: Bear 0.0029 0.9835 0.0101 0.0035
|
|
[2026-05-16 11:27:13,633 INFO] src.engine_hmm: Chop_Low 0.0112 0.0108 0.9776 0.0004
|
|
[2026-05-16 11:27:13,633 INFO] src.engine_hmm: Chop_High 0.0075 0.0112 0.0000 0.9813
|
|
[2026-05-16 11:27:13,633 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:13,633 INFO] src.engine_hmm: Bull: return=0.745513, vol=0.043688, rsi_slope=-0.033142
|
|
[2026-05-16 11:27:13,634 INFO] src.engine_hmm: Bear: return=-0.707491, vol=-0.209540, rsi_slope=0.033496
|
|
[2026-05-16 11:27:13,634 INFO] src.engine_hmm: Chop_Low: return=0.091301, vol=-0.456916, rsi_slope=-0.005090
|
|
[2026-05-16 11:27:13,634 INFO] src.engine_hmm: Chop_High: return=-0.130283, vol=1.763951, rsi_slope=0.002976
|
|
[2026-05-16 11:27:13,635 INFO] src.engine_hmm: Total regime transitions: 839
|
|
[2026-05-16 11:27:13,635 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:13,636 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:13,636 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:13,636 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:13,636 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:13,638 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:13,638 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 05:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:13,638 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:13,639 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:13,639 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:13,708 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:13,744 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:13,993 INFO] src.engine_xgb: XGB Train Acc: 0.5974 | Test Acc: 0.5974
|
|
[2026-05-16 11:27:13,993 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16676657), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.088081345), 'atr_normalized': np.float32(0.09229103), 'prev_log_return': np.float32(0.08674501), 'usdchf_log_return': np.float32(0.27894056), 'xagusd_log_return': np.float32(0.097702496), 'xtiusd_log_return': np.float32(0.09204398), 'synth_vix_zscore': np.float32(0.0974289)}
|
|
[2026-05-16 11:27:13,995 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:27:14,282 INFO] src.engine_xgb: XGB Train Acc: 0.5762 | Test Acc: 0.5762
|
|
[2026-05-16 11:27:14,282 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1263943), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10273017), 'atr_normalized': np.float32(0.104925916), 'prev_log_return': np.float32(0.09803238), 'usdchf_log_return': np.float32(0.24440108), 'xagusd_log_return': np.float32(0.10750553), 'xtiusd_log_return': np.float32(0.11217969), 'synth_vix_zscore': np.float32(0.10383088)}
|
|
[2026-05-16 11:27:14,283 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:27:14,577 INFO] src.engine_xgb: XGB Train Acc: 0.5864 | Test Acc: 0.5864
|
|
[2026-05-16 11:27:14,578 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15050094), 'gmm_vol_cluster': np.float32(0.08626326), 'rsi_slope': np.float32(0.092589766), 'atr_normalized': np.float32(0.10330761), 'prev_log_return': np.float32(0.092376016), 'usdchf_log_return': np.float32(0.20339784), 'xagusd_log_return': np.float32(0.08703186), 'xtiusd_log_return': np.float32(0.09437428), 'synth_vix_zscore': np.float32(0.09015839)}
|
|
[2026-05-16 11:27:14,578 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:27:14,579 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:14,901 INFO] src.backtester: Backtest [H1]: Sharpe=-1.920 | MaxDD=0.453 | WR=0.403 | Return=-34.8% | Trades=883
|
|
[2026-05-16 11:27:14,902 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:29,652 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:29,652 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:29,653 INFO] src.engine_hmm: Bull 0.9675 0.0039 0.0201 0.0085
|
|
[2026-05-16 11:27:29,653 INFO] src.engine_hmm: Bear 0.0055 0.9809 0.0071 0.0064
|
|
[2026-05-16 11:27:29,653 INFO] src.engine_hmm: Chop_Low 0.0147 0.0086 0.9736 0.0030
|
|
[2026-05-16 11:27:29,653 INFO] src.engine_hmm: Chop_High 0.0167 0.0102 0.0014 0.9717
|
|
[2026-05-16 11:27:29,653 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:29,654 INFO] src.engine_hmm: Bull: return=0.606534, vol=0.099736, rsi_slope=-0.017943
|
|
[2026-05-16 11:27:29,654 INFO] src.engine_hmm: Bear: return=-0.868628, vol=-0.350411, rsi_slope=0.032902
|
|
[2026-05-16 11:27:29,654 INFO] src.engine_hmm: Chop_Low: return=0.186794, vol=-0.664720, rsi_slope=-0.015409
|
|
[2026-05-16 11:27:29,654 INFO] src.engine_hmm: Chop_High: return=0.148345, vol=1.513072, rsi_slope=0.000504
|
|
[2026-05-16 11:27:29,654 INFO] src.engine_hmm: Total regime transitions: 1151
|
|
[2026-05-16 11:27:29,655 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:29,655 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:29,655 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 08:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:29,656 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:29,656 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 08:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:29,656 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:29,656 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:27:29,657 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:29,657 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:29,657 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:29,716 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:29,752 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:29,962 INFO] src.engine_xgb: XGB Train Acc: 0.5959 | Test Acc: 0.5959
|
|
[2026-05-16 11:27:29,963 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.18928139), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08125755), 'atr_normalized': np.float32(0.08751474), 'prev_log_return': np.float32(0.08969566), 'usdchf_log_return': np.float32(0.27830958), 'xagusd_log_return': np.float32(0.09927722), 'xtiusd_log_return': np.float32(0.085854985), 'synth_vix_zscore': np.float32(0.08880881)}
|
|
[2026-05-16 11:27:29,963 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:27:30,199 INFO] src.engine_xgb: XGB Train Acc: 0.5876 | Test Acc: 0.5876
|
|
[2026-05-16 11:27:30,200 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13631846), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10028762), 'atr_normalized': np.float32(0.11371446), 'prev_log_return': np.float32(0.09460909), 'usdchf_log_return': np.float32(0.25000864), 'xagusd_log_return': np.float32(0.1069819), 'xtiusd_log_return': np.float32(0.09135084), 'synth_vix_zscore': np.float32(0.10672903)}
|
|
[2026-05-16 11:27:30,200 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:27:30,477 INFO] src.engine_xgb: XGB Train Acc: 0.5836 | Test Acc: 0.5836
|
|
[2026-05-16 11:27:30,477 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.104177065), 'gmm_vol_cluster': np.float32(0.09003322), 'rsi_slope': np.float32(0.09968449), 'atr_normalized': np.float32(0.09437478), 'prev_log_return': np.float32(0.08736873), 'usdchf_log_return': np.float32(0.22536673), 'xagusd_log_return': np.float32(0.09746193), 'xtiusd_log_return': np.float32(0.09873163), 'synth_vix_zscore': np.float32(0.10280151)}
|
|
[2026-05-16 11:27:30,478 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:27:30,480 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:30,786 INFO] src.backtester: Backtest [H1]: Sharpe=-0.014 | MaxDD=0.206 | WR=0.427 | Return=-0.4% | Trades=531
|
|
[2026-05-16 11:27:30,787 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:38,708 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:38,709 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:38,709 INFO] src.engine_hmm: Bull 0.9819 0.0026 0.0115 0.0040
|
|
[2026-05-16 11:27:38,709 INFO] src.engine_hmm: Bear 0.0026 0.9808 0.0122 0.0045
|
|
[2026-05-16 11:27:38,709 INFO] src.engine_hmm: Chop_Low 0.0113 0.0110 0.9775 0.0002
|
|
[2026-05-16 11:27:38,709 INFO] src.engine_hmm: Chop_High 0.0083 0.0110 0.0000 0.9807
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: Bull: return=0.706632, vol=0.006168, rsi_slope=-0.032145
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: Bear: return=-0.677865, vol=-0.223790, rsi_slope=0.035232
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: Chop_Low: return=0.044589, vol=-0.502909, rsi_slope=-0.005036
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: Chop_High: return=-0.193754, vol=1.660505, rsi_slope=0.006144
|
|
[2026-05-16 11:27:38,710 INFO] src.engine_hmm: Total regime transitions: 866
|
|
[2026-05-16 11:27:38,711 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:38,711 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:38,712 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:38,712 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:38,712 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 10:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:38,712 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:38,712 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:38,713 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:38,713 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:38,713 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:38,774 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:38,814 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:39,026 INFO] src.engine_xgb: XGB Train Acc: 0.5910 | Test Acc: 0.5910
|
|
[2026-05-16 11:27:39,026 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.17120053), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09313443), 'atr_normalized': np.float32(0.09699165), 'prev_log_return': np.float32(0.09247385), 'usdchf_log_return': np.float32(0.2768148), 'xagusd_log_return': np.float32(0.094412215), 'xtiusd_log_return': np.float32(0.07921145), 'synth_vix_zscore': np.float32(0.0957611)}
|
|
[2026-05-16 11:27:39,027 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:27:39,259 INFO] src.engine_xgb: XGB Train Acc: 0.5772 | Test Acc: 0.5772
|
|
[2026-05-16 11:27:39,260 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14112648), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0987466), 'atr_normalized': np.float32(0.10218916), 'prev_log_return': np.float32(0.10721216), 'usdchf_log_return': np.float32(0.25353354), 'xagusd_log_return': np.float32(0.10345612), 'xtiusd_log_return': np.float32(0.093006946), 'synth_vix_zscore': np.float32(0.100728974)}
|
|
[2026-05-16 11:27:39,260 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:27:39,545 INFO] src.engine_xgb: XGB Train Acc: 0.5843 | Test Acc: 0.5843
|
|
[2026-05-16 11:27:39,546 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13160098), 'gmm_vol_cluster': np.float32(0.0927381), 'rsi_slope': np.float32(0.093986996), 'atr_normalized': np.float32(0.101982936), 'prev_log_return': np.float32(0.08882408), 'usdchf_log_return': np.float32(0.19437324), 'xagusd_log_return': np.float32(0.102037914), 'xtiusd_log_return': np.float32(0.09419582), 'synth_vix_zscore': np.float32(0.10026001)}
|
|
[2026-05-16 11:27:39,547 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:27:39,549 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:39,867 INFO] src.backtester: Backtest [H1]: Sharpe=-1.920 | MaxDD=0.438 | WR=0.399 | Return=-34.7% | Trades=988
|
|
[2026-05-16 11:27:39,867 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:43,787 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:43,787 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:43,788 INFO] src.engine_hmm: Bull 0.9755 0.0028 0.0144 0.0074
|
|
[2026-05-16 11:27:43,788 INFO] src.engine_hmm: Bear 0.0038 0.9806 0.0107 0.0049
|
|
[2026-05-16 11:27:43,788 INFO] src.engine_hmm: Chop_Low 0.0116 0.0112 0.9759 0.0013
|
|
[2026-05-16 11:27:43,788 INFO] src.engine_hmm: Chop_High 0.0128 0.0101 0.0007 0.9764
|
|
[2026-05-16 11:27:43,788 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:43,789 INFO] src.engine_hmm: Bull: return=0.690937, vol=0.038078, rsi_slope=-0.023434
|
|
[2026-05-16 11:27:43,789 INFO] src.engine_hmm: Bear: return=-0.798620, vol=-0.267916, rsi_slope=0.038528
|
|
[2026-05-16 11:27:43,789 INFO] src.engine_hmm: Chop_Low: return=0.085121, vol=-0.628575, rsi_slope=-0.013539
|
|
[2026-05-16 11:27:43,789 INFO] src.engine_hmm: Chop_High: return=0.141750, vol=1.583514, rsi_slope=-0.006060
|
|
[2026-05-16 11:27:43,790 INFO] src.engine_hmm: Total regime transitions: 994
|
|
[2026-05-16 11:27:43,790 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:43,791 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:43,791 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:43,791 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:43,791 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 08:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:43,792 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:43,792 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:27:43,793 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:43,793 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:43,793 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:43,855 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:43,894 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:44,153 INFO] src.engine_xgb: XGB Train Acc: 0.5946 | Test Acc: 0.5946
|
|
[2026-05-16 11:27:44,153 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.17590384), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.089506574), 'atr_normalized': np.float32(0.09325575), 'prev_log_return': np.float32(0.098195754), 'usdchf_log_return': np.float32(0.2682875), 'xagusd_log_return': np.float32(0.083604805), 'xtiusd_log_return': np.float32(0.09516932), 'synth_vix_zscore': np.float32(0.09607649)}
|
|
[2026-05-16 11:27:44,154 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:27:44,408 INFO] src.engine_xgb: XGB Train Acc: 0.5771 | Test Acc: 0.5771
|
|
[2026-05-16 11:27:44,408 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15019354), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09069712), 'atr_normalized': np.float32(0.09382428), 'prev_log_return': np.float32(0.09778278), 'usdchf_log_return': np.float32(0.2615084), 'xagusd_log_return': np.float32(0.10104382), 'xtiusd_log_return': np.float32(0.09922168), 'synth_vix_zscore': np.float32(0.1057283)}
|
|
[2026-05-16 11:27:44,409 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:27:44,668 INFO] src.engine_xgb: XGB Train Acc: 0.5861 | Test Acc: 0.5861
|
|
[2026-05-16 11:27:44,668 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.102447204), 'gmm_vol_cluster': np.float32(0.090860456), 'rsi_slope': np.float32(0.1026247), 'atr_normalized': np.float32(0.11054868), 'prev_log_return': np.float32(0.09275476), 'usdchf_log_return': np.float32(0.21206854), 'xagusd_log_return': np.float32(0.08999608), 'xtiusd_log_return': np.float32(0.09581128), 'synth_vix_zscore': np.float32(0.10288824)}
|
|
[2026-05-16 11:27:44,669 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:27:44,670 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:44,997 INFO] src.backtester: Backtest [H1]: Sharpe=-0.423 | MaxDD=0.326 | WR=0.423 | Return=-12.6% | Trades=871
|
|
[2026-05-16 11:27:44,997 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:48,015 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:48,015 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:48,015 INFO] src.engine_hmm: Bull 0.9754 0.0033 0.0153 0.0060
|
|
[2026-05-16 11:27:48,015 INFO] src.engine_hmm: Bear 0.0047 0.9801 0.0091 0.0061
|
|
[2026-05-16 11:27:48,015 INFO] src.engine_hmm: Chop_Low 0.0121 0.0104 0.9764 0.0011
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: Chop_High 0.0123 0.0120 0.0005 0.9752
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: Bull: return=0.701961, vol=0.042878, rsi_slope=-0.028910
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: Bear: return=-0.783511, vol=-0.245411, rsi_slope=0.036069
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: Chop_Low: return=0.146654, vol=-0.635985, rsi_slope=-0.012302
|
|
[2026-05-16 11:27:48,016 INFO] src.engine_hmm: Chop_High: return=-0.059597, vol=1.633135, rsi_slope=0.007332
|
|
[2026-05-16 11:27:48,017 INFO] src.engine_hmm: Total regime transitions: 1009
|
|
[2026-05-16 11:27:48,017 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:48,017 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:27:48,018 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:27:48,018 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:48,018 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 10:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:48,019 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:48,019 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:48,019 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:48,019 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:27:48,019 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:27:48,088 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:48,126 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:48,339 INFO] src.engine_xgb: XGB Train Acc: 0.5951 | Test Acc: 0.5951
|
|
[2026-05-16 11:27:48,339 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16950603), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08388463), 'atr_normalized': np.float32(0.0971317), 'prev_log_return': np.float32(0.099512465), 'usdchf_log_return': np.float32(0.2760136), 'xagusd_log_return': np.float32(0.08841489), 'xtiusd_log_return': np.float32(0.089445926), 'synth_vix_zscore': np.float32(0.0960907)}
|
|
[2026-05-16 11:27:48,340 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:27:48,617 INFO] src.engine_xgb: XGB Train Acc: 0.5802 | Test Acc: 0.5802
|
|
[2026-05-16 11:27:48,618 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14207584), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09911472), 'atr_normalized': np.float32(0.09596591), 'prev_log_return': np.float32(0.10454144), 'usdchf_log_return': np.float32(0.25706768), 'xagusd_log_return': np.float32(0.09580901), 'xtiusd_log_return': np.float32(0.094955854), 'synth_vix_zscore': np.float32(0.110469535)}
|
|
[2026-05-16 11:27:48,618 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:27:48,884 INFO] src.engine_xgb: XGB Train Acc: 0.5865 | Test Acc: 0.5865
|
|
[2026-05-16 11:27:48,884 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11244696), 'gmm_vol_cluster': np.float32(0.120277144), 'rsi_slope': np.float32(0.09847677), 'atr_normalized': np.float32(0.09670668), 'prev_log_return': np.float32(0.084505074), 'usdchf_log_return': np.float32(0.21909626), 'xagusd_log_return': np.float32(0.07980292), 'xtiusd_log_return': np.float32(0.09105612), 'synth_vix_zscore': np.float32(0.097632095)}
|
|
[2026-05-16 11:27:48,885 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:27:48,886 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:49,187 INFO] src.backtester: Backtest [H1]: Sharpe=-0.745 | MaxDD=0.427 | WR=0.411 | Return=-21.0% | Trades=834
|
|
[2026-05-16 11:27:49,187 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:49,218 WARNING] src.optimizer: CPCV [H1]: only 4 valid paths — rejecting trial.
|
|
[2026-05-16 11:27:49,292 INFO] src.optimizer: Trial 2 [H1/headway_cent]: score=-50.000 | valid_paths=4/15 | std_sharpe=0.000 | median_trades=834
|
|
Best trial: 1. Best value: -50: 2%|█▊ | 3/130 [04:06<2:56:59, 83.61s/it][2026-05-16 11:27:53,010 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:53,010 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:53,011 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:27:53,011 INFO] src.engine_hmm: Bear 0.0000 0.9740 0.0009 0.0251
|
|
[2026-05-16 11:27:53,011 INFO] src.engine_hmm: Chop_Low 0.0000 0.0032 0.9781 0.0187
|
|
[2026-05-16 11:27:53,011 INFO] src.engine_hmm: Chop_High 0.0000 0.0065 0.0251 0.9684
|
|
[2026-05-16 11:27:53,011 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:53,012 INFO] src.engine_hmm: Bull: return=10.676409, vol=21.141740, rsi_slope=0.396932
|
|
[2026-05-16 11:27:53,012 INFO] src.engine_hmm: Bear: return=-0.085312, vol=1.459239, rsi_slope=-0.005585
|
|
[2026-05-16 11:27:53,012 INFO] src.engine_hmm: Chop_Low: return=0.029038, vol=-0.543830, rsi_slope=0.001973
|
|
[2026-05-16 11:27:53,012 INFO] src.engine_hmm: Chop_High: return=-0.014438, vol=0.034321, rsi_slope=-0.000633
|
|
[2026-05-16 11:27:53,013 INFO] src.engine_hmm: Total regime transitions: 1131
|
|
[2026-05-16 11:27:53,013 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-07 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:53,014 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 01:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:53,014 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:27:53,015 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:27:53,015 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:27:53,016 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-15 01:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:53,016 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 09:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:27:53,016 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:53,017 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:27:53,017 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:27:53,087 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:53,128 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:53,490 INFO] src.engine_xgb: XGB Train Acc: 0.6321 | Test Acc: 0.6321
|
|
[2026-05-16 11:27:53,490 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.094782844), 'gmm_vol_cluster': np.float32(0.13194565), 'rsi_slope': np.float32(0.10130023), 'atr_normalized': np.float32(0.096389815), 'prev_log_return': np.float32(0.093619056), 'usdchf_log_return': np.float32(0.18602863), 'xagusd_log_return': np.float32(0.096842915), 'xtiusd_log_return': np.float32(0.10414953), 'synth_vix_zscore': np.float32(0.09494144)}
|
|
[2026-05-16 11:27:53,491 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:27:53,894 INFO] src.engine_xgb: XGB Train Acc: 0.6376 | Test Acc: 0.6376
|
|
[2026-05-16 11:27:53,895 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09319336), 'gmm_vol_cluster': np.float32(0.09365821), 'rsi_slope': np.float32(0.10424915), 'atr_normalized': np.float32(0.10114895), 'prev_log_return': np.float32(0.10010192), 'usdchf_log_return': np.float32(0.19261953), 'xagusd_log_return': np.float32(0.103631884), 'xtiusd_log_return': np.float32(0.10421109), 'synth_vix_zscore': np.float32(0.107186005)}
|
|
[2026-05-16 11:27:53,896 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:27:54,330 INFO] src.engine_xgb: XGB Train Acc: 0.6357 | Test Acc: 0.6357
|
|
[2026-05-16 11:27:54,330 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10432218), 'gmm_vol_cluster': np.float32(0.10577947), 'rsi_slope': np.float32(0.10213046), 'atr_normalized': np.float32(0.113093525), 'prev_log_return': np.float32(0.09678716), 'usdchf_log_return': np.float32(0.16028136), 'xagusd_log_return': np.float32(0.10566294), 'xtiusd_log_return': np.float32(0.10366519), 'synth_vix_zscore': np.float32(0.10827774)}
|
|
[2026-05-16 11:27:54,331 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:27:54,332 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:54,680 INFO] src.backtester: Backtest [H1]: Sharpe=0.035 | MaxDD=0.049 | WR=0.378 | Return=0.3% | Trades=37
|
|
[2026-05-16 11:27:54,680 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:27:58,093 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:27:58,093 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:27:58,093 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0400 0.0000
|
|
[2026-05-16 11:27:58,094 INFO] src.engine_hmm: Bear 0.0000 0.9783 0.0188 0.0028
|
|
[2026-05-16 11:27:58,094 INFO] src.engine_hmm: Chop_Low 0.0000 0.0227 0.9705 0.0068
|
|
[2026-05-16 11:27:58,094 INFO] src.engine_hmm: Chop_High 0.0000 0.0015 0.0233 0.9752
|
|
[2026-05-16 11:27:58,094 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:27:58,094 INFO] src.engine_hmm: Bull: return=11.595596, vol=22.451308, rsi_slope=0.398559
|
|
[2026-05-16 11:27:58,095 INFO] src.engine_hmm: Bear: return=-0.029210, vol=-0.534399, rsi_slope=-0.001002
|
|
[2026-05-16 11:27:58,095 INFO] src.engine_hmm: Chop_Low: return=0.008298, vol=0.008800, rsi_slope=0.004215
|
|
[2026-05-16 11:27:58,095 INFO] src.engine_hmm: Chop_High: return=0.021388, vol=1.367236, rsi_slope=-0.009249
|
|
[2026-05-16 11:27:58,095 INFO] src.engine_hmm: Total regime transitions: 1085
|
|
[2026-05-16 11:27:58,096 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:27:58,096 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:58,096 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:27:58,097 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:58,097 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:27:58,097 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 19:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:58,097 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:27:58,098 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 20:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:58,098 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:27:58,098 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:27:58,165 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:58,203 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:58,562 INFO] src.engine_xgb: XGB Train Acc: 0.6431 | Test Acc: 0.6431
|
|
[2026-05-16 11:27:58,562 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13032226), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.106462814), 'atr_normalized': np.float32(0.116109274), 'prev_log_return': np.float32(0.113659434), 'usdchf_log_return': np.float32(0.2219091), 'xagusd_log_return': np.float32(0.10606232), 'xtiusd_log_return': np.float32(0.10753698), 'synth_vix_zscore': np.float32(0.097937845)}
|
|
[2026-05-16 11:27:58,563 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:27:58,977 INFO] src.engine_xgb: XGB Train Acc: 0.6384 | Test Acc: 0.6384
|
|
[2026-05-16 11:27:58,977 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09263661), 'gmm_vol_cluster': np.float32(0.08232762), 'rsi_slope': np.float32(0.10321188), 'atr_normalized': np.float32(0.112323545), 'prev_log_return': np.float32(0.09852015), 'usdchf_log_return': np.float32(0.18712851), 'xagusd_log_return': np.float32(0.10544435), 'xtiusd_log_return': np.float32(0.103928626), 'synth_vix_zscore': np.float32(0.11447864)}
|
|
[2026-05-16 11:27:58,978 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:27:59,354 INFO] src.engine_xgb: XGB Train Acc: 0.6343 | Test Acc: 0.6343
|
|
[2026-05-16 11:27:59,354 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08865086), 'gmm_vol_cluster': np.float32(0.0887481), 'rsi_slope': np.float32(0.105075516), 'atr_normalized': np.float32(0.1168584), 'prev_log_return': np.float32(0.10320743), 'usdchf_log_return': np.float32(0.16847007), 'xagusd_log_return': np.float32(0.10523654), 'xtiusd_log_return': np.float32(0.11336439), 'synth_vix_zscore': np.float32(0.11038872)}
|
|
[2026-05-16 11:27:59,355 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:27:59,356 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:27:59,702 INFO] src.backtester: Backtest [H1]: Sharpe=-3.099 | MaxDD=0.452 | WR=0.392 | Return=-35.0% | Trades=673
|
|
[2026-05-16 11:27:59,702 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:02,548 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:02,548 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:02,548 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:28:02,548 INFO] src.engine_hmm: Bear 0.0000 0.9755 0.0008 0.0237
|
|
[2026-05-16 11:28:02,549 INFO] src.engine_hmm: Chop_Low 0.0000 0.0020 0.9794 0.0186
|
|
[2026-05-16 11:28:02,549 INFO] src.engine_hmm: Chop_High 0.0000 0.0080 0.0209 0.9711
|
|
[2026-05-16 11:28:02,549 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:02,549 INFO] src.engine_hmm: Bull: return=11.074499, vol=21.268256, rsi_slope=0.400872
|
|
[2026-05-16 11:28:02,549 INFO] src.engine_hmm: Bear: return=-0.065681, vol=1.380888, rsi_slope=-0.009483
|
|
[2026-05-16 11:28:02,550 INFO] src.engine_hmm: Chop_Low: return=-0.021881, vol=-0.565111, rsi_slope=-0.000325
|
|
[2026-05-16 11:28:02,550 INFO] src.engine_hmm: Chop_High: return=0.035338, vol=-0.004192, rsi_slope=0.003681
|
|
[2026-05-16 11:28:02,550 INFO] src.engine_hmm: Total regime transitions: 1060
|
|
[2026-05-16 11:28:02,550 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:02,551 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:02,551 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:02,551 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:02,551 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:02,552 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 17:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:02,552 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:02,552 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:02,553 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:02,553 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:02,611 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:02,646 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:02,989 INFO] src.engine_xgb: XGB Train Acc: 0.6381 | Test Acc: 0.6381
|
|
[2026-05-16 11:28:02,989 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.121585354), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.110039294), 'atr_normalized': np.float32(0.11001942), 'prev_log_return': np.float32(0.10831677), 'usdchf_log_return': np.float32(0.22277094), 'xagusd_log_return': np.float32(0.10157363), 'xtiusd_log_return': np.float32(0.11279109), 'synth_vix_zscore': np.float32(0.11290345)}
|
|
[2026-05-16 11:28:02,990 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:28:03,348 INFO] src.engine_xgb: XGB Train Acc: 0.6334 | Test Acc: 0.6334
|
|
[2026-05-16 11:28:03,349 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13331822), 'gmm_vol_cluster': np.float32(0.100235224), 'rsi_slope': np.float32(0.0979988), 'atr_normalized': np.float32(0.09612476), 'prev_log_return': np.float32(0.09489033), 'usdchf_log_return': np.float32(0.17310272), 'xagusd_log_return': np.float32(0.10002222), 'xtiusd_log_return': np.float32(0.09907231), 'synth_vix_zscore': np.float32(0.10523545)}
|
|
[2026-05-16 11:28:03,349 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:28:03,784 INFO] src.engine_xgb: XGB Train Acc: 0.6387 | Test Acc: 0.6387
|
|
[2026-05-16 11:28:03,785 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10064416), 'gmm_vol_cluster': np.float32(0.08986789), 'rsi_slope': np.float32(0.10218024), 'atr_normalized': np.float32(0.11451008), 'prev_log_return': np.float32(0.10621534), 'usdchf_log_return': np.float32(0.15515986), 'xagusd_log_return': np.float32(0.10877419), 'xtiusd_log_return': np.float32(0.11046459), 'synth_vix_zscore': np.float32(0.11218361)}
|
|
[2026-05-16 11:28:03,786 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:28:03,787 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:04,126 INFO] src.backtester: Backtest [H1]: Sharpe=0.083 | MaxDD=0.050 | WR=0.429 | Return=1.0% | Trades=119
|
|
[2026-05-16 11:28:04,126 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:06,550 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:06,550 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:06,551 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:28:06,551 INFO] src.engine_hmm: Bear 0.0000 0.9756 0.0006 0.0238
|
|
[2026-05-16 11:28:06,551 INFO] src.engine_hmm: Chop_Low 0.0000 0.0021 0.9803 0.0175
|
|
[2026-05-16 11:28:06,551 INFO] src.engine_hmm: Chop_High 0.0000 0.0069 0.0205 0.9726
|
|
[2026-05-16 11:28:06,551 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:06,552 INFO] src.engine_hmm: Bull: return=11.010445, vol=21.035602, rsi_slope=0.400955
|
|
[2026-05-16 11:28:06,552 INFO] src.engine_hmm: Bear: return=-0.083787, vol=1.463306, rsi_slope=-0.002062
|
|
[2026-05-16 11:28:06,552 INFO] src.engine_hmm: Chop_Low: return=0.003804, vol=-0.556435, rsi_slope=-0.000762
|
|
[2026-05-16 11:28:06,552 INFO] src.engine_hmm: Chop_High: return=0.013297, vol=0.019782, rsi_slope=0.001071
|
|
[2026-05-16 11:28:06,553 INFO] src.engine_hmm: Total regime transitions: 1012
|
|
[2026-05-16 11:28:06,553 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:06,553 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:06,553 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:06,554 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:06,555 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:06,555 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:06,555 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:06,556 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:06,556 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:06,556 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:06,629 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:06,665 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:06,997 INFO] src.engine_xgb: XGB Train Acc: 0.6388 | Test Acc: 0.6388
|
|
[2026-05-16 11:28:06,998 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.124849804), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10462707), 'atr_normalized': np.float32(0.10623718), 'prev_log_return': np.float32(0.11404203), 'usdchf_log_return': np.float32(0.2354977), 'xagusd_log_return': np.float32(0.100121096), 'xtiusd_log_return': np.float32(0.104528554), 'synth_vix_zscore': np.float32(0.11009665)}
|
|
[2026-05-16 11:28:06,998 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:28:07,358 INFO] src.engine_xgb: XGB Train Acc: 0.6337 | Test Acc: 0.6337
|
|
[2026-05-16 11:28:07,359 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10508827), 'gmm_vol_cluster': np.float32(0.07724175), 'rsi_slope': np.float32(0.10600011), 'atr_normalized': np.float32(0.103336565), 'prev_log_return': np.float32(0.09974592), 'usdchf_log_return': np.float32(0.18495572), 'xagusd_log_return': np.float32(0.10532222), 'xtiusd_log_return': np.float32(0.106257595), 'synth_vix_zscore': np.float32(0.11205177)}
|
|
[2026-05-16 11:28:07,359 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:28:07,777 INFO] src.engine_xgb: XGB Train Acc: 0.6512 | Test Acc: 0.6512
|
|
[2026-05-16 11:28:07,778 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09845533), 'gmm_vol_cluster': np.float32(0.10773973), 'rsi_slope': np.float32(0.10413172), 'atr_normalized': np.float32(0.107276924), 'prev_log_return': np.float32(0.099243745), 'usdchf_log_return': np.float32(0.16548277), 'xagusd_log_return': np.float32(0.10731479), 'xtiusd_log_return': np.float32(0.10455201), 'synth_vix_zscore': np.float32(0.10580305)}
|
|
[2026-05-16 11:28:07,778 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:28:07,780 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:08,129 INFO] src.backtester: Backtest [H1]: Sharpe=-0.085 | MaxDD=0.048 | WR=0.400 | Return=-0.9% | Trades=85
|
|
[2026-05-16 11:28:08,129 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:16,521 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:16,521 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:16,521 INFO] src.engine_hmm: Bull 0.9570 0.0042 0.0292 0.0095
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Bear 0.0027 0.9633 0.0294 0.0046
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Chop_Low 0.0224 0.0255 0.9458 0.0063
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Chop_High 0.0303 0.0011 0.0026 0.9661
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Bull: return=0.031596, vol=0.202106, rsi_slope=0.001165
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Bear: return=-0.043156, vol=-0.856010, rsi_slope=-0.007297
|
|
[2026-05-16 11:28:16,522 INFO] src.engine_hmm: Chop_Low: return=0.012751, vol=-0.396600, rsi_slope=0.002813
|
|
[2026-05-16 11:28:16,523 INFO] src.engine_hmm: Chop_High: return=-0.013968, vol=1.586133, rsi_slope=0.003632
|
|
[2026-05-16 11:28:16,523 INFO] src.engine_hmm: Total regime transitions: 1860
|
|
[2026-05-16 11:28:16,523 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:28:16,523 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-07 21:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-08 18:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 23:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:28:16,524 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:28:16,525 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:28:16,525 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-09 06:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:28:16,580 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:16,613 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:16,979 INFO] src.engine_xgb: XGB Train Acc: 0.6430 | Test Acc: 0.6430
|
|
[2026-05-16 11:28:16,980 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13029192), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10391517), 'atr_normalized': np.float32(0.118293524), 'prev_log_return': np.float32(0.10506034), 'usdchf_log_return': np.float32(0.21821606), 'xagusd_log_return': np.float32(0.10371608), 'xtiusd_log_return': np.float32(0.109650426), 'synth_vix_zscore': np.float32(0.11085651)}
|
|
[2026-05-16 11:28:16,980 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:28:17,397 INFO] src.engine_xgb: XGB Train Acc: 0.6368 | Test Acc: 0.6368
|
|
[2026-05-16 11:28:17,397 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10866555), 'gmm_vol_cluster': np.float32(0.074936844), 'rsi_slope': np.float32(0.100400925), 'atr_normalized': np.float32(0.1006653), 'prev_log_return': np.float32(0.09965375), 'usdchf_log_return': np.float32(0.20627046), 'xagusd_log_return': np.float32(0.098493256), 'xtiusd_log_return': np.float32(0.10773363), 'synth_vix_zscore': np.float32(0.10318028)}
|
|
[2026-05-16 11:28:17,398 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:28:17,940 INFO] src.engine_xgb: XGB Train Acc: 0.6413 | Test Acc: 0.6413
|
|
[2026-05-16 11:28:17,941 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09079114), 'gmm_vol_cluster': np.float32(0.09894926), 'rsi_slope': np.float32(0.104014434), 'atr_normalized': np.float32(0.121114105), 'prev_log_return': np.float32(0.10333457), 'usdchf_log_return': np.float32(0.16757245), 'xagusd_log_return': np.float32(0.10316063), 'xtiusd_log_return': np.float32(0.10351541), 'synth_vix_zscore': np.float32(0.10754809)}
|
|
[2026-05-16 11:28:17,941 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:28:17,943 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:18,326 INFO] src.backtester: Backtest [H1]: Sharpe=-3.434 | MaxDD=0.683 | WR=0.368 | Return=-48.8% | Trades=864
|
|
[2026-05-16 11:28:18,326 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:21,727 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:21,727 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:21,728 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:28:21,728 INFO] src.engine_hmm: Bear 0.0000 0.9745 0.0024 0.0231
|
|
[2026-05-16 11:28:21,728 INFO] src.engine_hmm: Chop_Low 0.0000 0.0034 0.9768 0.0197
|
|
[2026-05-16 11:28:21,728 INFO] src.engine_hmm: Chop_High 0.0000 0.0060 0.0248 0.9692
|
|
[2026-05-16 11:28:21,728 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:21,729 INFO] src.engine_hmm: Bull: return=11.308722, vol=22.207606, rsi_slope=0.395522
|
|
[2026-05-16 11:28:21,729 INFO] src.engine_hmm: Bear: return=-0.055184, vol=1.406422, rsi_slope=-0.010474
|
|
[2026-05-16 11:28:21,729 INFO] src.engine_hmm: Chop_Low: return=-0.006360, vol=-0.528728, rsi_slope=0.000398
|
|
[2026-05-16 11:28:21,729 INFO] src.engine_hmm: Chop_High: return=0.013705, vol=0.017813, rsi_slope=0.003067
|
|
[2026-05-16 11:28:21,730 INFO] src.engine_hmm: Total regime transitions: 1141
|
|
[2026-05-16 11:28:21,730 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:21,730 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:28:21,730 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:21,731 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:28:21,731 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:21,731 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:21,732 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:21,732 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 18:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:21,732 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:21,732 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:28:21,793 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:21,828 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:22,143 INFO] src.engine_xgb: XGB Train Acc: 0.6360 | Test Acc: 0.6360
|
|
[2026-05-16 11:28:22,144 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12566097), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10562205), 'atr_normalized': np.float32(0.104646504), 'prev_log_return': np.float32(0.1083038), 'usdchf_log_return': np.float32(0.22985101), 'xagusd_log_return': np.float32(0.11195102), 'xtiusd_log_return': np.float32(0.104418285), 'synth_vix_zscore': np.float32(0.10954635)}
|
|
[2026-05-16 11:28:22,144 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:28:22,569 INFO] src.engine_xgb: XGB Train Acc: 0.6299 | Test Acc: 0.6299
|
|
[2026-05-16 11:28:22,570 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10457423), 'gmm_vol_cluster': np.float32(0.092207976), 'rsi_slope': np.float32(0.10640536), 'atr_normalized': np.float32(0.10330023), 'prev_log_return': np.float32(0.10154114), 'usdchf_log_return': np.float32(0.1851491), 'xagusd_log_return': np.float32(0.09912817), 'xtiusd_log_return': np.float32(0.10357901), 'synth_vix_zscore': np.float32(0.10411478)}
|
|
[2026-05-16 11:28:22,570 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:28:23,050 INFO] src.engine_xgb: XGB Train Acc: 0.6367 | Test Acc: 0.6367
|
|
[2026-05-16 11:28:23,050 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12773715), 'gmm_vol_cluster': np.float32(0.083756834), 'rsi_slope': np.float32(0.10262555), 'atr_normalized': np.float32(0.10822998), 'prev_log_return': np.float32(0.09780213), 'usdchf_log_return': np.float32(0.15748878), 'xagusd_log_return': np.float32(0.101660036), 'xtiusd_log_return': np.float32(0.111664265), 'synth_vix_zscore': np.float32(0.10903536)}
|
|
[2026-05-16 11:28:23,051 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:28:23,052 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:23,407 INFO] src.backtester: Backtest [H1]: Sharpe=-0.598 | MaxDD=0.170 | WR=0.368 | Return=-10.4% | Trades=182
|
|
[2026-05-16 11:28:23,408 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:31,024 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:31,024 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:31,024 INFO] src.engine_hmm: Bull 0.9564 0.0016 0.0248 0.0172
|
|
[2026-05-16 11:28:31,025 INFO] src.engine_hmm: Bear 0.0016 0.9723 0.0006 0.0254
|
|
[2026-05-16 11:28:31,025 INFO] src.engine_hmm: Chop_Low 0.0258 0.0021 0.9677 0.0044
|
|
[2026-05-16 11:28:31,025 INFO] src.engine_hmm: Chop_High 0.0271 0.0065 0.0028 0.9636
|
|
[2026-05-16 11:28:31,025 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:31,025 INFO] src.engine_hmm: Bull: return=0.047930, vol=-0.265608, rsi_slope=0.003699
|
|
[2026-05-16 11:28:31,026 INFO] src.engine_hmm: Bear: return=-0.199792, vol=1.956711, rsi_slope=-0.007784
|
|
[2026-05-16 11:28:31,026 INFO] src.engine_hmm: Chop_Low: return=-0.025124, vol=-0.652740, rsi_slope=-0.005739
|
|
[2026-05-16 11:28:31,026 INFO] src.engine_hmm: Chop_High: return=0.042611, vol=0.286011, rsi_slope=0.004427
|
|
[2026-05-16 11:28:31,026 INFO] src.engine_hmm: Total regime transitions: 1602
|
|
[2026-05-16 11:28:31,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 20:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:31,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 11:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:31,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:31,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:31,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:31,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:31,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:31,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:31,029 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:28:31,029 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:31,086 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:31,118 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:31,449 INFO] src.engine_xgb: XGB Train Acc: 0.6376 | Test Acc: 0.6376
|
|
[2026-05-16 11:28:31,450 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12419212), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11107226), 'atr_normalized': np.float32(0.112824015), 'prev_log_return': np.float32(0.10587833), 'usdchf_log_return': np.float32(0.21206072), 'xagusd_log_return': np.float32(0.11211374), 'xtiusd_log_return': np.float32(0.10640163), 'synth_vix_zscore': np.float32(0.115457244)}
|
|
[2026-05-16 11:28:31,451 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:28:31,846 INFO] src.engine_xgb: XGB Train Acc: 0.6364 | Test Acc: 0.6364
|
|
[2026-05-16 11:28:31,846 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.103086784), 'gmm_vol_cluster': np.float32(0.099478565), 'rsi_slope': np.float32(0.10343312), 'atr_normalized': np.float32(0.10549718), 'prev_log_return': np.float32(0.101797156), 'usdchf_log_return': np.float32(0.17747998), 'xagusd_log_return': np.float32(0.10138929), 'xtiusd_log_return': np.float32(0.103148885), 'synth_vix_zscore': np.float32(0.104688995)}
|
|
[2026-05-16 11:28:31,847 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:28:32,283 INFO] src.engine_xgb: XGB Train Acc: 0.6376 | Test Acc: 0.6376
|
|
[2026-05-16 11:28:32,283 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1087445), 'gmm_vol_cluster': np.float32(0.09482655), 'rsi_slope': np.float32(0.09894627), 'atr_normalized': np.float32(0.1146718), 'prev_log_return': np.float32(0.101865955), 'usdchf_log_return': np.float32(0.1651948), 'xagusd_log_return': np.float32(0.09822943), 'xtiusd_log_return': np.float32(0.10522182), 'synth_vix_zscore': np.float32(0.11229882)}
|
|
[2026-05-16 11:28:32,284 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:28:32,286 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:32,637 INFO] src.backtester: Backtest [H1]: Sharpe=-2.881 | MaxDD=0.535 | WR=0.352 | Return=-39.3% | Trades=660
|
|
[2026-05-16 11:28:32,637 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:35,657 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:35,657 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:35,657 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:28:35,657 INFO] src.engine_hmm: Bear 0.0000 0.9750 0.0012 0.0237
|
|
[2026-05-16 11:28:35,658 INFO] src.engine_hmm: Chop_Low 0.0000 0.0027 0.9794 0.0178
|
|
[2026-05-16 11:28:35,658 INFO] src.engine_hmm: Chop_High 0.0000 0.0062 0.0232 0.9706
|
|
[2026-05-16 11:28:35,658 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:35,658 INFO] src.engine_hmm: Bull: return=10.773954, vol=20.910756, rsi_slope=0.398063
|
|
[2026-05-16 11:28:35,658 INFO] src.engine_hmm: Bear: return=-0.149844, vol=1.510449, rsi_slope=-0.001151
|
|
[2026-05-16 11:28:35,659 INFO] src.engine_hmm: Chop_Low: return=0.028726, vol=-0.540447, rsi_slope=0.000245
|
|
[2026-05-16 11:28:35,659 INFO] src.engine_hmm: Chop_High: return=0.008150, vol=0.038432, rsi_slope=-0.000375
|
|
[2026-05-16 11:28:35,659 INFO] src.engine_hmm: Total regime transitions: 1073
|
|
[2026-05-16 11:28:35,660 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:35,660 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:35,660 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:35,661 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:35,661 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:35,661 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:35,661 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:35,661 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:28:35,663 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:35,663 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:35,727 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:35,764 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:36,118 INFO] src.engine_xgb: XGB Train Acc: 0.6348 | Test Acc: 0.6348
|
|
[2026-05-16 11:28:36,118 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10381878), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.114389285), 'atr_normalized': np.float32(0.11439918), 'prev_log_return': np.float32(0.11052866), 'usdchf_log_return': np.float32(0.22425358), 'xagusd_log_return': np.float32(0.11087299), 'xtiusd_log_return': np.float32(0.10686269), 'synth_vix_zscore': np.float32(0.11487484)}
|
|
[2026-05-16 11:28:36,119 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:28:36,519 INFO] src.engine_xgb: XGB Train Acc: 0.6380 | Test Acc: 0.6380
|
|
[2026-05-16 11:28:36,519 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.109331354), 'gmm_vol_cluster': np.float32(0.08325605), 'rsi_slope': np.float32(0.104909375), 'atr_normalized': np.float32(0.11144643), 'prev_log_return': np.float32(0.10132807), 'usdchf_log_return': np.float32(0.17802091), 'xagusd_log_return': np.float32(0.09803807), 'xtiusd_log_return': np.float32(0.10398837), 'synth_vix_zscore': np.float32(0.10968137)}
|
|
[2026-05-16 11:28:36,520 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:28:36,917 INFO] src.engine_xgb: XGB Train Acc: 0.6374 | Test Acc: 0.6374
|
|
[2026-05-16 11:28:36,917 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09605261), 'gmm_vol_cluster': np.float32(0.09792448), 'rsi_slope': np.float32(0.10225815), 'atr_normalized': np.float32(0.112377256), 'prev_log_return': np.float32(0.101178534), 'usdchf_log_return': np.float32(0.17341816), 'xagusd_log_return': np.float32(0.09933555), 'xtiusd_log_return': np.float32(0.1047891), 'synth_vix_zscore': np.float32(0.112666175)}
|
|
[2026-05-16 11:28:36,918 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:28:36,919 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:37,233 INFO] src.backtester: Backtest [H1]: Sharpe=0.040 | MaxDD=0.036 | WR=0.383 | Return=0.3% | Trades=60
|
|
[2026-05-16 11:28:37,233 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:46,676 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Bull 0.9536 0.0068 0.0279 0.0117
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Bear 0.0031 0.9297 0.0011 0.0661
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Chop_Low 0.0246 0.0090 0.9664 0.0000
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Chop_High 0.0306 0.0057 0.0054 0.9583
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:46,677 INFO] src.engine_hmm: Bull: return=0.078899, vol=-0.216883, rsi_slope=0.007172
|
|
[2026-05-16 11:28:46,678 INFO] src.engine_hmm: Bear: return=-0.140950, vol=2.083997, rsi_slope=-0.033971
|
|
[2026-05-16 11:28:46,678 INFO] src.engine_hmm: Chop_Low: return=0.012335, vol=-0.779769, rsi_slope=-0.002998
|
|
[2026-05-16 11:28:46,678 INFO] src.engine_hmm: Chop_High: return=-0.071278, vol=0.528440, rsi_slope=0.007138
|
|
[2026-05-16 11:28:46,678 INFO] src.engine_hmm: Total regime transitions: 1903
|
|
[2026-05-16 11:28:46,679 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 17:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:46,679 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:46,679 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:46,680 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:46,680 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:46,680 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:46,680 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:28:46,681 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:46,681 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:46,681 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:28:46,744 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:46,784 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:47,107 INFO] src.engine_xgb: XGB Train Acc: 0.6392 | Test Acc: 0.6392
|
|
[2026-05-16 11:28:47,107 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.111703515), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.11028132), 'atr_normalized': np.float32(0.11665788), 'prev_log_return': np.float32(0.10709124), 'usdchf_log_return': np.float32(0.22050543), 'xagusd_log_return': np.float32(0.11442223), 'xtiusd_log_return': np.float32(0.10394856), 'synth_vix_zscore': np.float32(0.115389824)}
|
|
[2026-05-16 11:28:47,108 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:28:47,515 INFO] src.engine_xgb: XGB Train Acc: 0.6380 | Test Acc: 0.6380
|
|
[2026-05-16 11:28:47,515 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11016207), 'gmm_vol_cluster': np.float32(0.08208608), 'rsi_slope': np.float32(0.10395172), 'atr_normalized': np.float32(0.10594071), 'prev_log_return': np.float32(0.10314525), 'usdchf_log_return': np.float32(0.18630332), 'xagusd_log_return': np.float32(0.103637874), 'xtiusd_log_return': np.float32(0.1007573), 'synth_vix_zscore': np.float32(0.10401566)}
|
|
[2026-05-16 11:28:47,517 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:28:47,924 INFO] src.engine_xgb: XGB Train Acc: 0.6417 | Test Acc: 0.6417
|
|
[2026-05-16 11:28:47,924 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09597979), 'gmm_vol_cluster': np.float32(0.11251227), 'rsi_slope': np.float32(0.10127283), 'atr_normalized': np.float32(0.11617844), 'prev_log_return': np.float32(0.10183265), 'usdchf_log_return': np.float32(0.1563567), 'xagusd_log_return': np.float32(0.10091845), 'xtiusd_log_return': np.float32(0.10742135), 'synth_vix_zscore': np.float32(0.10752752)}
|
|
[2026-05-16 11:28:47,925 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:28:47,927 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:48,265 INFO] src.backtester: Backtest [H1]: Sharpe=-1.735 | MaxDD=0.575 | WR=0.387 | Return=-41.8% | Trades=773
|
|
[2026-05-16 11:28:48,266 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:52,212 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:52,213 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:52,213 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0400 0.0000
|
|
[2026-05-16 11:28:52,213 INFO] src.engine_hmm: Bear 0.0000 0.9780 0.0195 0.0024
|
|
[2026-05-16 11:28:52,213 INFO] src.engine_hmm: Chop_Low 0.0000 0.0211 0.9715 0.0074
|
|
[2026-05-16 11:28:52,214 INFO] src.engine_hmm: Chop_High 0.0000 0.0016 0.0239 0.9745
|
|
[2026-05-16 11:28:52,214 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:52,214 INFO] src.engine_hmm: Bull: return=11.803559, vol=22.603535, rsi_slope=0.399677
|
|
[2026-05-16 11:28:52,214 INFO] src.engine_hmm: Bear: return=-0.051269, vol=-0.538305, rsi_slope=-0.001412
|
|
[2026-05-16 11:28:52,214 INFO] src.engine_hmm: Chop_Low: return=0.033697, vol=-0.014639, rsi_slope=0.004915
|
|
[2026-05-16 11:28:52,215 INFO] src.engine_hmm: Chop_High: return=0.006209, vol=1.344769, rsi_slope=-0.010434
|
|
[2026-05-16 11:28:52,215 INFO] src.engine_hmm: Total regime transitions: 1102
|
|
[2026-05-16 11:28:52,215 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:52,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:52,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:52,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:52,216 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_Low -> Bear
|
|
[2026-05-16 11:28:52,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop_Low
|
|
[2026-05-16 11:28:52,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:52,217 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 01:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:52,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:28:52,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:52,276 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:52,315 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:52,653 INFO] src.engine_xgb: XGB Train Acc: 0.6382 | Test Acc: 0.6382
|
|
[2026-05-16 11:28:52,653 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13119818), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10672362), 'atr_normalized': np.float32(0.11060337), 'prev_log_return': np.float32(0.105588235), 'usdchf_log_return': np.float32(0.21436305), 'xagusd_log_return': np.float32(0.10505877), 'xtiusd_log_return': np.float32(0.11200797), 'synth_vix_zscore': np.float32(0.114456795)}
|
|
[2026-05-16 11:28:52,654 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:28:53,034 INFO] src.engine_xgb: XGB Train Acc: 0.6381 | Test Acc: 0.6381
|
|
[2026-05-16 11:28:53,034 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11132058), 'gmm_vol_cluster': np.float32(0.08614989), 'rsi_slope': np.float32(0.101907395), 'atr_normalized': np.float32(0.10222511), 'prev_log_return': np.float32(0.09969213), 'usdchf_log_return': np.float32(0.17861773), 'xagusd_log_return': np.float32(0.09910411), 'xtiusd_log_return': np.float32(0.10683732), 'synth_vix_zscore': np.float32(0.11414578)}
|
|
[2026-05-16 11:28:53,035 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:28:53,418 INFO] src.engine_xgb: XGB Train Acc: 0.6328 | Test Acc: 0.6328
|
|
[2026-05-16 11:28:53,418 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10109893), 'gmm_vol_cluster': np.float32(0.103449434), 'rsi_slope': np.float32(0.10002131), 'atr_normalized': np.float32(0.11516707), 'prev_log_return': np.float32(0.10036726), 'usdchf_log_return': np.float32(0.16859736), 'xagusd_log_return': np.float32(0.10034897), 'xtiusd_log_return': np.float32(0.10599109), 'synth_vix_zscore': np.float32(0.10495854)}
|
|
[2026-05-16 11:28:53,419 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:28:53,420 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:53,745 INFO] src.backtester: Backtest [H1]: Sharpe=-2.111 | MaxDD=0.260 | WR=0.368 | Return=-22.6% | Trades=448
|
|
[2026-05-16 11:28:53,746 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:28:56,950 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:28:56,950 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:28:56,950 INFO] src.engine_hmm: Bull 0.9563 0.0016 0.0262 0.0159
|
|
[2026-05-16 11:28:56,950 INFO] src.engine_hmm: Bear 0.0029 0.9759 0.0000 0.0213
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: Chop_Low 0.0212 0.0013 0.9732 0.0042
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: Chop_High 0.0263 0.0050 0.0044 0.9643
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: Bull: return=0.043333, vol=-0.193810, rsi_slope=0.001634
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: Bear: return=-0.113477, vol=2.092514, rsi_slope=-0.011277
|
|
[2026-05-16 11:28:56,951 INFO] src.engine_hmm: Chop_Low: return=-0.018184, vol=-0.574993, rsi_slope=-0.000676
|
|
[2026-05-16 11:28:56,952 INFO] src.engine_hmm: Chop_High: return=0.010839, vol=0.333206, rsi_slope=0.003006
|
|
[2026-05-16 11:28:56,952 INFO] src.engine_hmm: Total regime transitions: 1485
|
|
[2026-05-16 11:28:56,952 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:56,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:56,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 10:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:56,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:28:56,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:56,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:28:56,954 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:28:56,954 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:28:56,954 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:28:56,954 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:28:57,015 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:57,051 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:57,380 INFO] src.engine_xgb: XGB Train Acc: 0.6415 | Test Acc: 0.6415
|
|
[2026-05-16 11:28:57,381 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11816802), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10491284), 'atr_normalized': np.float32(0.10896923), 'prev_log_return': np.float32(0.11144446), 'usdchf_log_return': np.float32(0.2385591), 'xagusd_log_return': np.float32(0.1051251), 'xtiusd_log_return': np.float32(0.10702152), 'synth_vix_zscore': np.float32(0.10579976)}
|
|
[2026-05-16 11:28:57,381 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:28:57,746 INFO] src.engine_xgb: XGB Train Acc: 0.6333 | Test Acc: 0.6333
|
|
[2026-05-16 11:28:57,746 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0985211), 'gmm_vol_cluster': np.float32(0.110514365), 'rsi_slope': np.float32(0.100202195), 'atr_normalized': np.float32(0.10555294), 'prev_log_return': np.float32(0.096828096), 'usdchf_log_return': np.float32(0.18125446), 'xagusd_log_return': np.float32(0.104471676), 'xtiusd_log_return': np.float32(0.09745516), 'synth_vix_zscore': np.float32(0.10520002)}
|
|
[2026-05-16 11:28:57,747 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:28:58,127 INFO] src.engine_xgb: XGB Train Acc: 0.6319 | Test Acc: 0.6319
|
|
[2026-05-16 11:28:58,127 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09509934), 'gmm_vol_cluster': np.float32(0.079292394), 'rsi_slope': np.float32(0.103561655), 'atr_normalized': np.float32(0.10911922), 'prev_log_return': np.float32(0.10020614), 'usdchf_log_return': np.float32(0.18951271), 'xagusd_log_return': np.float32(0.10115976), 'xtiusd_log_return': np.float32(0.11085827), 'synth_vix_zscore': np.float32(0.11119058)}
|
|
[2026-05-16 11:28:58,128 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:28:58,129 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:28:58,479 INFO] src.backtester: Backtest [H1]: Sharpe=-1.878 | MaxDD=0.471 | WR=0.385 | Return=-36.0% | Trades=759
|
|
[2026-05-16 11:28:58,479 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:04,283 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:04,283 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:29:04,283 INFO] src.engine_hmm: Bull 0.9533 0.0018 0.0049 0.0400
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: Bear 0.0089 0.9637 0.0274 0.0000
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: Chop_Low 0.0067 0.0296 0.9443 0.0194
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: Chop_High 0.0082 0.0057 0.0327 0.9534
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: Bull: return=0.066218, vol=1.709985, rsi_slope=0.007999
|
|
[2026-05-16 11:29:04,284 INFO] src.engine_hmm: Bear: return=-0.046637, vol=-0.837479, rsi_slope=-0.005588
|
|
[2026-05-16 11:29:04,285 INFO] src.engine_hmm: Chop_Low: return=-0.013432, vol=-0.294711, rsi_slope=0.002072
|
|
[2026-05-16 11:29:04,285 INFO] src.engine_hmm: Chop_High: return=0.033132, vol=0.361285, rsi_slope=-0.000531
|
|
[2026-05-16 11:29:04,286 INFO] src.engine_hmm: Total regime transitions: 2017
|
|
[2026-05-16 11:29:04,286 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:29:04,286 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 18:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:29:04,286 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:04,287 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:04,287 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:29:04,287 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:29:04,287 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:04,288 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop_Low
|
|
[2026-05-16 11:29:04,288 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 18:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:29:04,288 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 03:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:04,350 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:04,384 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:04,719 INFO] src.engine_xgb: XGB Train Acc: 0.6403 | Test Acc: 0.6403
|
|
[2026-05-16 11:29:04,720 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11755142), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.112518765), 'atr_normalized': np.float32(0.106554374), 'prev_log_return': np.float32(0.10418349), 'usdchf_log_return': np.float32(0.23935543), 'xagusd_log_return': np.float32(0.105808154), 'xtiusd_log_return': np.float32(0.10514192), 'synth_vix_zscore': np.float32(0.10888649)}
|
|
[2026-05-16 11:29:04,720 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:29:05,092 INFO] src.engine_xgb: XGB Train Acc: 0.6391 | Test Acc: 0.6391
|
|
[2026-05-16 11:29:05,092 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11337775), 'gmm_vol_cluster': np.float32(0.08159482), 'rsi_slope': np.float32(0.101247095), 'atr_normalized': np.float32(0.103705645), 'prev_log_return': np.float32(0.10153109), 'usdchf_log_return': np.float32(0.18874961), 'xagusd_log_return': np.float32(0.09476594), 'xtiusd_log_return': np.float32(0.101955906), 'synth_vix_zscore': np.float32(0.11307214)}
|
|
[2026-05-16 11:29:05,093 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:29:05,516 INFO] src.engine_xgb: XGB Train Acc: 0.6426 | Test Acc: 0.6426
|
|
[2026-05-16 11:29:05,516 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0991213), 'gmm_vol_cluster': np.float32(0.104729086), 'rsi_slope': np.float32(0.10121931), 'atr_normalized': np.float32(0.10477573), 'prev_log_return': np.float32(0.098193124), 'usdchf_log_return': np.float32(0.18274942), 'xagusd_log_return': np.float32(0.10143472), 'xtiusd_log_return': np.float32(0.10355634), 'synth_vix_zscore': np.float32(0.104221016)}
|
|
[2026-05-16 11:29:05,517 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:29:05,518 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:05,870 INFO] src.backtester: Backtest [H1]: Sharpe=-1.034 | MaxDD=0.351 | WR=0.408 | Return=-28.0% | Trades=737
|
|
[2026-05-16 11:29:05,870 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Bull 0.9600 0.0000 0.0000 0.0400
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Bear 0.0000 0.9767 0.0008 0.0226
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Chop_Low 0.0000 0.0014 0.9814 0.0172
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Chop_High 0.0000 0.0071 0.0199 0.9730
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Bull: return=11.193255, vol=21.098616, rsi_slope=0.402024
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Bear: return=-0.130461, vol=1.483763, rsi_slope=-0.005692
|
|
[2026-05-16 11:29:08,593 INFO] src.engine_hmm: Chop_Low: return=-0.016487, vol=-0.546884, rsi_slope=-0.001520
|
|
[2026-05-16 11:29:08,595 INFO] src.engine_hmm: Chop_High: return=0.051844, vol=0.019052, rsi_slope=0.003239
|
|
[2026-05-16 11:29:08,595 INFO] src.engine_hmm: Total regime transitions: 979
|
|
[2026-05-16 11:29:08,595 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:29:08,595 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 22:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:29:08,596 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:29:08,596 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:29:08,596 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:29:08,597 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop_Low -> Chop_High
|
|
[2026-05-16 11:29:08,597 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:29:08,597 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:29:08,597 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-06 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:29:08,598 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-09 12:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:29:08,658 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:08,698 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:09,044 INFO] src.engine_xgb: XGB Train Acc: 0.6397 | Test Acc: 0.6397
|
|
[2026-05-16 11:29:09,045 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.097351484), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.109632544), 'atr_normalized': np.float32(0.10378144), 'prev_log_return': np.float32(0.10913348), 'usdchf_log_return': np.float32(0.24525514), 'xagusd_log_return': np.float32(0.1105207), 'xtiusd_log_return': np.float32(0.11411491), 'synth_vix_zscore': np.float32(0.11021029)}
|
|
[2026-05-16 11:29:09,045 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:29:09,453 INFO] src.engine_xgb: XGB Train Acc: 0.6338 | Test Acc: 0.6338
|
|
[2026-05-16 11:29:09,454 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15378217), 'gmm_vol_cluster': np.float32(0.08524959), 'rsi_slope': np.float32(0.09748508), 'atr_normalized': np.float32(0.09723575), 'prev_log_return': np.float32(0.095415324), 'usdchf_log_return': np.float32(0.17715679), 'xagusd_log_return': np.float32(0.09529112), 'xtiusd_log_return': np.float32(0.09348614), 'synth_vix_zscore': np.float32(0.104898095)}
|
|
[2026-05-16 11:29:09,454 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:29:09,886 INFO] src.engine_xgb: XGB Train Acc: 0.6346 | Test Acc: 0.6346
|
|
[2026-05-16 11:29:09,887 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.107153624), 'gmm_vol_cluster': np.float32(0.0980183), 'rsi_slope': np.float32(0.096252844), 'atr_normalized': np.float32(0.116022915), 'prev_log_return': np.float32(0.10118052), 'usdchf_log_return': np.float32(0.16909724), 'xagusd_log_return': np.float32(0.10012893), 'xtiusd_log_return': np.float32(0.10183526), 'synth_vix_zscore': np.float32(0.11031032)}
|
|
[2026-05-16 11:29:09,887 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:29:09,889 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:10,254 INFO] src.backtester: Backtest [H1]: Sharpe=0.400 | MaxDD=0.040 | WR=0.418 | Return=4.2% | Trades=134
|
|
[2026-05-16 11:29:10,254 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:17,661 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:17,661 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:29:17,661 INFO] src.engine_hmm: Bull 0.9573 0.0082 0.0046 0.0299
|
|
[2026-05-16 11:29:17,662 INFO] src.engine_hmm: Bear 0.0416 0.9533 0.0012 0.0039
|
|
[2026-05-16 11:29:17,662 INFO] src.engine_hmm: Chop_Low 0.0000 0.0056 0.9708 0.0235
|
|
[2026-05-16 11:29:17,662 INFO] src.engine_hmm: Chop_High 0.0174 0.0047 0.0286 0.9494
|
|
[2026-05-16 11:29:17,662 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:17,663 INFO] src.engine_hmm: Bull: return=0.057684, vol=0.457029, rsi_slope=0.002531
|
|
[2026-05-16 11:29:17,663 INFO] src.engine_hmm: Bear: return=-0.121464, vol=1.953540, rsi_slope=-0.017155
|
|
[2026-05-16 11:29:17,663 INFO] src.engine_hmm: Chop_Low: return=-0.050706, vol=-0.759038, rsi_slope=-0.005315
|
|
[2026-05-16 11:29:17,663 INFO] src.engine_hmm: Chop_High: return=0.057310, vol=-0.228335, rsi_slope=0.010352
|
|
[2026-05-16 11:29:17,664 INFO] src.engine_hmm: Total regime transitions: 1795
|
|
[2026-05-16 11:29:17,665 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:17,665 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:17,665 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:17,666 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:17,668 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop_High
|
|
[2026-05-16 11:29:17,729 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:17,767 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:18,093 INFO] src.engine_xgb: XGB Train Acc: 0.6398 | Test Acc: 0.6398
|
|
[2026-05-16 11:29:18,094 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11500437), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.110217705), 'atr_normalized': np.float32(0.10763597), 'prev_log_return': np.float32(0.10981262), 'usdchf_log_return': np.float32(0.23118636), 'xagusd_log_return': np.float32(0.107440084), 'xtiusd_log_return': np.float32(0.10928703), 'synth_vix_zscore': np.float32(0.10941587)}
|
|
[2026-05-16 11:29:18,094 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:29:18,563 INFO] src.engine_xgb: XGB Train Acc: 0.6333 | Test Acc: 0.6333
|
|
[2026-05-16 11:29:18,564 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10349587), 'gmm_vol_cluster': np.float32(0.08984641), 'rsi_slope': np.float32(0.101422206), 'atr_normalized': np.float32(0.09782641), 'prev_log_return': np.float32(0.09829485), 'usdchf_log_return': np.float32(0.19630073), 'xagusd_log_return': np.float32(0.096882336), 'xtiusd_log_return': np.float32(0.10606946), 'synth_vix_zscore': np.float32(0.109861724)}
|
|
[2026-05-16 11:29:18,564 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:29:19,049 INFO] src.engine_xgb: XGB Train Acc: 0.6357 | Test Acc: 0.6357
|
|
[2026-05-16 11:29:19,050 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09543194), 'gmm_vol_cluster': np.float32(0.10206209), 'rsi_slope': np.float32(0.10240857), 'atr_normalized': np.float32(0.110790886), 'prev_log_return': np.float32(0.099362254), 'usdchf_log_return': np.float32(0.18174997), 'xagusd_log_return': np.float32(0.102366425), 'xtiusd_log_return': np.float32(0.100702636), 'synth_vix_zscore': np.float32(0.10512526)}
|
|
[2026-05-16 11:29:19,051 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:29:19,053 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:19,430 INFO] src.backtester: Backtest [H1]: Sharpe=-1.551 | MaxDD=0.677 | WR=0.383 | Return=-42.5% | Trades=960
|
|
[2026-05-16 11:29:19,430 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:29,457 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:29,458 INFO] src.engine_hmm: Bull Bear Chop_Low Chop_High
|
|
[2026-05-16 11:29:29,458 INFO] src.engine_hmm: Bull 0.9555 0.0058 0.0271 0.0117
|
|
[2026-05-16 11:29:29,458 INFO] src.engine_hmm: Bear 0.0031 0.9366 0.0009 0.0594
|
|
[2026-05-16 11:29:29,458 INFO] src.engine_hmm: Chop_Low 0.0204 0.0064 0.9732 0.0000
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: Chop_High 0.0288 0.0065 0.0049 0.9598
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: Bull: return=0.047448, vol=-0.171664, rsi_slope=-0.000444
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: Bear: return=-0.154698, vol=2.160582, rsi_slope=-0.019071
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: Chop_Low: return=0.021170, vol=-0.726868, rsi_slope=0.001399
|
|
[2026-05-16 11:29:29,459 INFO] src.engine_hmm: Chop_High: return=-0.040731, vol=0.574123, rsi_slope=0.005904
|
|
[2026-05-16 11:29:29,460 INFO] src.engine_hmm: Total regime transitions: 1704
|
|
[2026-05-16 11:29:29,460 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:29,461 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:29,461 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 10:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:29,461 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop_High -> Bull
|
|
[2026-05-16 11:29:29,461 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:29,462 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop_High -> Bear
|
|
[2026-05-16 11:29:29,462 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:29,462 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop_High
|
|
[2026-05-16 11:29:29,463 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop_High -> Chop_Low
|
|
[2026-05-16 11:29:29,463 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop_Low -> Bull
|
|
[2026-05-16 11:29:29,529 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:29,565 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:29,909 INFO] src.engine_xgb: XGB Train Acc: 0.6395 | Test Acc: 0.6395
|
|
[2026-05-16 11:29:29,910 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12146738), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10619314), 'atr_normalized': np.float32(0.11099415), 'prev_log_return': np.float32(0.11148556), 'usdchf_log_return': np.float32(0.22569597), 'xagusd_log_return': np.float32(0.10866146), 'xtiusd_log_return': np.float32(0.10696967), 'synth_vix_zscore': np.float32(0.108532675)}
|
|
[2026-05-16 11:29:29,910 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:29:30,350 INFO] src.engine_xgb: XGB Train Acc: 0.6322 | Test Acc: 0.6322
|
|
[2026-05-16 11:29:30,350 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09574205), 'gmm_vol_cluster': np.float32(0.08153757), 'rsi_slope': np.float32(0.101779416), 'atr_normalized': np.float32(0.102224864), 'prev_log_return': np.float32(0.10065528), 'usdchf_log_return': np.float32(0.19241074), 'xagusd_log_return': np.float32(0.106958464), 'xtiusd_log_return': np.float32(0.10698292), 'synth_vix_zscore': np.float32(0.11170871)}
|
|
[2026-05-16 11:29:30,351 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:29:30,734 INFO] src.engine_xgb: XGB Train Acc: 0.6412 | Test Acc: 0.6412
|
|
[2026-05-16 11:29:30,735 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09437354), 'gmm_vol_cluster': np.float32(0.090759), 'rsi_slope': np.float32(0.104909785), 'atr_normalized': np.float32(0.114967376), 'prev_log_return': np.float32(0.09763372), 'usdchf_log_return': np.float32(0.18694101), 'xagusd_log_return': np.float32(0.10190343), 'xtiusd_log_return': np.float32(0.10014568), 'synth_vix_zscore': np.float32(0.10836651)}
|
|
[2026-05-16 11:29:30,735 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:29:30,737 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:31,082 INFO] src.backtester: Backtest [H1]: Sharpe=-1.068 | MaxDD=0.430 | WR=0.424 | Return=-31.1% | Trades=927
|
|
[2026-05-16 11:29:31,082 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:31,114 INFO] src.optimizer: CPCV [H1]: 6/15 valid paths | median_score=-50.000 std=24.543 | median_sharpe=-10.000 | median_trades=660 | final_score=-56.136
|
|
[2026-05-16 11:29:31,178 INFO] src.optimizer: Trial 3 [H1/headway_cent]: score=-56.136 | valid_paths=6/15 | std_sharpe=4.892 | median_trades=660
|
|
Best trial: 1. Best value: -50: 3%|██▎ | 4/130 [05:48<3:10:44, 90.83s/it][2026-05-16 11:29:35,228 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:35,228 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:35,228 INFO] src.engine_hmm: Bull 0.9824 0.0020 0.0156
|
|
[2026-05-16 11:29:35,228 INFO] src.engine_hmm: Bear 0.0008 0.9748 0.0244
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: Chop 0.0228 0.0056 0.9716
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: Bull: return=0.046600, vol=-0.516119, rsi_slope=-0.000344
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: Bear: return=-0.164359, vol=1.746927, rsi_slope=-0.012474
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: Chop: return=-0.007506, vol=0.107079, rsi_slope=0.004518
|
|
[2026-05-16 11:29:35,229 INFO] src.engine_hmm: Total regime transitions: 993
|
|
[2026-05-16 11:29:35,230 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 03:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:35,230 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:35,230 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:35,230 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:35,230 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:35,231 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:35,231 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:35,232 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:35,233 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:35,233 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:35,295 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:35,335 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:35,518 INFO] src.engine_xgb: XGB Train Acc: 0.5472 | Test Acc: 0.5472
|
|
[2026-05-16 11:29:35,518 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.111374944), 'gmm_vol_cluster': np.float32(0.11096363), 'rsi_slope': np.float32(0.08858801), 'atr_normalized': np.float32(0.09253679), 'prev_log_return': np.float32(0.08298811), 'usdchf_log_return': np.float32(0.22587688), 'xagusd_log_return': np.float32(0.10304873), 'xtiusd_log_return': np.float32(0.093677945), 'synth_vix_zscore': np.float32(0.09094496)}
|
|
[2026-05-16 11:29:35,519 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:29:35,726 INFO] src.engine_xgb: XGB Train Acc: 0.5529 | Test Acc: 0.5529
|
|
[2026-05-16 11:29:35,727 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08250555), 'gmm_vol_cluster': np.float32(0.06776967), 'rsi_slope': np.float32(0.105499625), 'atr_normalized': np.float32(0.101328), 'prev_log_return': np.float32(0.09487163), 'usdchf_log_return': np.float32(0.23400201), 'xagusd_log_return': np.float32(0.107375465), 'xtiusd_log_return': np.float32(0.10380185), 'synth_vix_zscore': np.float32(0.102846265)}
|
|
[2026-05-16 11:29:35,727 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:29:35,946 INFO] src.engine_xgb: XGB Train Acc: 0.5415 | Test Acc: 0.5415
|
|
[2026-05-16 11:29:35,947 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.090157114), 'gmm_vol_cluster': np.float32(0.09433517), 'rsi_slope': np.float32(0.09887442), 'atr_normalized': np.float32(0.117832154), 'prev_log_return': np.float32(0.105738126), 'usdchf_log_return': np.float32(0.18237732), 'xagusd_log_return': np.float32(0.102812506), 'xtiusd_log_return': np.float32(0.09844935), 'synth_vix_zscore': np.float32(0.10942385)}
|
|
[2026-05-16 11:29:35,947 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:29:35,949 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:36,255 INFO] src.backtester: Backtest [H1]: Sharpe=-8.379 | MaxDD=2.083 | WR=0.300 | Return=-87.3% | Trades=972
|
|
[2026-05-16 11:29:36,256 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:38,792 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:38,793 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:38,793 INFO] src.engine_hmm: Bull 0.9774 0.0012 0.0214
|
|
[2026-05-16 11:29:38,793 INFO] src.engine_hmm: Bear 0.0020 0.9804 0.0176
|
|
[2026-05-16 11:29:38,793 INFO] src.engine_hmm: Chop 0.0052 0.0216 0.9731
|
|
[2026-05-16 11:29:38,793 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:38,794 INFO] src.engine_hmm: Bull: return=0.072572, vol=1.610005, rsi_slope=-0.013765
|
|
[2026-05-16 11:29:38,794 INFO] src.engine_hmm: Bear: return=-0.044194, vol=-0.519264, rsi_slope=0.000475
|
|
[2026-05-16 11:29:38,794 INFO] src.engine_hmm: Chop: return=0.026082, vol=0.058118, rsi_slope=0.003977
|
|
[2026-05-16 11:29:38,794 INFO] src.engine_hmm: Total regime transitions: 1018
|
|
[2026-05-16 11:29:38,795 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:38,795 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:38,795 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:38,795 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:38,796 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:38,796 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 19:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:38,796 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:38,796 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:38,796 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:38,797 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:38,854 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:38,892 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:39,134 INFO] src.engine_xgb: XGB Train Acc: 0.5523 | Test Acc: 0.5523
|
|
[2026-05-16 11:29:39,135 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.115356736), 'gmm_vol_cluster': np.float32(0.1091057), 'rsi_slope': np.float32(0.093266785), 'atr_normalized': np.float32(0.09376456), 'prev_log_return': np.float32(0.09330311), 'usdchf_log_return': np.float32(0.22938132), 'xagusd_log_return': np.float32(0.09230856), 'xtiusd_log_return': np.float32(0.09030938), 'synth_vix_zscore': np.float32(0.08320386)}
|
|
[2026-05-16 11:29:39,135 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:29:39,368 INFO] src.engine_xgb: XGB Train Acc: 0.5515 | Test Acc: 0.5515
|
|
[2026-05-16 11:29:39,368 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08462578), 'gmm_vol_cluster': np.float32(0.091666125), 'rsi_slope': np.float32(0.09312772), 'atr_normalized': np.float32(0.10125402), 'prev_log_return': np.float32(0.088194996), 'usdchf_log_return': np.float32(0.2351145), 'xagusd_log_return': np.float32(0.10631631), 'xtiusd_log_return': np.float32(0.09593832), 'synth_vix_zscore': np.float32(0.10376223)}
|
|
[2026-05-16 11:29:39,369 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:29:39,593 INFO] src.engine_xgb: XGB Train Acc: 0.5474 | Test Acc: 0.5474
|
|
[2026-05-16 11:29:39,593 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.104091205), 'gmm_vol_cluster': np.float32(0.08047777), 'rsi_slope': np.float32(0.09919134), 'atr_normalized': np.float32(0.1101022), 'prev_log_return': np.float32(0.09627313), 'usdchf_log_return': np.float32(0.20612398), 'xagusd_log_return': np.float32(0.10280442), 'xtiusd_log_return': np.float32(0.106303774), 'synth_vix_zscore': np.float32(0.094632156)}
|
|
[2026-05-16 11:29:39,595 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:29:39,596 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:39,872 INFO] src.backtester: Backtest [H1]: Sharpe=-1.676 | MaxDD=0.483 | WR=0.423 | Return=-35.9% | Trades=248
|
|
[2026-05-16 11:29:39,873 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: Bull 0.9740 0.0194 0.0066
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: Bear 0.0176 0.9812 0.0013
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: Chop 0.0216 0.0006 0.9778
|
|
[2026-05-16 11:29:42,353 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:42,354 INFO] src.engine_hmm: Bull: return=0.059818, vol=0.026571, rsi_slope=0.000791
|
|
[2026-05-16 11:29:42,354 INFO] src.engine_hmm: Bear: return=-0.047041, vol=-0.555874, rsi_slope=0.001137
|
|
[2026-05-16 11:29:42,354 INFO] src.engine_hmm: Chop: return=-0.030326, vol=1.561796, rsi_slope=-0.005581
|
|
[2026-05-16 11:29:42,354 INFO] src.engine_hmm: Total regime transitions: 985
|
|
[2026-05-16 11:29:42,355 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:42,355 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 11:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:42,355 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:42,356 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:42,356 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:42,356 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:42,356 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:42,356 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:42,357 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:42,357 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:42,412 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:42,449 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:42,646 INFO] src.engine_xgb: XGB Train Acc: 0.5511 | Test Acc: 0.5511
|
|
[2026-05-16 11:29:42,647 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10913779), 'gmm_vol_cluster': np.float32(0.090381436), 'rsi_slope': np.float32(0.0869787), 'atr_normalized': np.float32(0.09878828), 'prev_log_return': np.float32(0.09284159), 'usdchf_log_return': np.float32(0.24183246), 'xagusd_log_return': np.float32(0.0849813), 'xtiusd_log_return': np.float32(0.096758276), 'synth_vix_zscore': np.float32(0.09830015)}
|
|
[2026-05-16 11:29:42,647 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:29:42,859 INFO] src.engine_xgb: XGB Train Acc: 0.5568 | Test Acc: 0.5568
|
|
[2026-05-16 11:29:42,859 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.117264666), 'gmm_vol_cluster': np.float32(0.1147061), 'rsi_slope': np.float32(0.089834556), 'atr_normalized': np.float32(0.0908929), 'prev_log_return': np.float32(0.090153255), 'usdchf_log_return': np.float32(0.2128157), 'xagusd_log_return': np.float32(0.09482672), 'xtiusd_log_return': np.float32(0.09199523), 'synth_vix_zscore': np.float32(0.097510904)}
|
|
[2026-05-16 11:29:42,860 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:29:43,083 INFO] src.engine_xgb: XGB Train Acc: 0.5440 | Test Acc: 0.5440
|
|
[2026-05-16 11:29:43,084 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12629113), 'gmm_vol_cluster': np.float32(0.07880997), 'rsi_slope': np.float32(0.084490374), 'atr_normalized': np.float32(0.11252208), 'prev_log_return': np.float32(0.0924446), 'usdchf_log_return': np.float32(0.19983292), 'xagusd_log_return': np.float32(0.10151799), 'xtiusd_log_return': np.float32(0.09565112), 'synth_vix_zscore': np.float32(0.1084399)}
|
|
[2026-05-16 11:29:43,084 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:29:43,085 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:43,376 INFO] src.backtester: Backtest [H1]: Sharpe=-4.790 | MaxDD=1.219 | WR=0.357 | Return=-70.1% | Trades=641
|
|
[2026-05-16 11:29:43,377 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:47,663 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Bull 0.9748 0.0058 0.0195
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Bear 0.0214 0.9782 0.0004
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Chop 0.0169 0.0014 0.9817
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Bull: return=0.037141, vol=0.048271, rsi_slope=-0.000917
|
|
[2026-05-16 11:29:47,664 INFO] src.engine_hmm: Bear: return=-0.095981, vol=1.639743, rsi_slope=-0.000383
|
|
[2026-05-16 11:29:47,665 INFO] src.engine_hmm: Chop: return=-0.005132, vol=-0.548744, rsi_slope=0.000972
|
|
[2026-05-16 11:29:47,665 INFO] src.engine_hmm: Total regime transitions: 945
|
|
[2026-05-16 11:29:47,665 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:47,666 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 08:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:47,666 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:47,666 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:47,666 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:47,667 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:47,667 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:47,667 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:47,667 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:47,668 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:47,725 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:47,760 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:47,948 INFO] src.engine_xgb: XGB Train Acc: 0.5497 | Test Acc: 0.5497
|
|
[2026-05-16 11:29:47,948 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.095618345), 'gmm_vol_cluster': np.float32(0.10149843), 'rsi_slope': np.float32(0.08936728), 'atr_normalized': np.float32(0.092647195), 'prev_log_return': np.float32(0.0918963), 'usdchf_log_return': np.float32(0.2602473), 'xagusd_log_return': np.float32(0.08845077), 'xtiusd_log_return': np.float32(0.089580245), 'synth_vix_zscore': np.float32(0.09069417)}
|
|
[2026-05-16 11:29:47,949 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:29:48,197 INFO] src.engine_xgb: XGB Train Acc: 0.5473 | Test Acc: 0.5473
|
|
[2026-05-16 11:29:48,198 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09413484), 'gmm_vol_cluster': np.float32(0.095399566), 'rsi_slope': np.float32(0.097949974), 'atr_normalized': np.float32(0.09901003), 'prev_log_return': np.float32(0.09812242), 'usdchf_log_return': np.float32(0.21848907), 'xagusd_log_return': np.float32(0.09696951), 'xtiusd_log_return': np.float32(0.09347224), 'synth_vix_zscore': np.float32(0.10645236)}
|
|
[2026-05-16 11:29:48,198 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:29:48,441 INFO] src.engine_xgb: XGB Train Acc: 0.5409 | Test Acc: 0.5409
|
|
[2026-05-16 11:29:48,441 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.094941266), 'gmm_vol_cluster': np.float32(0.11535491), 'rsi_slope': np.float32(0.098885365), 'atr_normalized': np.float32(0.10829308), 'prev_log_return': np.float32(0.092873864), 'usdchf_log_return': np.float32(0.1950571), 'xagusd_log_return': np.float32(0.10250126), 'xtiusd_log_return': np.float32(0.09261736), 'synth_vix_zscore': np.float32(0.09947574)}
|
|
[2026-05-16 11:29:48,442 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:29:48,443 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:48,730 INFO] src.backtester: Backtest [H1]: Sharpe=-4.024 | MaxDD=0.966 | WR=0.336 | Return=-61.6% | Trades=533
|
|
[2026-05-16 11:29:48,731 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:50,996 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:50,996 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:50,996 INFO] src.engine_hmm: Bull 0.9745 0.0018 0.0237
|
|
[2026-05-16 11:29:50,997 INFO] src.engine_hmm: Bear 0.0037 0.9772 0.0191
|
|
[2026-05-16 11:29:50,997 INFO] src.engine_hmm: Chop 0.0093 0.0240 0.9666
|
|
[2026-05-16 11:29:50,997 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:50,997 INFO] src.engine_hmm: Bull: return=0.045208, vol=1.436490, rsi_slope=0.001520
|
|
[2026-05-16 11:29:50,997 INFO] src.engine_hmm: Bear: return=-0.044612, vol=-0.701972, rsi_slope=-0.001540
|
|
[2026-05-16 11:29:50,998 INFO] src.engine_hmm: Chop: return=0.025185, vol=0.016239, rsi_slope=0.000891
|
|
[2026-05-16 11:29:50,998 INFO] src.engine_hmm: Total regime transitions: 1194
|
|
[2026-05-16 11:29:50,998 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:50,999 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:50,999 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:50,999 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:51,000 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:51,000 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:51,000 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:51,001 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:51,001 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:29:51,001 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:29:51,059 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:51,095 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:51,285 INFO] src.engine_xgb: XGB Train Acc: 0.5533 | Test Acc: 0.5533
|
|
[2026-05-16 11:29:51,286 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11301143), 'gmm_vol_cluster': np.float32(0.08834597), 'rsi_slope': np.float32(0.09148358), 'atr_normalized': np.float32(0.104509), 'prev_log_return': np.float32(0.088783324), 'usdchf_log_return': np.float32(0.23942451), 'xagusd_log_return': np.float32(0.08726214), 'xtiusd_log_return': np.float32(0.09722602), 'synth_vix_zscore': np.float32(0.08995401)}
|
|
[2026-05-16 11:29:51,286 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:29:51,505 INFO] src.engine_xgb: XGB Train Acc: 0.5529 | Test Acc: 0.5529
|
|
[2026-05-16 11:29:51,505 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11014655), 'gmm_vol_cluster': np.float32(0.08471503), 'rsi_slope': np.float32(0.08955211), 'atr_normalized': np.float32(0.09170831), 'prev_log_return': np.float32(0.08998347), 'usdchf_log_return': np.float32(0.2409534), 'xagusd_log_return': np.float32(0.0964593), 'xtiusd_log_return': np.float32(0.097609326), 'synth_vix_zscore': np.float32(0.09887242)}
|
|
[2026-05-16 11:29:51,506 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:29:51,738 INFO] src.engine_xgb: XGB Train Acc: 0.5456 | Test Acc: 0.5456
|
|
[2026-05-16 11:29:51,738 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10056058), 'gmm_vol_cluster': np.float32(0.09361416), 'rsi_slope': np.float32(0.09995931), 'atr_normalized': np.float32(0.11839444), 'prev_log_return': np.float32(0.09709965), 'usdchf_log_return': np.float32(0.191911), 'xagusd_log_return': np.float32(0.099258244), 'xtiusd_log_return': np.float32(0.09230814), 'synth_vix_zscore': np.float32(0.10689447)}
|
|
[2026-05-16 11:29:51,739 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:29:51,740 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:52,019 INFO] src.backtester: Backtest [H1]: Sharpe=-1.928 | MaxDD=0.825 | WR=0.409 | Return=-53.8% | Trades=430
|
|
[2026-05-16 11:29:52,020 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:29:56,050 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:29:56,051 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:29:56,051 INFO] src.engine_hmm: Bull 0.9711 0.0049 0.0240
|
|
[2026-05-16 11:29:56,051 INFO] src.engine_hmm: Bear 0.0223 0.9763 0.0014
|
|
[2026-05-16 11:29:56,051 INFO] src.engine_hmm: Chop 0.0179 0.0023 0.9798
|
|
[2026-05-16 11:29:56,051 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:29:56,052 INFO] src.engine_hmm: Bull: return=0.020727, vol=0.077476, rsi_slope=0.002212
|
|
[2026-05-16 11:29:56,052 INFO] src.engine_hmm: Bear: return=-0.051027, vol=1.668547, rsi_slope=-0.011268
|
|
[2026-05-16 11:29:56,052 INFO] src.engine_hmm: Chop: return=-0.003525, vol=-0.507994, rsi_slope=0.001174
|
|
[2026-05-16 11:29:56,052 INFO] src.engine_hmm: Total regime transitions: 1056
|
|
[2026-05-16 11:29:56,053 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 02:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:56,053 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:56,053 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:56,053 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:56,054 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:56,054 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:56,054 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:29:56,054 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:29:56,054 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:29:56,055 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:29:56,112 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:56,151 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:56,344 INFO] src.engine_xgb: XGB Train Acc: 0.5561 | Test Acc: 0.5561
|
|
[2026-05-16 11:29:56,344 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11420572), 'gmm_vol_cluster': np.float32(0.102188), 'rsi_slope': np.float32(0.083654925), 'atr_normalized': np.float32(0.095529296), 'prev_log_return': np.float32(0.09527987), 'usdchf_log_return': np.float32(0.23769319), 'xagusd_log_return': np.float32(0.09503155), 'xtiusd_log_return': np.float32(0.08884549), 'synth_vix_zscore': np.float32(0.087572)}
|
|
[2026-05-16 11:29:56,345 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:29:56,549 INFO] src.engine_xgb: XGB Train Acc: 0.5480 | Test Acc: 0.5480
|
|
[2026-05-16 11:29:56,549 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08093537), 'gmm_vol_cluster': np.float32(0.11575774), 'rsi_slope': np.float32(0.10086875), 'atr_normalized': np.float32(0.101348825), 'prev_log_return': np.float32(0.10181339), 'usdchf_log_return': np.float32(0.21268977), 'xagusd_log_return': np.float32(0.10029155), 'xtiusd_log_return': np.float32(0.09131666), 'synth_vix_zscore': np.float32(0.094977915)}
|
|
[2026-05-16 11:29:56,550 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:29:56,770 INFO] src.engine_xgb: XGB Train Acc: 0.5467 | Test Acc: 0.5467
|
|
[2026-05-16 11:29:56,771 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09670223), 'gmm_vol_cluster': np.float32(0.10586275), 'rsi_slope': np.float32(0.095497005), 'atr_normalized': np.float32(0.10832092), 'prev_log_return': np.float32(0.09469305), 'usdchf_log_return': np.float32(0.19977844), 'xagusd_log_return': np.float32(0.09884379), 'xtiusd_log_return': np.float32(0.09855989), 'synth_vix_zscore': np.float32(0.10174197)}
|
|
[2026-05-16 11:29:56,771 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:29:56,772 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:29:57,066 INFO] src.backtester: Backtest [H1]: Sharpe=-3.348 | MaxDD=0.837 | WR=0.339 | Return=-56.6% | Trades=395
|
|
[2026-05-16 11:29:57,066 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:00,218 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:00,219 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:00,219 INFO] src.engine_hmm: Bull 0.9726 0.0056 0.0218
|
|
[2026-05-16 11:30:00,219 INFO] src.engine_hmm: Bear 0.0221 0.9772 0.0007
|
|
[2026-05-16 11:30:00,220 INFO] src.engine_hmm: Chop 0.0169 0.0015 0.9816
|
|
[2026-05-16 11:30:00,220 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:00,220 INFO] src.engine_hmm: Bull: return=0.058325, vol=0.080704, rsi_slope=-0.000487
|
|
[2026-05-16 11:30:00,220 INFO] src.engine_hmm: Bear: return=-0.112733, vol=1.713730, rsi_slope=-0.003440
|
|
[2026-05-16 11:30:00,221 INFO] src.engine_hmm: Chop: return=-0.018252, vol=-0.529227, rsi_slope=0.001333
|
|
[2026-05-16 11:30:00,222 INFO] src.engine_hmm: Total regime transitions: 984
|
|
[2026-05-16 11:30:00,222 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:00,222 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:00,223 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:00,223 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:00,224 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:00,224 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:00,224 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:00,224 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:00,225 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:00,225 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:00,302 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:00,351 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:00,582 INFO] src.engine_xgb: XGB Train Acc: 0.5528 | Test Acc: 0.5528
|
|
[2026-05-16 11:30:00,582 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10711156), 'gmm_vol_cluster': np.float32(0.08303746), 'rsi_slope': np.float32(0.093229875), 'atr_normalized': np.float32(0.093507305), 'prev_log_return': np.float32(0.09286049), 'usdchf_log_return': np.float32(0.23910369), 'xagusd_log_return': np.float32(0.09772499), 'xtiusd_log_return': np.float32(0.09710595), 'synth_vix_zscore': np.float32(0.09631868)}
|
|
[2026-05-16 11:30:00,583 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:30:00,834 INFO] src.engine_xgb: XGB Train Acc: 0.5522 | Test Acc: 0.5522
|
|
[2026-05-16 11:30:00,835 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.087060876), 'gmm_vol_cluster': np.float32(0.13587184), 'rsi_slope': np.float32(0.104619235), 'atr_normalized': np.float32(0.10092262), 'prev_log_return': np.float32(0.08980838), 'usdchf_log_return': np.float32(0.20300683), 'xagusd_log_return': np.float32(0.092261285), 'xtiusd_log_return': np.float32(0.08783677), 'synth_vix_zscore': np.float32(0.09861214)}
|
|
[2026-05-16 11:30:00,835 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:30:01,098 INFO] src.engine_xgb: XGB Train Acc: 0.5482 | Test Acc: 0.5482
|
|
[2026-05-16 11:30:01,099 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13137098), 'gmm_vol_cluster': np.float32(0.08944567), 'rsi_slope': np.float32(0.09465716), 'atr_normalized': np.float32(0.10396435), 'prev_log_return': np.float32(0.09400453), 'usdchf_log_return': np.float32(0.18421228), 'xagusd_log_return': np.float32(0.097476244), 'xtiusd_log_return': np.float32(0.098269634), 'synth_vix_zscore': np.float32(0.10659911)}
|
|
[2026-05-16 11:30:01,099 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:30:01,101 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:01,413 INFO] src.backtester: Backtest [H1]: Sharpe=-3.960 | MaxDD=0.804 | WR=0.291 | Return=-55.0% | Trades=364
|
|
[2026-05-16 11:30:01,414 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:05,510 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:05,510 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:05,511 INFO] src.engine_hmm: Bull 0.9821 0.0019 0.0161
|
|
[2026-05-16 11:30:05,511 INFO] src.engine_hmm: Bear 0.0010 0.9772 0.0218
|
|
[2026-05-16 11:30:05,511 INFO] src.engine_hmm: Chop 0.0214 0.0051 0.9735
|
|
[2026-05-16 11:30:05,511 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:05,512 INFO] src.engine_hmm: Bull: return=0.024620, vol=-0.525905, rsi_slope=-0.001803
|
|
[2026-05-16 11:30:05,512 INFO] src.engine_hmm: Bear: return=-0.158974, vol=1.723167, rsi_slope=-0.000602
|
|
[2026-05-16 11:30:05,512 INFO] src.engine_hmm: Chop: return=0.021588, vol=0.079409, rsi_slope=0.002376
|
|
[2026-05-16 11:30:05,512 INFO] src.engine_hmm: Total regime transitions: 961
|
|
[2026-05-16 11:30:05,513 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:05,513 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:05,513 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:05,513 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:05,514 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:05,514 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:05,514 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:05,514 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:05,515 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:05,515 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:05,573 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:05,608 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:05,798 INFO] src.engine_xgb: XGB Train Acc: 0.5494 | Test Acc: 0.5494
|
|
[2026-05-16 11:30:05,799 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08857775), 'gmm_vol_cluster': np.float32(0.110776335), 'rsi_slope': np.float32(0.096755445), 'atr_normalized': np.float32(0.09871853), 'prev_log_return': np.float32(0.09421419), 'usdchf_log_return': np.float32(0.23273869), 'xagusd_log_return': np.float32(0.096704334), 'xtiusd_log_return': np.float32(0.08994144), 'synth_vix_zscore': np.float32(0.09157332)}
|
|
[2026-05-16 11:30:05,799 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:30:06,009 INFO] src.engine_xgb: XGB Train Acc: 0.5447 | Test Acc: 0.5447
|
|
[2026-05-16 11:30:06,009 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.088563725), 'gmm_vol_cluster': np.float32(0.10016686), 'rsi_slope': np.float32(0.10186076), 'atr_normalized': np.float32(0.093638636), 'prev_log_return': np.float32(0.091787115), 'usdchf_log_return': np.float32(0.21547623), 'xagusd_log_return': np.float32(0.10155256), 'xtiusd_log_return': np.float32(0.101351865), 'synth_vix_zscore': np.float32(0.10560233)}
|
|
[2026-05-16 11:30:06,010 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:30:06,267 INFO] src.engine_xgb: XGB Train Acc: 0.5450 | Test Acc: 0.5450
|
|
[2026-05-16 11:30:06,268 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.090749584), 'gmm_vol_cluster': np.float32(0.097284116), 'rsi_slope': np.float32(0.10089551), 'atr_normalized': np.float32(0.11071822), 'prev_log_return': np.float32(0.08948504), 'usdchf_log_return': np.float32(0.20162131), 'xagusd_log_return': np.float32(0.09744378), 'xtiusd_log_return': np.float32(0.100279324), 'synth_vix_zscore': np.float32(0.11152314)}
|
|
[2026-05-16 11:30:06,269 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:30:06,270 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:06,578 INFO] src.backtester: Backtest [H1]: Sharpe=-7.486 | MaxDD=1.797 | WR=0.303 | Return=-83.3% | Trades=871
|
|
[2026-05-16 11:30:06,579 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:11,056 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:11,057 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:11,057 INFO] src.engine_hmm: Bull 0.9655 0.0090 0.0255
|
|
[2026-05-16 11:30:11,057 INFO] src.engine_hmm: Bear 0.0263 0.9712 0.0025
|
|
[2026-05-16 11:30:11,057 INFO] src.engine_hmm: Chop 0.0189 0.0052 0.9759
|
|
[2026-05-16 11:30:11,058 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:11,058 INFO] src.engine_hmm: Bull: return=0.008169, vol=0.025114, rsi_slope=0.002242
|
|
[2026-05-16 11:30:11,058 INFO] src.engine_hmm: Bear: return=-0.029113, vol=1.437735, rsi_slope=0.001381
|
|
[2026-05-16 11:30:11,058 INFO] src.engine_hmm: Chop: return=0.006114, vol=-0.689322, rsi_slope=-0.002667
|
|
[2026-05-16 11:30:11,058 INFO] src.engine_hmm: Total regime transitions: 1257
|
|
[2026-05-16 11:30:11,059 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:11,059 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:11,059 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:11,060 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:11,060 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:11,060 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:11,061 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:11,061 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:11,061 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:11,061 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:11,119 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:11,157 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:11,357 INFO] src.engine_xgb: XGB Train Acc: 0.5590 | Test Acc: 0.5590
|
|
[2026-05-16 11:30:11,357 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08756133), 'gmm_vol_cluster': np.float32(0.10989158), 'rsi_slope': np.float32(0.09358374), 'atr_normalized': np.float32(0.09673785), 'prev_log_return': np.float32(0.08786459), 'usdchf_log_return': np.float32(0.24153598), 'xagusd_log_return': np.float32(0.09475983), 'xtiusd_log_return': np.float32(0.090651885), 'synth_vix_zscore': np.float32(0.09741318)}
|
|
[2026-05-16 11:30:11,358 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:30:11,576 INFO] src.engine_xgb: XGB Train Acc: 0.5490 | Test Acc: 0.5490
|
|
[2026-05-16 11:30:11,576 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09749507), 'gmm_vol_cluster': np.float32(0.118790776), 'rsi_slope': np.float32(0.09045719), 'atr_normalized': np.float32(0.09642661), 'prev_log_return': np.float32(0.09868514), 'usdchf_log_return': np.float32(0.22013237), 'xagusd_log_return': np.float32(0.092260145), 'xtiusd_log_return': np.float32(0.08928479), 'synth_vix_zscore': np.float32(0.096467845)}
|
|
[2026-05-16 11:30:11,577 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:30:11,797 INFO] src.engine_xgb: XGB Train Acc: 0.5458 | Test Acc: 0.5458
|
|
[2026-05-16 11:30:11,798 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11682189), 'gmm_vol_cluster': np.float32(0.084686786), 'rsi_slope': np.float32(0.100264296), 'atr_normalized': np.float32(0.11670071), 'prev_log_return': np.float32(0.09606257), 'usdchf_log_return': np.float32(0.18851349), 'xagusd_log_return': np.float32(0.096424915), 'xtiusd_log_return': np.float32(0.098306395), 'synth_vix_zscore': np.float32(0.102218926)}
|
|
[2026-05-16 11:30:11,798 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:30:11,799 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:12,087 INFO] src.backtester: Backtest [H1]: Sharpe=-2.995 | MaxDD=0.793 | WR=0.369 | Return=-52.4% | Trades=539
|
|
[2026-05-16 11:30:12,088 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:15,858 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:15,858 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Bull 0.9736 0.0212 0.0052
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Bear 0.0172 0.9815 0.0013
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Chop 0.0215 0.0008 0.9777
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Bull: return=0.061899, vol=0.075309, rsi_slope=0.004680
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Bear: return=-0.068985, vol=-0.504140, rsi_slope=0.000673
|
|
[2026-05-16 11:30:15,859 INFO] src.engine_hmm: Chop: return=0.061673, vol=1.725096, rsi_slope=-0.018463
|
|
[2026-05-16 11:30:15,861 INFO] src.engine_hmm: Total regime transitions: 960
|
|
[2026-05-16 11:30:15,861 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:15,861 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:15,862 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:15,862 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:15,862 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:15,862 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:15,862 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:15,863 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:15,863 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:15,863 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-19 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:15,926 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:15,965 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:16,190 INFO] src.engine_xgb: XGB Train Acc: 0.5557 | Test Acc: 0.5557
|
|
[2026-05-16 11:30:16,191 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09438759), 'gmm_vol_cluster': np.float32(0.12907757), 'rsi_slope': np.float32(0.09065083), 'atr_normalized': np.float32(0.09047115), 'prev_log_return': np.float32(0.08891471), 'usdchf_log_return': np.float32(0.24112377), 'xagusd_log_return': np.float32(0.08708153), 'xtiusd_log_return': np.float32(0.0890397), 'synth_vix_zscore': np.float32(0.089253105)}
|
|
[2026-05-16 11:30:16,191 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:30:16,416 INFO] src.engine_xgb: XGB Train Acc: 0.5550 | Test Acc: 0.5550
|
|
[2026-05-16 11:30:16,416 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12747498), 'gmm_vol_cluster': np.float32(0.0723889), 'rsi_slope': np.float32(0.095671006), 'atr_normalized': np.float32(0.0954717), 'prev_log_return': np.float32(0.0920701), 'usdchf_log_return': np.float32(0.21374795), 'xagusd_log_return': np.float32(0.1000918), 'xtiusd_log_return': np.float32(0.099592246), 'synth_vix_zscore': np.float32(0.1034913)}
|
|
[2026-05-16 11:30:16,417 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:30:16,677 INFO] src.engine_xgb: XGB Train Acc: 0.5510 | Test Acc: 0.5510
|
|
[2026-05-16 11:30:16,678 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.111664906), 'gmm_vol_cluster': np.float32(0.07958858), 'rsi_slope': np.float32(0.09353256), 'atr_normalized': np.float32(0.11255515), 'prev_log_return': np.float32(0.09515001), 'usdchf_log_return': np.float32(0.20628142), 'xagusd_log_return': np.float32(0.10270455), 'xtiusd_log_return': np.float32(0.10551091), 'synth_vix_zscore': np.float32(0.093011916)}
|
|
[2026-05-16 11:30:16,679 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:30:16,680 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:16,977 INFO] src.backtester: Backtest [H1]: Sharpe=-4.700 | MaxDD=1.419 | WR=0.354 | Return=-74.8% | Trades=638
|
|
[2026-05-16 11:30:16,978 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:19,941 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Bull 0.9750 0.0205 0.0045
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Bear 0.0162 0.9822 0.0016
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Chop 0.0207 0.0007 0.9786
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Bull: return=0.053807, vol=0.077014, rsi_slope=0.002264
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Bear: return=-0.039564, vol=-0.503644, rsi_slope=-0.000363
|
|
[2026-05-16 11:30:19,942 INFO] src.engine_hmm: Chop: return=-0.026226, vol=1.732597, rsi_slope=-0.006259
|
|
[2026-05-16 11:30:19,944 INFO] src.engine_hmm: Total regime transitions: 937
|
|
[2026-05-16 11:30:19,944 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:19,945 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:19,945 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:19,945 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:19,945 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:19,946 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:19,946 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:19,946 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:19,946 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-19 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:19,947 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:20,005 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:20,042 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:20,238 INFO] src.engine_xgb: XGB Train Acc: 0.5533 | Test Acc: 0.5533
|
|
[2026-05-16 11:30:20,239 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.101503015), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10221366), 'atr_normalized': np.float32(0.104522526), 'prev_log_return': np.float32(0.10627396), 'usdchf_log_return': np.float32(0.2908356), 'xagusd_log_return': np.float32(0.10076601), 'xtiusd_log_return': np.float32(0.09228974), 'synth_vix_zscore': np.float32(0.10159549)}
|
|
[2026-05-16 11:30:20,239 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:30:20,456 INFO] src.engine_xgb: XGB Train Acc: 0.5442 | Test Acc: 0.5442
|
|
[2026-05-16 11:30:20,457 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.121445), 'gmm_vol_cluster': np.float32(0.11474621), 'rsi_slope': np.float32(0.09986408), 'atr_normalized': np.float32(0.09098015), 'prev_log_return': np.float32(0.09192261), 'usdchf_log_return': np.float32(0.20359246), 'xagusd_log_return': np.float32(0.091475345), 'xtiusd_log_return': np.float32(0.08942088), 'synth_vix_zscore': np.float32(0.096553214)}
|
|
[2026-05-16 11:30:20,457 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:30:20,688 INFO] src.engine_xgb: XGB Train Acc: 0.5457 | Test Acc: 0.5457
|
|
[2026-05-16 11:30:20,689 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.078182444), 'gmm_vol_cluster': np.float32(0.09955399), 'rsi_slope': np.float32(0.09885324), 'atr_normalized': np.float32(0.10295932), 'prev_log_return': np.float32(0.095554955), 'usdchf_log_return': np.float32(0.22151251), 'xagusd_log_return': np.float32(0.10161312), 'xtiusd_log_return': np.float32(0.10459336), 'synth_vix_zscore': np.float32(0.09717708)}
|
|
[2026-05-16 11:30:20,689 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:30:20,691 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:20,984 INFO] src.backtester: Backtest [H1]: Sharpe=-4.115 | MaxDD=1.196 | WR=0.357 | Return=-68.9% | Trades=653
|
|
[2026-05-16 11:30:20,984 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:25,751 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:25,751 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:25,752 INFO] src.engine_hmm: Bull 0.9685 0.0031 0.0284
|
|
[2026-05-16 11:30:25,752 INFO] src.engine_hmm: Bear 0.0048 0.9758 0.0193
|
|
[2026-05-16 11:30:25,752 INFO] src.engine_hmm: Chop 0.0098 0.0250 0.9653
|
|
[2026-05-16 11:30:25,752 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:25,752 INFO] src.engine_hmm: Bull: return=0.060328, vol=1.500903, rsi_slope=0.000001
|
|
[2026-05-16 11:30:25,753 INFO] src.engine_hmm: Bear: return=-0.041530, vol=-0.718379, rsi_slope=-0.002472
|
|
[2026-05-16 11:30:25,753 INFO] src.engine_hmm: Chop: return=0.016694, vol=0.070562, rsi_slope=0.002706
|
|
[2026-05-16 11:30:25,753 INFO] src.engine_hmm: Total regime transitions: 1314
|
|
[2026-05-16 11:30:25,753 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:25,754 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 07:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:25,754 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:25,754 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:25,754 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:25,755 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:25,755 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:25,755 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:25,755 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:25,755 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:25,815 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:25,850 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:26,037 INFO] src.engine_xgb: XGB Train Acc: 0.5597 | Test Acc: 0.5597
|
|
[2026-05-16 11:30:26,038 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09988701), 'gmm_vol_cluster': np.float32(0.11639465), 'rsi_slope': np.float32(0.092113845), 'atr_normalized': np.float32(0.09076708), 'prev_log_return': np.float32(0.08567382), 'usdchf_log_return': np.float32(0.24616052), 'xagusd_log_return': np.float32(0.0924376), 'xtiusd_log_return': np.float32(0.08270938), 'synth_vix_zscore': np.float32(0.09385599)}
|
|
[2026-05-16 11:30:26,038 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:30:26,245 INFO] src.engine_xgb: XGB Train Acc: 0.5504 | Test Acc: 0.5504
|
|
[2026-05-16 11:30:26,246 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09998177), 'gmm_vol_cluster': np.float32(0.08505731), 'rsi_slope': np.float32(0.09046475), 'atr_normalized': np.float32(0.10049841), 'prev_log_return': np.float32(0.09433897), 'usdchf_log_return': np.float32(0.22823569), 'xagusd_log_return': np.float32(0.09523345), 'xtiusd_log_return': np.float32(0.09967104), 'synth_vix_zscore': np.float32(0.10651857)}
|
|
[2026-05-16 11:30:26,246 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:30:26,495 INFO] src.engine_xgb: XGB Train Acc: 0.5494 | Test Acc: 0.5494
|
|
[2026-05-16 11:30:26,495 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0806238), 'gmm_vol_cluster': np.float32(0.088189684), 'rsi_slope': np.float32(0.10299782), 'atr_normalized': np.float32(0.098737575), 'prev_log_return': np.float32(0.09419724), 'usdchf_log_return': np.float32(0.23941097), 'xagusd_log_return': np.float32(0.10175213), 'xtiusd_log_return': np.float32(0.09915308), 'synth_vix_zscore': np.float32(0.09493771)}
|
|
[2026-05-16 11:30:26,496 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:30:26,497 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:26,808 INFO] src.backtester: Backtest [H1]: Sharpe=-2.204 | MaxDD=1.010 | WR=0.412 | Return=-61.3% | Trades=622
|
|
[2026-05-16 11:30:26,808 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:29,257 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:29,257 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:29,257 INFO] src.engine_hmm: Bull 0.9757 0.0058 0.0185
|
|
[2026-05-16 11:30:29,258 INFO] src.engine_hmm: Bear 0.0207 0.9791 0.0001
|
|
[2026-05-16 11:30:29,258 INFO] src.engine_hmm: Chop 0.0160 0.0010 0.9830
|
|
[2026-05-16 11:30:29,258 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:29,259 INFO] src.engine_hmm: Bull: return=0.082631, vol=0.046342, rsi_slope=-0.001725
|
|
[2026-05-16 11:30:29,259 INFO] src.engine_hmm: Bear: return=-0.105686, vol=1.665126, rsi_slope=0.002538
|
|
[2026-05-16 11:30:29,259 INFO] src.engine_hmm: Chop: return=-0.043919, vol=-0.539027, rsi_slope=0.000818
|
|
[2026-05-16 11:30:29,260 INFO] src.engine_hmm: Total regime transitions: 900
|
|
[2026-05-16 11:30:29,262 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:29,262 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:29,263 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:29,263 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:29,263 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:29,264 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:29,264 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:29,264 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:29,265 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-25 04:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:29,265 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-25 20:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:29,337 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:29,376 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:29,660 INFO] src.engine_xgb: XGB Train Acc: 0.5520 | Test Acc: 0.5520
|
|
[2026-05-16 11:30:29,660 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13041654), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10184521), 'atr_normalized': np.float32(0.09064802), 'prev_log_return': np.float32(0.10119517), 'usdchf_log_return': np.float32(0.27584836), 'xagusd_log_return': np.float32(0.105079025), 'xtiusd_log_return': np.float32(0.090700254), 'synth_vix_zscore': np.float32(0.104267396)}
|
|
[2026-05-16 11:30:29,661 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:30:29,892 INFO] src.engine_xgb: XGB Train Acc: 0.5497 | Test Acc: 0.5497
|
|
[2026-05-16 11:30:29,893 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14524096), 'gmm_vol_cluster': np.float32(0.08531452), 'rsi_slope': np.float32(0.09644242), 'atr_normalized': np.float32(0.09541419), 'prev_log_return': np.float32(0.089878395), 'usdchf_log_return': np.float32(0.20660642), 'xagusd_log_return': np.float32(0.10132171), 'xtiusd_log_return': np.float32(0.08677926), 'synth_vix_zscore': np.float32(0.093002126)}
|
|
[2026-05-16 11:30:29,893 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:30:30,184 INFO] src.engine_xgb: XGB Train Acc: 0.5466 | Test Acc: 0.5466
|
|
[2026-05-16 11:30:30,184 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10205755), 'gmm_vol_cluster': np.float32(0.09858281), 'rsi_slope': np.float32(0.09119947), 'atr_normalized': np.float32(0.11527579), 'prev_log_return': np.float32(0.10076724), 'usdchf_log_return': np.float32(0.19318463), 'xagusd_log_return': np.float32(0.0999589), 'xtiusd_log_return': np.float32(0.09242505), 'synth_vix_zscore': np.float32(0.10654856)}
|
|
[2026-05-16 11:30:30,185 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:30:30,186 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:30,488 INFO] src.backtester: Backtest [H1]: Sharpe=-4.289 | MaxDD=1.128 | WR=0.356 | Return=-67.6% | Trades=598
|
|
[2026-05-16 11:30:30,488 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:33,030 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:33,030 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:33,030 INFO] src.engine_hmm: Bull 0.9741 0.0013 0.0246
|
|
[2026-05-16 11:30:33,031 INFO] src.engine_hmm: Bear 0.0034 0.9778 0.0188
|
|
[2026-05-16 11:30:33,031 INFO] src.engine_hmm: Chop 0.0102 0.0228 0.9670
|
|
[2026-05-16 11:30:33,031 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:33,031 INFO] src.engine_hmm: Bull: return=0.047944, vol=1.414916, rsi_slope=-0.005159
|
|
[2026-05-16 11:30:33,031 INFO] src.engine_hmm: Bear: return=-0.059592, vol=-0.704847, rsi_slope=-0.004199
|
|
[2026-05-16 11:30:33,032 INFO] src.engine_hmm: Chop: return=0.037605, vol=-0.006236, rsi_slope=0.007191
|
|
[2026-05-16 11:30:33,032 INFO] src.engine_hmm: Total regime transitions: 1197
|
|
[2026-05-16 11:30:33,032 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:33,033 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:33,033 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:33,033 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:33,034 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:33,034 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:33,034 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:33,035 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:33,035 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:33,035 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:33,115 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:33,169 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:33,416 INFO] src.engine_xgb: XGB Train Acc: 0.5581 | Test Acc: 0.5581
|
|
[2026-05-16 11:30:33,417 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10098972), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10422214), 'atr_normalized': np.float32(0.10398163), 'prev_log_return': np.float32(0.11257813), 'usdchf_log_return': np.float32(0.27854237), 'xagusd_log_return': np.float32(0.09395542), 'xtiusd_log_return': np.float32(0.09977848), 'synth_vix_zscore': np.float32(0.10595207)}
|
|
[2026-05-16 11:30:33,417 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:30:33,656 INFO] src.engine_xgb: XGB Train Acc: 0.5518 | Test Acc: 0.5518
|
|
[2026-05-16 11:30:33,657 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10348353), 'gmm_vol_cluster': np.float32(0.093328305), 'rsi_slope': np.float32(0.09041297), 'atr_normalized': np.float32(0.093154736), 'prev_log_return': np.float32(0.095825695), 'usdchf_log_return': np.float32(0.22218785), 'xagusd_log_return': np.float32(0.09945319), 'xtiusd_log_return': np.float32(0.10335767), 'synth_vix_zscore': np.float32(0.09879602)}
|
|
[2026-05-16 11:30:33,657 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:30:33,885 INFO] src.engine_xgb: XGB Train Acc: 0.5472 | Test Acc: 0.5472
|
|
[2026-05-16 11:30:33,886 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09234716), 'gmm_vol_cluster': np.float32(0.111573406), 'rsi_slope': np.float32(0.097139165), 'atr_normalized': np.float32(0.11133966), 'prev_log_return': np.float32(0.08977124), 'usdchf_log_return': np.float32(0.20947325), 'xagusd_log_return': np.float32(0.09511045), 'xtiusd_log_return': np.float32(0.09120214), 'synth_vix_zscore': np.float32(0.10204351)}
|
|
[2026-05-16 11:30:33,886 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:30:33,888 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:34,177 INFO] src.backtester: Backtest [H1]: Sharpe=-2.000 | MaxDD=0.949 | WR=0.432 | Return=-57.8% | Trades=556
|
|
[2026-05-16 11:30:34,177 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:37,580 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:37,580 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:37,581 INFO] src.engine_hmm: Bull 0.9671 0.0097 0.0232
|
|
[2026-05-16 11:30:37,581 INFO] src.engine_hmm: Bear 0.0257 0.9730 0.0013
|
|
[2026-05-16 11:30:37,581 INFO] src.engine_hmm: Chop 0.0181 0.0034 0.9785
|
|
[2026-05-16 11:30:37,581 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:37,582 INFO] src.engine_hmm: Bull: return=0.058072, vol=0.024171, rsi_slope=0.000769
|
|
[2026-05-16 11:30:37,582 INFO] src.engine_hmm: Bear: return=-0.064495, vol=1.456996, rsi_slope=0.008305
|
|
[2026-05-16 11:30:37,582 INFO] src.engine_hmm: Chop: return=-0.023339, vol=-0.677740, rsi_slope=-0.004433
|
|
[2026-05-16 11:30:37,583 INFO] src.engine_hmm: Total regime transitions: 1192
|
|
[2026-05-16 11:30:37,583 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:37,584 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:37,584 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:37,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:37,585 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:37,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:37,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:37,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 04:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:37,586 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:30:37,587 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:30:37,658 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:37,699 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:37,908 INFO] src.engine_xgb: XGB Train Acc: 0.5550 | Test Acc: 0.5550
|
|
[2026-05-16 11:30:37,908 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.076763496), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.099685915), 'atr_normalized': np.float32(0.11440492), 'prev_log_return': np.float32(0.10907338), 'usdchf_log_return': np.float32(0.28740114), 'xagusd_log_return': np.float32(0.10669133), 'xtiusd_log_return': np.float32(0.10166084), 'synth_vix_zscore': np.float32(0.1043189)}
|
|
[2026-05-16 11:30:37,909 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:30:38,124 INFO] src.engine_xgb: XGB Train Acc: 0.5366 | Test Acc: 0.5366
|
|
[2026-05-16 11:30:38,124 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10848912), 'gmm_vol_cluster': np.float32(0.13055894), 'rsi_slope': np.float32(0.09069375), 'atr_normalized': np.float32(0.08593943), 'prev_log_return': np.float32(0.08929605), 'usdchf_log_return': np.float32(0.21101403), 'xagusd_log_return': np.float32(0.08905823), 'xtiusd_log_return': np.float32(0.09838106), 'synth_vix_zscore': np.float32(0.09656939)}
|
|
[2026-05-16 11:30:38,125 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:30:38,344 INFO] src.engine_xgb: XGB Train Acc: 0.5488 | Test Acc: 0.5488
|
|
[2026-05-16 11:30:38,345 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10484833), 'gmm_vol_cluster': np.float32(0.10222682), 'rsi_slope': np.float32(0.09886891), 'atr_normalized': np.float32(0.10686153), 'prev_log_return': np.float32(0.0913889), 'usdchf_log_return': np.float32(0.21111648), 'xagusd_log_return': np.float32(0.090909846), 'xtiusd_log_return': np.float32(0.09353046), 'synth_vix_zscore': np.float32(0.10024872)}
|
|
[2026-05-16 11:30:38,345 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:30:38,347 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:38,650 INFO] src.backtester: Backtest [H1]: Sharpe=-2.876 | MaxDD=1.004 | WR=0.385 | Return=-58.2% | Trades=826
|
|
[2026-05-16 11:30:38,650 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:38,681 WARNING] src.optimizer: CPCV [H1]: only 0 valid paths — rejecting trial.
|
|
[2026-05-16 11:30:38,741 INFO] src.optimizer: Trial 4 [H1/headway_cent]: score=-50.000 | valid_paths=0/15 | std_sharpe=0.000 | median_trades=598
|
|
[ 5/130] Best Score: -50.000 | ETA: 2h 53m RAM: 58%
|
|
Best trial: 1. Best value: -50: 4%|██▉ | 5/130 [06:55<2:51:44, 82.44s/it][2026-05-16 11:30:46,725 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:46,725 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:46,725 INFO] src.engine_hmm: Bull 0.9828 0.0019 0.0153
|
|
[2026-05-16 11:30:46,726 INFO] src.engine_hmm: Bear 0.0011 0.9759 0.0230
|
|
[2026-05-16 11:30:46,726 INFO] src.engine_hmm: Chop 0.0221 0.0055 0.9723
|
|
[2026-05-16 11:30:46,726 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:46,726 INFO] src.engine_hmm: Bull: return=0.022859, vol=-0.516552, rsi_slope=-0.001054
|
|
[2026-05-16 11:30:46,726 INFO] src.engine_hmm: Bear: return=-0.114003, vol=1.736939, rsi_slope=-0.012818
|
|
[2026-05-16 11:30:46,727 INFO] src.engine_hmm: Chop: return=0.007526, vol=0.105290, rsi_slope=0.005584
|
|
[2026-05-16 11:30:46,727 INFO] src.engine_hmm: Total regime transitions: 962
|
|
[2026-05-16 11:30:46,728 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-07 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:46,728 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:46,729 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:46,729 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 11:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:46,729 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:46,730 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:46,730 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:30:46,730 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:30:46,730 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:46,731 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:46,798 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:46,838 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:47,133 INFO] src.engine_xgb: XGB Train Acc: 0.5185 | Test Acc: 0.5185
|
|
[2026-05-16 11:30:47,133 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09042855), 'gmm_vol_cluster': np.float32(0.13157175), 'rsi_slope': np.float32(0.087891266), 'atr_normalized': np.float32(0.086140506), 'prev_log_return': np.float32(0.075647525), 'usdchf_log_return': np.float32(0.26911205), 'xagusd_log_return': np.float32(0.08435221), 'xtiusd_log_return': np.float32(0.08546131), 'synth_vix_zscore': np.float32(0.089394905)}
|
|
[2026-05-16 11:30:47,134 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:30:47,459 INFO] src.engine_xgb: XGB Train Acc: 0.5281 | Test Acc: 0.5281
|
|
[2026-05-16 11:30:47,459 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.085151196), 'gmm_vol_cluster': np.float32(0.053031098), 'rsi_slope': np.float32(0.09712402), 'atr_normalized': np.float32(0.095578656), 'prev_log_return': np.float32(0.08720535), 'usdchf_log_return': np.float32(0.30361181), 'xagusd_log_return': np.float32(0.088652104), 'xtiusd_log_return': np.float32(0.090375155), 'synth_vix_zscore': np.float32(0.09927062)}
|
|
[2026-05-16 11:30:47,460 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:30:47,810 INFO] src.engine_xgb: XGB Train Acc: 0.5178 | Test Acc: 0.5178
|
|
[2026-05-16 11:30:47,811 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08682256), 'gmm_vol_cluster': np.float32(0.09820296), 'rsi_slope': np.float32(0.09637551), 'atr_normalized': np.float32(0.11494671), 'prev_log_return': np.float32(0.08386894), 'usdchf_log_return': np.float32(0.22834182), 'xagusd_log_return': np.float32(0.0918016), 'xtiusd_log_return': np.float32(0.09623236), 'synth_vix_zscore': np.float32(0.103407495)}
|
|
[2026-05-16 11:30:47,811 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:30:47,813 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:48,150 INFO] src.backtester: Backtest [H1]: Sharpe=-8.837 | MaxDD=2.289 | WR=0.239 | Return=-89.7% | Trades=251
|
|
[2026-05-16 11:30:48,150 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:30:53,700 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:30:53,700 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:30:53,701 INFO] src.engine_hmm: Bull 0.9776 0.0011 0.0214
|
|
[2026-05-16 11:30:53,701 INFO] src.engine_hmm: Bear 0.0018 0.9809 0.0173
|
|
[2026-05-16 11:30:53,701 INFO] src.engine_hmm: Chop 0.0053 0.0209 0.9738
|
|
[2026-05-16 11:30:53,702 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:30:53,702 INFO] src.engine_hmm: Bull: return=0.085443, vol=1.617691, rsi_slope=-0.012177
|
|
[2026-05-16 11:30:53,702 INFO] src.engine_hmm: Bear: return=-0.058338, vol=-0.519933, rsi_slope=0.000880
|
|
[2026-05-16 11:30:53,703 INFO] src.engine_hmm: Chop: return=0.037492, vol=0.057024, rsi_slope=0.002959
|
|
[2026-05-16 11:30:53,706 INFO] src.engine_hmm: Total regime transitions: 1002
|
|
[2026-05-16 11:30:53,708 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:53,708 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:53,709 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:53,709 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:53,710 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:53,710 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:53,711 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:53,711 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:53,712 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:30:53,712 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:30:53,836 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:53,916 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:54,368 INFO] src.engine_xgb: XGB Train Acc: 0.5122 | Test Acc: 0.5122
|
|
[2026-05-16 11:30:54,369 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.119170494), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09743104), 'atr_normalized': np.float32(0.09673881), 'prev_log_return': np.float32(0.09662532), 'usdchf_log_return': np.float32(0.32187814), 'xagusd_log_return': np.float32(0.092486486), 'xtiusd_log_return': np.float32(0.088656455), 'synth_vix_zscore': np.float32(0.0870133)}
|
|
[2026-05-16 11:30:54,369 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:30:54,838 INFO] src.engine_xgb: XGB Train Acc: 0.5164 | Test Acc: 0.5164
|
|
[2026-05-16 11:30:54,840 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08410795), 'gmm_vol_cluster': np.float32(0.05880273), 'rsi_slope': np.float32(0.08783043), 'atr_normalized': np.float32(0.09615213), 'prev_log_return': np.float32(0.08616629), 'usdchf_log_return': np.float32(0.2925203), 'xagusd_log_return': np.float32(0.09556722), 'xtiusd_log_return': np.float32(0.08982481), 'synth_vix_zscore': np.float32(0.10902807)}
|
|
[2026-05-16 11:30:54,841 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:30:55,281 INFO] src.engine_xgb: XGB Train Acc: 0.5242 | Test Acc: 0.5242
|
|
[2026-05-16 11:30:55,282 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10102708), 'gmm_vol_cluster': np.float32(0.07014203), 'rsi_slope': np.float32(0.09598723), 'atr_normalized': np.float32(0.10434767), 'prev_log_return': np.float32(0.08681686), 'usdchf_log_return': np.float32(0.2548919), 'xagusd_log_return': np.float32(0.09518221), 'xtiusd_log_return': np.float32(0.10121426), 'synth_vix_zscore': np.float32(0.09039071)}
|
|
[2026-05-16 11:30:55,282 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:30:55,284 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:30:55,667 INFO] src.backtester: Backtest [H1]: Sharpe=-2.209 | MaxDD=0.632 | WR=0.330 | Return=-46.4% | Trades=106
|
|
[2026-05-16 11:30:55,668 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:00,764 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:00,765 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:00,765 INFO] src.engine_hmm: Bull 0.9748 0.0186 0.0066
|
|
[2026-05-16 11:31:00,766 INFO] src.engine_hmm: Bear 0.0171 0.9819 0.0010
|
|
[2026-05-16 11:31:00,766 INFO] src.engine_hmm: Chop 0.0211 0.0004 0.9785
|
|
[2026-05-16 11:31:00,766 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:00,767 INFO] src.engine_hmm: Bull: return=0.090556, vol=0.025159, rsi_slope=0.000299
|
|
[2026-05-16 11:31:00,767 INFO] src.engine_hmm: Bear: return=-0.072608, vol=-0.556518, rsi_slope=0.001698
|
|
[2026-05-16 11:31:00,767 INFO] src.engine_hmm: Chop: return=-0.043469, vol=1.556849, rsi_slope=-0.005812
|
|
[2026-05-16 11:31:00,768 INFO] src.engine_hmm: Total regime transitions: 970
|
|
[2026-05-16 11:31:00,768 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:00,769 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:00,770 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:00,770 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:00,771 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:00,771 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:00,772 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:00,772 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:00,773 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:00,773 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:00,883 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:00,946 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:01,338 INFO] src.engine_xgb: XGB Train Acc: 0.5206 | Test Acc: 0.5206
|
|
[2026-05-16 11:31:01,339 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09957477), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.091632314), 'atr_normalized': np.float32(0.09711529), 'prev_log_return': np.float32(0.0960433), 'usdchf_log_return': np.float32(0.33194903), 'xagusd_log_return': np.float32(0.08598822), 'xtiusd_log_return': np.float32(0.094154194), 'synth_vix_zscore': np.float32(0.1035429)}
|
|
[2026-05-16 11:31:01,339 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:31:01,706 INFO] src.engine_xgb: XGB Train Acc: 0.5294 | Test Acc: 0.5294
|
|
[2026-05-16 11:31:01,707 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12143055), 'gmm_vol_cluster': np.float32(0.10332053), 'rsi_slope': np.float32(0.075890444), 'atr_normalized': np.float32(0.087734744), 'prev_log_return': np.float32(0.078740485), 'usdchf_log_return': np.float32(0.26843172), 'xagusd_log_return': np.float32(0.08161442), 'xtiusd_log_return': np.float32(0.080805644), 'synth_vix_zscore': np.float32(0.10203147)}
|
|
[2026-05-16 11:31:01,708 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:31:02,033 INFO] src.engine_xgb: XGB Train Acc: 0.5261 | Test Acc: 0.5261
|
|
[2026-05-16 11:31:02,034 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09197918), 'gmm_vol_cluster': np.float32(0.087101966), 'rsi_slope': np.float32(0.09125351), 'atr_normalized': np.float32(0.11346304), 'prev_log_return': np.float32(0.08243108), 'usdchf_log_return': np.float32(0.23764756), 'xagusd_log_return': np.float32(0.09229061), 'xtiusd_log_return': np.float32(0.09780816), 'synth_vix_zscore': np.float32(0.10602486)}
|
|
[2026-05-16 11:31:02,035 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:31:02,037 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:02,483 INFO] src.backtester: Backtest [H1]: Sharpe=-4.668 | MaxDD=1.221 | WR=0.291 | Return=-69.9% | Trades=285
|
|
[2026-05-16 11:31:02,485 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:08,047 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:08,047 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:08,048 INFO] src.engine_hmm: Bull 0.9761 0.0056 0.0183
|
|
[2026-05-16 11:31:08,048 INFO] src.engine_hmm: Bear 0.0207 0.9789 0.0003
|
|
[2026-05-16 11:31:08,049 INFO] src.engine_hmm: Chop 0.0163 0.0012 0.9825
|
|
[2026-05-16 11:31:08,049 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:08,049 INFO] src.engine_hmm: Bull: return=0.058128, vol=0.046660, rsi_slope=-0.001432
|
|
[2026-05-16 11:31:08,050 INFO] src.engine_hmm: Bear: return=-0.068979, vol=1.642344, rsi_slope=0.000478
|
|
[2026-05-16 11:31:08,050 INFO] src.engine_hmm: Chop: return=-0.033899, vol=-0.549148, rsi_slope=0.001210
|
|
[2026-05-16 11:31:08,051 INFO] src.engine_hmm: Total regime transitions: 901
|
|
[2026-05-16 11:31:08,051 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:08,052 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:08,053 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:08,053 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 19:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:08,053 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:08,054 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:08,055 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:08,055 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:08,056 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-17 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:08,056 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-18 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:08,161 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:08,222 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:08,614 INFO] src.engine_xgb: XGB Train Acc: 0.5158 | Test Acc: 0.5158
|
|
[2026-05-16 11:31:08,615 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10950875), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09075111), 'atr_normalized': np.float32(0.092325486), 'prev_log_return': np.float32(0.09949703), 'usdchf_log_return': np.float32(0.33723947), 'xagusd_log_return': np.float32(0.083323196), 'xtiusd_log_return': np.float32(0.09002985), 'synth_vix_zscore': np.float32(0.09732514)}
|
|
[2026-05-16 11:31:08,615 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:31:08,990 INFO] src.engine_xgb: XGB Train Acc: 0.5251 | Test Acc: 0.5251
|
|
[2026-05-16 11:31:08,991 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1066074), 'gmm_vol_cluster': np.float32(0.08091232), 'rsi_slope': np.float32(0.090380915), 'atr_normalized': np.float32(0.0874737), 'prev_log_return': np.float32(0.090946674), 'usdchf_log_return': np.float32(0.26366776), 'xagusd_log_return': np.float32(0.08703839), 'xtiusd_log_return': np.float32(0.09091502), 'synth_vix_zscore': np.float32(0.102057815)}
|
|
[2026-05-16 11:31:08,991 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:31:09,380 INFO] src.engine_xgb: XGB Train Acc: 0.5152 | Test Acc: 0.5152
|
|
[2026-05-16 11:31:09,380 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09847024), 'gmm_vol_cluster': np.float32(0.098413184), 'rsi_slope': np.float32(0.09181901), 'atr_normalized': np.float32(0.106538504), 'prev_log_return': np.float32(0.08121116), 'usdchf_log_return': np.float32(0.24476422), 'xagusd_log_return': np.float32(0.08955935), 'xtiusd_log_return': np.float32(0.09139005), 'synth_vix_zscore': np.float32(0.09783426)}
|
|
[2026-05-16 11:31:09,381 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:31:09,383 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:09,697 INFO] src.backtester: Backtest [H1]: Sharpe=-4.477 | MaxDD=1.105 | WR=0.248 | Return=-66.6% | Trades=266
|
|
[2026-05-16 11:31:09,698 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:15,085 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:15,086 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:15,086 INFO] src.engine_hmm: Bull 0.9756 0.0018 0.0227
|
|
[2026-05-16 11:31:15,087 INFO] src.engine_hmm: Bear 0.0034 0.9775 0.0191
|
|
[2026-05-16 11:31:15,088 INFO] src.engine_hmm: Chop 0.0091 0.0234 0.9675
|
|
[2026-05-16 11:31:15,088 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:15,089 INFO] src.engine_hmm: Bull: return=0.099289, vol=1.428736, rsi_slope=0.000162
|
|
[2026-05-16 11:31:15,089 INFO] src.engine_hmm: Bear: return=-0.061452, vol=-0.703148, rsi_slope=-0.000583
|
|
[2026-05-16 11:31:15,090 INFO] src.engine_hmm: Chop: return=0.014767, vol=0.016126, rsi_slope=0.000547
|
|
[2026-05-16 11:31:15,091 INFO] src.engine_hmm: Total regime transitions: 1150
|
|
[2026-05-16 11:31:15,092 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:15,092 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:15,093 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:15,093 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:15,094 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:15,094 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:15,095 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:15,096 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-08 04:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:15,096 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:15,097 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:15,238 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:15,298 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:15,688 INFO] src.engine_xgb: XGB Train Acc: 0.5100 | Test Acc: 0.5100
|
|
[2026-05-16 11:31:15,688 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08921212), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08919673), 'atr_normalized': np.float32(0.10585642), 'prev_log_return': np.float32(0.09784913), 'usdchf_log_return': np.float32(0.33384556), 'xagusd_log_return': np.float32(0.088890195), 'xtiusd_log_return': np.float32(0.09251226), 'synth_vix_zscore': np.float32(0.10263764)}
|
|
[2026-05-16 11:31:15,689 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:31:16,073 INFO] src.engine_xgb: XGB Train Acc: 0.5145 | Test Acc: 0.5145
|
|
[2026-05-16 11:31:16,073 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10332468), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0860867), 'atr_normalized': np.float32(0.08742064), 'prev_log_return': np.float32(0.09368654), 'usdchf_log_return': np.float32(0.326437), 'xagusd_log_return': np.float32(0.098184705), 'xtiusd_log_return': np.float32(0.09937303), 'synth_vix_zscore': np.float32(0.10548676)}
|
|
[2026-05-16 11:31:16,074 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:31:16,425 INFO] src.engine_xgb: XGB Train Acc: 0.5104 | Test Acc: 0.5104
|
|
[2026-05-16 11:31:16,426 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.115959615), 'gmm_vol_cluster': np.float32(0.07987839), 'rsi_slope': np.float32(0.09131621), 'atr_normalized': np.float32(0.11162567), 'prev_log_return': np.float32(0.077384666), 'usdchf_log_return': np.float32(0.24853313), 'xagusd_log_return': np.float32(0.08694027), 'xtiusd_log_return': np.float32(0.094496235), 'synth_vix_zscore': np.float32(0.09386578)}
|
|
[2026-05-16 11:31:16,426 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:31:16,428 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:16,756 INFO] src.backtester: Backtest [H1]: Sharpe=-2.060 | MaxDD=0.935 | WR=0.383 | Return=-58.9% | Trades=206
|
|
[2026-05-16 11:31:16,757 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:21,788 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:21,789 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:21,789 INFO] src.engine_hmm: Bull 0.9808 0.0145 0.0046
|
|
[2026-05-16 11:31:21,790 INFO] src.engine_hmm: Bear 0.0121 0.9830 0.0049
|
|
[2026-05-16 11:31:21,790 INFO] src.engine_hmm: Chop 0.0098 0.0144 0.9758
|
|
[2026-05-16 11:31:21,790 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:21,791 INFO] src.engine_hmm: Bull: return=0.591284, vol=-0.241042, rsi_slope=-0.025989
|
|
[2026-05-16 11:31:21,791 INFO] src.engine_hmm: Bear: return=-0.438381, vol=-0.285649, rsi_slope=0.023420
|
|
[2026-05-16 11:31:21,792 INFO] src.engine_hmm: Chop: return=-0.124822, vol=1.348860, rsi_slope=-0.006120
|
|
[2026-05-16 11:31:21,793 INFO] src.engine_hmm: Total regime transitions: 799
|
|
[2026-05-16 11:31:21,793 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:21,794 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:21,795 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:21,795 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:21,795 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:21,796 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:21,797 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 02:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:21,797 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:21,798 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:21,798 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:21,907 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:21,973 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:22,424 INFO] src.engine_xgb: XGB Train Acc: 0.5120 | Test Acc: 0.5120
|
|
[2026-05-16 11:31:22,425 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.20983355), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.079441465), 'atr_normalized': np.float32(0.08603253), 'prev_log_return': np.float32(0.08577901), 'usdchf_log_return': np.float32(0.2788857), 'xagusd_log_return': np.float32(0.087337404), 'xtiusd_log_return': np.float32(0.08359106), 'synth_vix_zscore': np.float32(0.08909929)}
|
|
[2026-05-16 11:31:22,425 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:31:22,812 INFO] src.engine_xgb: XGB Train Acc: 0.5193 | Test Acc: 0.5193
|
|
[2026-05-16 11:31:22,812 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10678603), 'gmm_vol_cluster': np.float32(0.06800236), 'rsi_slope': np.float32(0.0932035), 'atr_normalized': np.float32(0.09860043), 'prev_log_return': np.float32(0.09635013), 'usdchf_log_return': np.float32(0.26182604), 'xagusd_log_return': np.float32(0.09316513), 'xtiusd_log_return': np.float32(0.08507985), 'synth_vix_zscore': np.float32(0.0969865)}
|
|
[2026-05-16 11:31:22,813 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:31:23,194 INFO] src.engine_xgb: XGB Train Acc: 0.5209 | Test Acc: 0.5209
|
|
[2026-05-16 11:31:23,195 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15045021), 'gmm_vol_cluster': np.float32(0.085807644), 'rsi_slope': np.float32(0.08484762), 'atr_normalized': np.float32(0.09758507), 'prev_log_return': np.float32(0.07992738), 'usdchf_log_return': np.float32(0.23632234), 'xagusd_log_return': np.float32(0.08250712), 'xtiusd_log_return': np.float32(0.0912767), 'synth_vix_zscore': np.float32(0.09127593)}
|
|
[2026-05-16 11:31:23,195 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:31:23,197 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:23,537 INFO] src.backtester: Backtest [H1]: Sharpe=-2.526 | MaxDD=0.527 | WR=0.243 | Return=-40.6% | Trades=181
|
|
[2026-05-16 11:31:23,538 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:36,782 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:36,782 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:36,783 INFO] src.engine_hmm: Bull 0.9735 0.0056 0.0209
|
|
[2026-05-16 11:31:36,783 INFO] src.engine_hmm: Bear 0.0212 0.9782 0.0006
|
|
[2026-05-16 11:31:36,783 INFO] src.engine_hmm: Chop 0.0166 0.0013 0.9820
|
|
[2026-05-16 11:31:36,783 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:36,785 INFO] src.engine_hmm: Bull: return=0.109805, vol=0.071821, rsi_slope=-0.002563
|
|
[2026-05-16 11:31:36,785 INFO] src.engine_hmm: Bear: return=-0.088060, vol=1.683325, rsi_slope=-0.002093
|
|
[2026-05-16 11:31:36,785 INFO] src.engine_hmm: Chop: return=-0.069002, vol=-0.531071, rsi_slope=0.002769
|
|
[2026-05-16 11:31:36,786 INFO] src.engine_hmm: Total regime transitions: 962
|
|
[2026-05-16 11:31:36,786 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:36,787 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:36,787 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:36,788 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:36,788 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:36,789 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:36,789 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:36,789 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:36,790 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:36,790 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:36,892 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:36,968 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:37,327 INFO] src.engine_xgb: XGB Train Acc: 0.5172 | Test Acc: 0.5172
|
|
[2026-05-16 11:31:37,328 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11111194), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08953138), 'atr_normalized': np.float32(0.099028766), 'prev_log_return': np.float32(0.08294867), 'usdchf_log_return': np.float32(0.3223659), 'xagusd_log_return': np.float32(0.100217685), 'xtiusd_log_return': np.float32(0.09840615), 'synth_vix_zscore': np.float32(0.09638961)}
|
|
[2026-05-16 11:31:37,329 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:31:37,721 INFO] src.engine_xgb: XGB Train Acc: 0.5295 | Test Acc: 0.5295
|
|
[2026-05-16 11:31:37,722 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08165463), 'gmm_vol_cluster': np.float32(0.09418903), 'rsi_slope': np.float32(0.098655626), 'atr_normalized': np.float32(0.096110955), 'prev_log_return': np.float32(0.09045515), 'usdchf_log_return': np.float32(0.26146835), 'xagusd_log_return': np.float32(0.094784364), 'xtiusd_log_return': np.float32(0.08913134), 'synth_vix_zscore': np.float32(0.093550585)}
|
|
[2026-05-16 11:31:37,723 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:31:38,109 INFO] src.engine_xgb: XGB Train Acc: 0.5257 | Test Acc: 0.5257
|
|
[2026-05-16 11:31:38,109 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09303615), 'gmm_vol_cluster': np.float32(0.090355195), 'rsi_slope': np.float32(0.08744717), 'atr_normalized': np.float32(0.1138064), 'prev_log_return': np.float32(0.08564378), 'usdchf_log_return': np.float32(0.24374919), 'xagusd_log_return': np.float32(0.08849754), 'xtiusd_log_return': np.float32(0.08865808), 'synth_vix_zscore': np.float32(0.108806476)}
|
|
[2026-05-16 11:31:38,110 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:31:38,112 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:38,512 INFO] src.backtester: Backtest [H1]: Sharpe=-3.783 | MaxDD=0.791 | WR=0.296 | Return=-53.8% | Trades=230
|
|
[2026-05-16 11:31:38,513 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:42,366 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:42,366 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:42,367 INFO] src.engine_hmm: Bull 0.9805 0.0147 0.0048
|
|
[2026-05-16 11:31:42,367 INFO] src.engine_hmm: Bear 0.0118 0.9833 0.0050
|
|
[2026-05-16 11:31:42,367 INFO] src.engine_hmm: Chop 0.0087 0.0133 0.9780
|
|
[2026-05-16 11:31:42,368 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:42,368 INFO] src.engine_hmm: Bull: return=0.592549, vol=-0.214134, rsi_slope=-0.024259
|
|
[2026-05-16 11:31:42,368 INFO] src.engine_hmm: Bear: return=-0.386584, vol=-0.351074, rsi_slope=0.017688
|
|
[2026-05-16 11:31:42,369 INFO] src.engine_hmm: Chop: return=-0.195803, vol=1.316486, rsi_slope=0.003292
|
|
[2026-05-16 11:31:42,369 INFO] src.engine_hmm: Total regime transitions: 806
|
|
[2026-05-16 11:31:42,370 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:42,370 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:42,371 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:42,371 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:42,372 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:42,372 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:42,373 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:42,373 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:42,374 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:42,374 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-29 04:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:42,488 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:42,573 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:42,979 INFO] src.engine_xgb: XGB Train Acc: 0.5170 | Test Acc: 0.5170
|
|
[2026-05-16 11:31:42,979 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.18511777), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.089274645), 'atr_normalized': np.float32(0.1037178), 'prev_log_return': np.float32(0.08146527), 'usdchf_log_return': np.float32(0.28845415), 'xagusd_log_return': np.float32(0.08054089), 'xtiusd_log_return': np.float32(0.08168222), 'synth_vix_zscore': np.float32(0.08974727)}
|
|
[2026-05-16 11:31:42,980 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:31:43,369 INFO] src.engine_xgb: XGB Train Acc: 0.5221 | Test Acc: 0.5221
|
|
[2026-05-16 11:31:43,370 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.19577295), 'gmm_vol_cluster': np.float32(0.0715582), 'rsi_slope': np.float32(0.08631476), 'atr_normalized': np.float32(0.084535174), 'prev_log_return': np.float32(0.074515246), 'usdchf_log_return': np.float32(0.23927233), 'xagusd_log_return': np.float32(0.07627403), 'xtiusd_log_return': np.float32(0.07727558), 'synth_vix_zscore': np.float32(0.09448179)}
|
|
[2026-05-16 11:31:43,371 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:31:43,736 INFO] src.engine_xgb: XGB Train Acc: 0.5160 | Test Acc: 0.5160
|
|
[2026-05-16 11:31:43,737 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10920246), 'gmm_vol_cluster': np.float32(0.10715177), 'rsi_slope': np.float32(0.08863565), 'atr_normalized': np.float32(0.10895314), 'prev_log_return': np.float32(0.08009025), 'usdchf_log_return': np.float32(0.23454292), 'xagusd_log_return': np.float32(0.07671319), 'xtiusd_log_return': np.float32(0.09267682), 'synth_vix_zscore': np.float32(0.10203381)}
|
|
[2026-05-16 11:31:43,737 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:31:43,739 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:44,080 INFO] src.backtester: Backtest [H1]: Sharpe=-2.573 | MaxDD=0.534 | WR=0.230 | Return=-40.2% | Trades=178
|
|
[2026-05-16 11:31:44,081 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:50,691 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:50,691 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:50,692 INFO] src.engine_hmm: Bull 0.9780 0.0145 0.0075
|
|
[2026-05-16 11:31:50,692 INFO] src.engine_hmm: Bear 0.0128 0.9789 0.0082
|
|
[2026-05-16 11:31:50,693 INFO] src.engine_hmm: Chop 0.0113 0.0142 0.9745
|
|
[2026-05-16 11:31:50,693 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:50,693 INFO] src.engine_hmm: Bull: return=0.596572, vol=-0.380576, rsi_slope=-0.025315
|
|
[2026-05-16 11:31:50,694 INFO] src.engine_hmm: Bear: return=-0.475289, vol=-0.372348, rsi_slope=0.020093
|
|
[2026-05-16 11:31:50,694 INFO] src.engine_hmm: Chop: return=-0.087223, vol=1.214246, rsi_slope=0.003831
|
|
[2026-05-16 11:31:50,695 INFO] src.engine_hmm: Total regime transitions: 956
|
|
[2026-05-16 11:31:50,696 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:50,696 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:50,697 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:50,697 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:50,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:50,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:50,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:50,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:50,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:31:50,700 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:50,821 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:50,886 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:51,299 INFO] src.engine_xgb: XGB Train Acc: 0.5108 | Test Acc: 0.5108
|
|
[2026-05-16 11:31:51,299 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15972878), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07793024), 'atr_normalized': np.float32(0.09572432), 'prev_log_return': np.float32(0.09123746), 'usdchf_log_return': np.float32(0.2971033), 'xagusd_log_return': np.float32(0.087013334), 'xtiusd_log_return': np.float32(0.09255173), 'synth_vix_zscore': np.float32(0.09871082)}
|
|
[2026-05-16 11:31:51,300 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:31:51,666 INFO] src.engine_xgb: XGB Train Acc: 0.5133 | Test Acc: 0.5133
|
|
[2026-05-16 11:31:51,667 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09634823), 'gmm_vol_cluster': np.float32(0.079395436), 'rsi_slope': np.float32(0.08453432), 'atr_normalized': np.float32(0.09602887), 'prev_log_return': np.float32(0.09120824), 'usdchf_log_return': np.float32(0.29119956), 'xagusd_log_return': np.float32(0.08285279), 'xtiusd_log_return': np.float32(0.08598577), 'synth_vix_zscore': np.float32(0.0924468)}
|
|
[2026-05-16 11:31:51,667 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:31:52,036 INFO] src.engine_xgb: XGB Train Acc: 0.5112 | Test Acc: 0.5112
|
|
[2026-05-16 11:31:52,037 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09582943), 'gmm_vol_cluster': np.float32(0.06457032), 'rsi_slope': np.float32(0.09234122), 'atr_normalized': np.float32(0.11713741), 'prev_log_return': np.float32(0.08802111), 'usdchf_log_return': np.float32(0.25179565), 'xagusd_log_return': np.float32(0.092232324), 'xtiusd_log_return': np.float32(0.094405636), 'synth_vix_zscore': np.float32(0.10366694)}
|
|
[2026-05-16 11:31:52,037 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:31:52,039 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:52,419 INFO] src.backtester: Backtest [H1]: Sharpe=-1.446 | MaxDD=0.591 | WR=0.264 | Return=-36.5% | Trades=208
|
|
[2026-05-16 11:31:52,420 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:31:57,418 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:31:57,418 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:31:57,419 INFO] src.engine_hmm: Bull 0.9751 0.0199 0.0049
|
|
[2026-05-16 11:31:57,419 INFO] src.engine_hmm: Bear 0.0165 0.9824 0.0011
|
|
[2026-05-16 11:31:57,419 INFO] src.engine_hmm: Chop 0.0209 0.0007 0.9784
|
|
[2026-05-16 11:31:57,420 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:31:57,420 INFO] src.engine_hmm: Bull: return=0.101449, vol=0.078214, rsi_slope=0.003059
|
|
[2026-05-16 11:31:57,420 INFO] src.engine_hmm: Bear: return=-0.104693, vol=-0.504119, rsi_slope=0.001269
|
|
[2026-05-16 11:31:57,421 INFO] src.engine_hmm: Chop: return=0.064489, vol=1.755397, rsi_slope=-0.015884
|
|
[2026-05-16 11:31:57,422 INFO] src.engine_hmm: Total regime transitions: 920
|
|
[2026-05-16 11:31:57,422 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:57,423 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:57,423 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:57,423 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:57,424 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:57,424 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:31:57,424 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:31:57,424 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-19 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:31:57,425 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:31:57,425 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:31:57,506 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:57,562 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:57,879 INFO] src.engine_xgb: XGB Train Acc: 0.5152 | Test Acc: 0.5152
|
|
[2026-05-16 11:31:57,880 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.103942305), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08839121), 'atr_normalized': np.float32(0.092378065), 'prev_log_return': np.float32(0.09142117), 'usdchf_log_return': np.float32(0.34461364), 'xagusd_log_return': np.float32(0.08885626), 'xtiusd_log_return': np.float32(0.093644515), 'synth_vix_zscore': np.float32(0.096752875)}
|
|
[2026-05-16 11:31:57,880 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:31:58,217 INFO] src.engine_xgb: XGB Train Acc: 0.5198 | Test Acc: 0.5198
|
|
[2026-05-16 11:31:58,218 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16597885), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08813285), 'atr_normalized': np.float32(0.1005652), 'prev_log_return': np.float32(0.08625488), 'usdchf_log_return': np.float32(0.27178973), 'xagusd_log_return': np.float32(0.09502478), 'xtiusd_log_return': np.float32(0.0937086), 'synth_vix_zscore': np.float32(0.09854501)}
|
|
[2026-05-16 11:31:58,218 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:31:58,559 INFO] src.engine_xgb: XGB Train Acc: 0.5257 | Test Acc: 0.5257
|
|
[2026-05-16 11:31:58,560 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11828111), 'gmm_vol_cluster': np.float32(0.090332516), 'rsi_slope': np.float32(0.083874725), 'atr_normalized': np.float32(0.104249015), 'prev_log_return': np.float32(0.08211434), 'usdchf_log_return': np.float32(0.25168493), 'xagusd_log_return': np.float32(0.09208274), 'xtiusd_log_return': np.float32(0.087976635), 'synth_vix_zscore': np.float32(0.08940408)}
|
|
[2026-05-16 11:31:58,561 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:31:58,562 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:31:58,924 INFO] src.backtester: Backtest [H1]: Sharpe=-4.423 | MaxDD=1.355 | WR=0.295 | Return=-72.8% | Trades=325
|
|
[2026-05-16 11:31:58,924 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:07,185 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:07,185 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:07,185 INFO] src.engine_hmm: Bull 0.9755 0.0200 0.0045
|
|
[2026-05-16 11:32:07,186 INFO] src.engine_hmm: Bear 0.0157 0.9829 0.0014
|
|
[2026-05-16 11:32:07,186 INFO] src.engine_hmm: Chop 0.0202 0.0006 0.9792
|
|
[2026-05-16 11:32:07,186 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:07,186 INFO] src.engine_hmm: Bull: return=0.069090, vol=0.080975, rsi_slope=0.000006
|
|
[2026-05-16 11:32:07,187 INFO] src.engine_hmm: Bear: return=-0.053778, vol=-0.501734, rsi_slope=0.001097
|
|
[2026-05-16 11:32:07,187 INFO] src.engine_hmm: Chop: return=-0.019413, vol=1.743578, rsi_slope=-0.004438
|
|
[2026-05-16 11:32:07,188 INFO] src.engine_hmm: Total regime transitions: 911
|
|
[2026-05-16 11:32:07,188 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:07,189 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:07,189 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:07,190 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:07,190 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:07,191 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:07,191 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-16 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:07,191 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-16 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:07,192 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:07,192 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:32:07,299 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:07,349 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:07,746 INFO] src.engine_xgb: XGB Train Acc: 0.5137 | Test Acc: 0.5137
|
|
[2026-05-16 11:32:07,747 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09411212), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08773832), 'atr_normalized': np.float32(0.09214016), 'prev_log_return': np.float32(0.094849385), 'usdchf_log_return': np.float32(0.35731012), 'xagusd_log_return': np.float32(0.096468545), 'xtiusd_log_return': np.float32(0.08553042), 'synth_vix_zscore': np.float32(0.091850944)}
|
|
[2026-05-16 11:32:07,747 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:32:08,125 INFO] src.engine_xgb: XGB Train Acc: 0.5116 | Test Acc: 0.5116
|
|
[2026-05-16 11:32:08,125 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.100944445), 'gmm_vol_cluster': np.float32(0.102535814), 'rsi_slope': np.float32(0.086137794), 'atr_normalized': np.float32(0.087263055), 'prev_log_return': np.float32(0.08576015), 'usdchf_log_return': np.float32(0.26846242), 'xagusd_log_return': np.float32(0.08617434), 'xtiusd_log_return': np.float32(0.08592714), 'synth_vix_zscore': np.float32(0.09679487)}
|
|
[2026-05-16 11:32:08,126 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:32:08,503 INFO] src.engine_xgb: XGB Train Acc: 0.5156 | Test Acc: 0.5156
|
|
[2026-05-16 11:32:08,504 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08259354), 'gmm_vol_cluster': np.float32(0.07259258), 'rsi_slope': np.float32(0.097789735), 'atr_normalized': np.float32(0.10233402), 'prev_log_return': np.float32(0.08565914), 'usdchf_log_return': np.float32(0.27593824), 'xagusd_log_return': np.float32(0.08888624), 'xtiusd_log_return': np.float32(0.10092237), 'synth_vix_zscore': np.float32(0.09328408)}
|
|
[2026-05-16 11:32:08,504 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:32:08,506 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:08,836 INFO] src.backtester: Backtest [H1]: Sharpe=-4.333 | MaxDD=1.296 | WR=0.303 | Return=-71.3% | Trades=353
|
|
[2026-05-16 11:32:08,837 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:17,402 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:17,402 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:17,403 INFO] src.engine_hmm: Bull 0.9757 0.0160 0.0084
|
|
[2026-05-16 11:32:17,403 INFO] src.engine_hmm: Bear 0.0185 0.9717 0.0098
|
|
[2026-05-16 11:32:17,403 INFO] src.engine_hmm: Chop 0.0095 0.0169 0.9736
|
|
[2026-05-16 11:32:17,403 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:17,403 INFO] src.engine_hmm: Bull: return=0.450330, vol=-0.582202, rsi_slope=-0.017238
|
|
[2026-05-16 11:32:17,404 INFO] src.engine_hmm: Bear: return=-0.472238, vol=-0.219325, rsi_slope=0.023817
|
|
[2026-05-16 11:32:17,404 INFO] src.engine_hmm: Chop: return=0.010962, vol=1.173535, rsi_slope=-0.008635
|
|
[2026-05-16 11:32:17,404 INFO] src.engine_hmm: Total regime transitions: 1141
|
|
[2026-05-16 11:32:17,405 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:17,405 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 10:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:17,405 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:17,407 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 08:00:00: Bear -> Chop
|
|
[2026-05-16 11:32:17,407 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop -> Bear
|
|
[2026-05-16 11:32:17,407 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:32:17,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:17,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:17,409 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bear -> Chop
|
|
[2026-05-16 11:32:17,409 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:32:17,502 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:17,559 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:17,942 INFO] src.engine_xgb: XGB Train Acc: 0.5098 | Test Acc: 0.5098
|
|
[2026-05-16 11:32:17,942 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.099491246), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0886453), 'atr_normalized': np.float32(0.098735824), 'prev_log_return': np.float32(0.08743196), 'usdchf_log_return': np.float32(0.34814233), 'xagusd_log_return': np.float32(0.095168546), 'xtiusd_log_return': np.float32(0.08493158), 'synth_vix_zscore': np.float32(0.09745319)}
|
|
[2026-05-16 11:32:17,943 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:32:18,338 INFO] src.engine_xgb: XGB Train Acc: 0.5084 | Test Acc: 0.5084
|
|
[2026-05-16 11:32:18,339 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10346737), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08716266), 'atr_normalized': np.float32(0.1044312), 'prev_log_return': np.float32(0.09353191), 'usdchf_log_return': np.float32(0.31865093), 'xagusd_log_return': np.float32(0.09224088), 'xtiusd_log_return': np.float32(0.09400054), 'synth_vix_zscore': np.float32(0.106514476)}
|
|
[2026-05-16 11:32:18,339 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:32:18,652 INFO] src.engine_xgb: XGB Train Acc: 0.5062 | Test Acc: 0.5062
|
|
[2026-05-16 11:32:18,652 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08226182), 'gmm_vol_cluster': np.float32(0.073427916), 'rsi_slope': np.float32(0.095852464), 'atr_normalized': np.float32(0.092778765), 'prev_log_return': np.float32(0.085986264), 'usdchf_log_return': np.float32(0.29317936), 'xagusd_log_return': np.float32(0.09157486), 'xtiusd_log_return': np.float32(0.091071755), 'synth_vix_zscore': np.float32(0.09386672)}
|
|
[2026-05-16 11:32:18,653 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:32:18,655 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:19,025 INFO] src.backtester: Backtest [H1]: Sharpe=-0.840 | MaxDD=0.395 | WR=0.380 | Return=-22.0% | Trades=200
|
|
[2026-05-16 11:32:19,026 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:27,006 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:27,006 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:27,007 INFO] src.engine_hmm: Bull 0.9763 0.0058 0.0179
|
|
[2026-05-16 11:32:27,007 INFO] src.engine_hmm: Bear 0.0200 0.9798 0.0002
|
|
[2026-05-16 11:32:27,007 INFO] src.engine_hmm: Chop 0.0153 0.0009 0.9837
|
|
[2026-05-16 11:32:27,007 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:27,007 INFO] src.engine_hmm: Bull: return=0.119273, vol=0.043267, rsi_slope=-0.003318
|
|
[2026-05-16 11:32:27,008 INFO] src.engine_hmm: Bear: return=-0.106369, vol=1.635499, rsi_slope=0.002673
|
|
[2026-05-16 11:32:27,008 INFO] src.engine_hmm: Chop: return=-0.075763, vol=-0.538444, rsi_slope=0.002195
|
|
[2026-05-16 11:32:27,008 INFO] src.engine_hmm: Total regime transitions: 870
|
|
[2026-05-16 11:32:27,009 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:27,009 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:27,010 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:27,010 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:27,010 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 10:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:27,011 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:27,011 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:27,011 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:27,012 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:27,012 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:32:27,121 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:27,183 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:27,561 INFO] src.engine_xgb: XGB Train Acc: 0.5212 | Test Acc: 0.5212
|
|
[2026-05-16 11:32:27,561 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1075506), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0886861), 'atr_normalized': np.float32(0.08271543), 'prev_log_return': np.float32(0.090095446), 'usdchf_log_return': np.float32(0.35472387), 'xagusd_log_return': np.float32(0.091569036), 'xtiusd_log_return': np.float32(0.086511016), 'synth_vix_zscore': np.float32(0.098148525)}
|
|
[2026-05-16 11:32:27,562 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:32:27,926 INFO] src.engine_xgb: XGB Train Acc: 0.5221 | Test Acc: 0.5221
|
|
[2026-05-16 11:32:27,926 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13585153), 'gmm_vol_cluster': np.float32(0.06602474), 'rsi_slope': np.float32(0.08898316), 'atr_normalized': np.float32(0.087459385), 'prev_log_return': np.float32(0.08603281), 'usdchf_log_return': np.float32(0.2671032), 'xagusd_log_return': np.float32(0.0859522), 'xtiusd_log_return': np.float32(0.085577644), 'synth_vix_zscore': np.float32(0.09701534)}
|
|
[2026-05-16 11:32:27,927 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:32:28,299 INFO] src.engine_xgb: XGB Train Acc: 0.5209 | Test Acc: 0.5209
|
|
[2026-05-16 11:32:28,299 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09018979), 'gmm_vol_cluster': np.float32(0.078717455), 'rsi_slope': np.float32(0.09000864), 'atr_normalized': np.float32(0.10464513), 'prev_log_return': np.float32(0.09088032), 'usdchf_log_return': np.float32(0.2609177), 'xagusd_log_return': np.float32(0.08940329), 'xtiusd_log_return': np.float32(0.092425324), 'synth_vix_zscore': np.float32(0.10281241)}
|
|
[2026-05-16 11:32:28,300 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:32:28,302 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:28,671 INFO] src.backtester: Backtest [H1]: Sharpe=-4.849 | MaxDD=1.300 | WR=0.288 | Return=-72.6% | Trades=344
|
|
[2026-05-16 11:32:28,672 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:34,691 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:34,692 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:34,692 INFO] src.engine_hmm: Bull 0.9757 0.0012 0.0232
|
|
[2026-05-16 11:32:34,692 INFO] src.engine_hmm: Bear 0.0028 0.9784 0.0188
|
|
[2026-05-16 11:32:34,693 INFO] src.engine_hmm: Chop 0.0100 0.0223 0.9676
|
|
[2026-05-16 11:32:34,693 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:34,693 INFO] src.engine_hmm: Bull: return=0.128467, vol=1.403897, rsi_slope=-0.007471
|
|
[2026-05-16 11:32:34,694 INFO] src.engine_hmm: Bear: return=-0.088560, vol=-0.704753, rsi_slope=-0.004238
|
|
[2026-05-16 11:32:34,694 INFO] src.engine_hmm: Chop: return=0.025008, vol=-0.005603, rsi_slope=0.008500
|
|
[2026-05-16 11:32:34,695 INFO] src.engine_hmm: Total regime transitions: 1168
|
|
[2026-05-16 11:32:34,695 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:34,696 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:34,697 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:34,697 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:34,697 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:34,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:34,698 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:32:34,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:32:34,699 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:34,700 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:34,794 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:34,852 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:35,255 INFO] src.engine_xgb: XGB Train Acc: 0.5154 | Test Acc: 0.5154
|
|
[2026-05-16 11:32:35,256 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08357048), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09251956), 'atr_normalized': np.float32(0.09048945), 'prev_log_return': np.float32(0.093800105), 'usdchf_log_return': np.float32(0.36199322), 'xagusd_log_return': np.float32(0.08844227), 'xtiusd_log_return': np.float32(0.08885992), 'synth_vix_zscore': np.float32(0.10032501)}
|
|
[2026-05-16 11:32:35,256 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:32:35,637 INFO] src.engine_xgb: XGB Train Acc: 0.5153 | Test Acc: 0.5153
|
|
[2026-05-16 11:32:35,638 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.100634076), 'gmm_vol_cluster': np.float32(0.07001198), 'rsi_slope': np.float32(0.088252306), 'atr_normalized': np.float32(0.09432459), 'prev_log_return': np.float32(0.08242128), 'usdchf_log_return': np.float32(0.28463742), 'xagusd_log_return': np.float32(0.090891786), 'xtiusd_log_return': np.float32(0.093574636), 'synth_vix_zscore': np.float32(0.09525201)}
|
|
[2026-05-16 11:32:35,639 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:32:36,028 INFO] src.engine_xgb: XGB Train Acc: 0.5134 | Test Acc: 0.5134
|
|
[2026-05-16 11:32:36,029 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07704811), 'gmm_vol_cluster': np.float32(0.063340165), 'rsi_slope': np.float32(0.09513873), 'atr_normalized': np.float32(0.10958664), 'prev_log_return': np.float32(0.089113384), 'usdchf_log_return': np.float32(0.27824312), 'xagusd_log_return': np.float32(0.091923304), 'xtiusd_log_return': np.float32(0.09571606), 'synth_vix_zscore': np.float32(0.0998905)}
|
|
[2026-05-16 11:32:36,029 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:32:36,031 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:36,360 INFO] src.backtester: Backtest [H1]: Sharpe=-2.179 | MaxDD=1.010 | WR=0.390 | Return=-62.8% | Trades=241
|
|
[2026-05-16 11:32:36,360 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:46,930 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:46,930 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:46,931 INFO] src.engine_hmm: Bull 0.9676 0.0227 0.0096
|
|
[2026-05-16 11:32:46,931 INFO] src.engine_hmm: Bear 0.0178 0.9791 0.0030
|
|
[2026-05-16 11:32:46,931 INFO] src.engine_hmm: Chop 0.0248 0.0014 0.9738
|
|
[2026-05-16 11:32:46,932 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:46,932 INFO] src.engine_hmm: Bull: return=0.060734, vol=0.031256, rsi_slope=0.001003
|
|
[2026-05-16 11:32:46,932 INFO] src.engine_hmm: Bear: return=-0.042649, vol=-0.674058, rsi_slope=-0.004367
|
|
[2026-05-16 11:32:46,933 INFO] src.engine_hmm: Chop: return=-0.025813, vol=1.464124, rsi_slope=0.007872
|
|
[2026-05-16 11:32:46,933 INFO] src.engine_hmm: Total regime transitions: 1148
|
|
[2026-05-16 11:32:46,934 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:46,934 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:46,935 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:46,935 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:46,936 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:46,936 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:46,937 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:46,937 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:46,938 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:46,938 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:47,040 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:47,097 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:47,479 INFO] src.engine_xgb: XGB Train Acc: 0.5128 | Test Acc: 0.5128
|
|
[2026-05-16 11:32:47,479 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.084177814), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08769228), 'atr_normalized': np.float32(0.10431346), 'prev_log_return': np.float32(0.097294815), 'usdchf_log_return': np.float32(0.354602), 'xagusd_log_return': np.float32(0.09248394), 'xtiusd_log_return': np.float32(0.08700839), 'synth_vix_zscore': np.float32(0.09242733)}
|
|
[2026-05-16 11:32:47,479 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:32:47,797 INFO] src.engine_xgb: XGB Train Acc: 0.5096 | Test Acc: 0.5096
|
|
[2026-05-16 11:32:47,798 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11489295), 'gmm_vol_cluster': np.float32(0.068598576), 'rsi_slope': np.float32(0.08451282), 'atr_normalized': np.float32(0.08333371), 'prev_log_return': np.float32(0.098073624), 'usdchf_log_return': np.float32(0.27595893), 'xagusd_log_return': np.float32(0.08456423), 'xtiusd_log_return': np.float32(0.08784753), 'synth_vix_zscore': np.float32(0.10221759)}
|
|
[2026-05-16 11:32:47,798 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:32:48,181 INFO] src.engine_xgb: XGB Train Acc: 0.5037 | Test Acc: 0.5037
|
|
[2026-05-16 11:32:48,182 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08670425), 'gmm_vol_cluster': np.float32(0.099197045), 'rsi_slope': np.float32(0.091906615), 'atr_normalized': np.float32(0.09933521), 'prev_log_return': np.float32(0.07651631), 'usdchf_log_return': np.float32(0.28087112), 'xagusd_log_return': np.float32(0.081672385), 'xtiusd_log_return': np.float32(0.09133691), 'synth_vix_zscore': np.float32(0.092460185)}
|
|
[2026-05-16 11:32:48,183 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:32:48,184 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:48,556 INFO] src.backtester: Backtest [H1]: Sharpe=-4.545 | MaxDD=1.131 | WR=0.337 | Return=-67.7% | Trades=377
|
|
[2026-05-16 11:32:48,556 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:32:48,598 WARNING] src.optimizer: CPCV [H1]: only 0 valid paths — rejecting trial.
|
|
[2026-05-16 11:32:48,668 INFO] src.optimizer: Trial 5 [H1/headway_cent]: score=-50.000 | valid_paths=0/15 | std_sharpe=0.000 | median_trades=241
|
|
Best trial: 1. Best value: -50: 5%|███▌ | 6/130 [09:05<3:23:44, 98.59s/it][2026-05-16 11:32:52,976 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:32:52,977 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:32:52,978 INFO] src.engine_hmm: Bull 0.9816 0.0129 0.0055
|
|
[2026-05-16 11:32:52,978 INFO] src.engine_hmm: Bear 0.0090 0.9869 0.0041
|
|
[2026-05-16 11:32:52,979 INFO] src.engine_hmm: Chop 0.0094 0.0123 0.9783
|
|
[2026-05-16 11:32:52,979 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:32:52,980 INFO] src.engine_hmm: Bull: return=0.645696, vol=-0.139410, rsi_slope=-0.025605
|
|
[2026-05-16 11:32:52,980 INFO] src.engine_hmm: Bear: return=-0.358976, vol=-0.380772, rsi_slope=0.018107
|
|
[2026-05-16 11:32:52,980 INFO] src.engine_hmm: Chop: return=-0.216278, vol=1.327926, rsi_slope=-0.002250
|
|
[2026-05-16 11:32:52,981 INFO] src.engine_hmm: Total regime transitions: 709
|
|
[2026-05-16 11:32:52,982 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-07 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:52,983 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 23:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:52,983 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:52,984 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:52,984 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-19 02:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:52,985 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:52,985 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:32:52,985 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:32:52,986 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-29 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:32:52,986 INFO] src.engine_hmm: REGIME CHANGE at 2019-09-03 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:32:53,109 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:53,184 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:53,506 INFO] src.engine_xgb: XGB Train Acc: 0.4820 | Test Acc: 0.4820
|
|
[2026-05-16 11:32:53,507 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.16803092), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08224116), 'atr_normalized': np.float32(0.07674383), 'prev_log_return': np.float32(0.07004614), 'usdchf_log_return': np.float32(0.36811528), 'xagusd_log_return': np.float32(0.080541566), 'xtiusd_log_return': np.float32(0.07672869), 'synth_vix_zscore': np.float32(0.07755248)}
|
|
[2026-05-16 11:32:53,507 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:32:53,796 INFO] src.engine_xgb: XGB Train Acc: 0.4719 | Test Acc: 0.4719
|
|
[2026-05-16 11:32:53,797 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.124384835), 'gmm_vol_cluster': np.float32(0.061393756), 'rsi_slope': np.float32(0.08393018), 'atr_normalized': np.float32(0.07271026), 'prev_log_return': np.float32(0.07310409), 'usdchf_log_return': np.float32(0.32489586), 'xagusd_log_return': np.float32(0.073919386), 'xtiusd_log_return': np.float32(0.079220876), 'synth_vix_zscore': np.float32(0.106440715)}
|
|
[2026-05-16 11:32:53,797 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:32:54,122 INFO] src.engine_xgb: XGB Train Acc: 0.4822 | Test Acc: 0.4822
|
|
[2026-05-16 11:32:54,123 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15501052), 'gmm_vol_cluster': np.float32(0.07871874), 'rsi_slope': np.float32(0.07822977), 'atr_normalized': np.float32(0.10119098), 'prev_log_return': np.float32(0.06555191), 'usdchf_log_return': np.float32(0.27185437), 'xagusd_log_return': np.float32(0.07368832), 'xtiusd_log_return': np.float32(0.07817344), 'synth_vix_zscore': np.float32(0.09758192)}
|
|
[2026-05-16 11:32:54,124 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:32:54,125 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:32:54,477 INFO] src.backtester: Backtest [H1]: Sharpe=-8.386 | MaxDD=2.119 | WR=0.188 | Return=-87.8% | Trades=223
|
|
[2026-05-16 11:32:54,477 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:01,502 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:01,503 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:01,503 INFO] src.engine_hmm: Bull 0.9778 0.0008 0.0214
|
|
[2026-05-16 11:33:01,504 INFO] src.engine_hmm: Bear 0.0015 0.9815 0.0170
|
|
[2026-05-16 11:33:01,504 INFO] src.engine_hmm: Chop 0.0053 0.0209 0.9738
|
|
[2026-05-16 11:33:01,504 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:01,505 INFO] src.engine_hmm: Bull: return=0.113250, vol=1.645992, rsi_slope=-0.014530
|
|
[2026-05-16 11:33:01,505 INFO] src.engine_hmm: Bear: return=-0.072941, vol=-0.516380, rsi_slope=0.000847
|
|
[2026-05-16 11:33:01,506 INFO] src.engine_hmm: Chop: return=0.047435, vol=0.067846, rsi_slope=0.003643
|
|
[2026-05-16 11:33:01,508 INFO] src.engine_hmm: Total regime transitions: 986
|
|
[2026-05-16 11:33:01,509 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:01,509 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:01,510 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:01,510 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:01,511 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:01,511 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:01,511 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:01,512 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 20:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:01,513 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:01,513 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:01,610 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:01,660 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:01,900 INFO] src.engine_xgb: XGB Train Acc: 0.4881 | Test Acc: 0.4881
|
|
[2026-05-16 11:33:01,901 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09789777), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07615534), 'atr_normalized': np.float32(0.090233505), 'prev_log_return': np.float32(0.092160635), 'usdchf_log_return': np.float32(0.40660992), 'xagusd_log_return': np.float32(0.08063718), 'xtiusd_log_return': np.float32(0.08003355), 'synth_vix_zscore': np.float32(0.07627209)}
|
|
[2026-05-16 11:33:01,901 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:33:02,186 INFO] src.engine_xgb: XGB Train Acc: 0.4854 | Test Acc: 0.4854
|
|
[2026-05-16 11:33:02,186 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09198018), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07570587), 'atr_normalized': np.float32(0.09195522), 'prev_log_return': np.float32(0.07463547), 'usdchf_log_return': np.float32(0.37424237), 'xagusd_log_return': np.float32(0.089568414), 'xtiusd_log_return': np.float32(0.083829075), 'synth_vix_zscore': np.float32(0.11808335)}
|
|
[2026-05-16 11:33:02,187 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:33:02,403 INFO] src.engine_xgb: XGB Train Acc: 0.4759 | Test Acc: 0.4759
|
|
[2026-05-16 11:33:02,403 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.062830366), 'gmm_vol_cluster': np.float32(0.06812148), 'rsi_slope': np.float32(0.08676895), 'atr_normalized': np.float32(0.09563939), 'prev_log_return': np.float32(0.07980651), 'usdchf_log_return': np.float32(0.3271212), 'xagusd_log_return': np.float32(0.09169857), 'xtiusd_log_return': np.float32(0.10043915), 'synth_vix_zscore': np.float32(0.08757447)}
|
|
[2026-05-16 11:33:02,404 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:33:02,405 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:02,712 INFO] src.backtester: Backtest [H1]: Sharpe=-7.357 | MaxDD=1.563 | WR=0.227 | Return=-78.5% | Trades=277
|
|
[2026-05-16 11:33:02,712 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:07,925 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:07,925 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:07,925 INFO] src.engine_hmm: Bull 0.9752 0.0183 0.0065
|
|
[2026-05-16 11:33:07,925 INFO] src.engine_hmm: Bear 0.0158 0.9832 0.0010
|
|
[2026-05-16 11:33:07,926 INFO] src.engine_hmm: Chop 0.0209 0.0004 0.9787
|
|
[2026-05-16 11:33:07,926 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:07,926 INFO] src.engine_hmm: Bull: return=0.150692, vol=0.039135, rsi_slope=-0.004308
|
|
[2026-05-16 11:33:07,926 INFO] src.engine_hmm: Bear: return=-0.142269, vol=-0.544596, rsi_slope=0.005769
|
|
[2026-05-16 11:33:07,927 INFO] src.engine_hmm: Chop: return=0.016200, vol=1.566650, rsi_slope=-0.005698
|
|
[2026-05-16 11:33:07,928 INFO] src.engine_hmm: Total regime transitions: 905
|
|
[2026-05-16 11:33:07,929 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:07,929 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:07,929 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:07,929 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:07,930 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:07,931 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 21:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:07,931 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:07,931 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:07,932 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:07,932 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:08,018 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:08,070 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:08,341 INFO] src.engine_xgb: XGB Train Acc: 0.4799 | Test Acc: 0.4799
|
|
[2026-05-16 11:33:08,341 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.108809926), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.077940516), 'atr_normalized': np.float32(0.08691362), 'prev_log_return': np.float32(0.0838897), 'usdchf_log_return': np.float32(0.3972547), 'xagusd_log_return': np.float32(0.07163121), 'xtiusd_log_return': np.float32(0.07019292), 'synth_vix_zscore': np.float32(0.103367455)}
|
|
[2026-05-16 11:33:08,342 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:33:08,594 INFO] src.engine_xgb: XGB Train Acc: 0.4713 | Test Acc: 0.4713
|
|
[2026-05-16 11:33:08,594 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12574868), 'gmm_vol_cluster': np.float32(0.08367217), 'rsi_slope': np.float32(0.06723407), 'atr_normalized': np.float32(0.07916483), 'prev_log_return': np.float32(0.06430388), 'usdchf_log_return': np.float32(0.33468616), 'xagusd_log_return': np.float32(0.07576155), 'xtiusd_log_return': np.float32(0.071806215), 'synth_vix_zscore': np.float32(0.09762248)}
|
|
[2026-05-16 11:33:08,594 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:33:08,829 INFO] src.engine_xgb: XGB Train Acc: 0.4739 | Test Acc: 0.4739
|
|
[2026-05-16 11:33:08,829 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07256831), 'gmm_vol_cluster': np.float32(0.07427362), 'rsi_slope': np.float32(0.08694728), 'atr_normalized': np.float32(0.11671766), 'prev_log_return': np.float32(0.084211834), 'usdchf_log_return': np.float32(0.29261202), 'xagusd_log_return': np.float32(0.08262315), 'xtiusd_log_return': np.float32(0.08892339), 'synth_vix_zscore': np.float32(0.10112267)}
|
|
[2026-05-16 11:33:08,830 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:33:08,831 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:09,195 INFO] src.backtester: Backtest [H1]: Sharpe=-7.172 | MaxDD=1.637 | WR=0.303 | Return=-80.4% | Trades=439
|
|
[2026-05-16 11:33:09,196 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:15,816 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:15,817 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:15,817 INFO] src.engine_hmm: Bull 0.9762 0.0185 0.0053
|
|
[2026-05-16 11:33:15,818 INFO] src.engine_hmm: Bear 0.0157 0.9832 0.0011
|
|
[2026-05-16 11:33:15,818 INFO] src.engine_hmm: Chop 0.0201 0.0002 0.9796
|
|
[2026-05-16 11:33:15,818 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:15,819 INFO] src.engine_hmm: Bull: return=0.050870, vol=0.064708, rsi_slope=-0.000746
|
|
[2026-05-16 11:33:15,819 INFO] src.engine_hmm: Bear: return=-0.038327, vol=-0.541677, rsi_slope=0.000382
|
|
[2026-05-16 11:33:15,819 INFO] src.engine_hmm: Chop: return=-0.026267, vol=1.681463, rsi_slope=0.001012
|
|
[2026-05-16 11:33:15,820 INFO] src.engine_hmm: Total regime transitions: 877
|
|
[2026-05-16 11:33:15,821 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:15,822 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:15,822 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:15,822 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:15,823 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:15,823 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:15,824 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:15,824 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:15,825 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-17 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:15,825 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-18 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:15,908 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:15,971 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:16,265 INFO] src.engine_xgb: XGB Train Acc: 0.4842 | Test Acc: 0.4842
|
|
[2026-05-16 11:33:16,265 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10210316), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07563647), 'atr_normalized': np.float32(0.081970245), 'prev_log_return': np.float32(0.080149695), 'usdchf_log_return': np.float32(0.43546498), 'xagusd_log_return': np.float32(0.07049776), 'xtiusd_log_return': np.float32(0.06961709), 'synth_vix_zscore': np.float32(0.08456068)}
|
|
[2026-05-16 11:33:16,266 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:33:16,545 INFO] src.engine_xgb: XGB Train Acc: 0.4751 | Test Acc: 0.4751
|
|
[2026-05-16 11:33:16,546 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1221615), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0838087), 'atr_normalized': np.float32(0.0833234), 'prev_log_return': np.float32(0.07921445), 'usdchf_log_return': np.float32(0.37333062), 'xagusd_log_return': np.float32(0.082195185), 'xtiusd_log_return': np.float32(0.07549611), 'synth_vix_zscore': np.float32(0.10046999)}
|
|
[2026-05-16 11:33:16,547 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:33:16,806 INFO] src.engine_xgb: XGB Train Acc: 0.4848 | Test Acc: 0.4848
|
|
[2026-05-16 11:33:16,806 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06884292), 'gmm_vol_cluster': np.float32(0.081667766), 'rsi_slope': np.float32(0.093964875), 'atr_normalized': np.float32(0.0932265), 'prev_log_return': np.float32(0.07414258), 'usdchf_log_return': np.float32(0.32444558), 'xagusd_log_return': np.float32(0.07833298), 'xtiusd_log_return': np.float32(0.08537373), 'synth_vix_zscore': np.float32(0.10000311)}
|
|
[2026-05-16 11:33:16,807 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:33:16,808 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:17,121 INFO] src.backtester: Backtest [H1]: Sharpe=-8.540 | MaxDD=2.015 | WR=0.221 | Return=-86.5% | Trades=447
|
|
[2026-05-16 11:33:17,122 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:23,749 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:23,750 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:23,750 INFO] src.engine_hmm: Bull 0.9762 0.0015 0.0223
|
|
[2026-05-16 11:33:23,751 INFO] src.engine_hmm: Bear 0.0033 0.9774 0.0193
|
|
[2026-05-16 11:33:23,751 INFO] src.engine_hmm: Chop 0.0093 0.0234 0.9674
|
|
[2026-05-16 11:33:23,752 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:23,752 INFO] src.engine_hmm: Bull: return=0.195121, vol=1.396230, rsi_slope=-0.002852
|
|
[2026-05-16 11:33:23,753 INFO] src.engine_hmm: Bear: return=-0.083056, vol=-0.707603, rsi_slope=-0.000463
|
|
[2026-05-16 11:33:23,753 INFO] src.engine_hmm: Chop: return=-0.015808, vol=0.008366, rsi_slope=0.002029
|
|
[2026-05-16 11:33:23,754 INFO] src.engine_hmm: Total regime transitions: 1157
|
|
[2026-05-16 11:33:23,755 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:23,756 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:23,756 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:23,757 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:23,758 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:23,758 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:23,759 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:23,759 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-08 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:23,760 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:23,761 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:23,846 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:23,888 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:24,149 INFO] src.engine_xgb: XGB Train Acc: 0.4903 | Test Acc: 0.4903
|
|
[2026-05-16 11:33:24,149 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.099805996), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07917071), 'atr_normalized': np.float32(0.08794036), 'prev_log_return': np.float32(0.08281273), 'usdchf_log_return': np.float32(0.41602752), 'xagusd_log_return': np.float32(0.07784277), 'xtiusd_log_return': np.float32(0.07481021), 'synth_vix_zscore': np.float32(0.0815896)}
|
|
[2026-05-16 11:33:24,150 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:33:24,420 INFO] src.engine_xgb: XGB Train Acc: 0.4864 | Test Acc: 0.4864
|
|
[2026-05-16 11:33:24,420 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10136162), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.078183755), 'atr_normalized': np.float32(0.08181848), 'prev_log_return': np.float32(0.07672405), 'usdchf_log_return': np.float32(0.41373867), 'xagusd_log_return': np.float32(0.081354454), 'xtiusd_log_return': np.float32(0.080121174), 'synth_vix_zscore': np.float32(0.08669783)}
|
|
[2026-05-16 11:33:24,422 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:33:24,690 INFO] src.engine_xgb: XGB Train Acc: 0.4898 | Test Acc: 0.4898
|
|
[2026-05-16 11:33:24,690 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0952771), 'gmm_vol_cluster': np.float32(0.07711109), 'rsi_slope': np.float32(0.084725805), 'atr_normalized': np.float32(0.108562194), 'prev_log_return': np.float32(0.07756719), 'usdchf_log_return': np.float32(0.296594), 'xagusd_log_return': np.float32(0.07995718), 'xtiusd_log_return': np.float32(0.0857628), 'synth_vix_zscore': np.float32(0.09444268)}
|
|
[2026-05-16 11:33:24,691 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:33:24,693 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:25,013 INFO] src.backtester: Backtest [H1]: Sharpe=-4.006 | MaxDD=1.224 | WR=0.263 | Return=-70.1% | Trades=224
|
|
[2026-05-16 11:33:25,014 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:27,760 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:27,761 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:27,761 INFO] src.engine_hmm: Bull 0.9850 0.0103 0.0046
|
|
[2026-05-16 11:33:27,761 INFO] src.engine_hmm: Bear 0.0094 0.9862 0.0044
|
|
[2026-05-16 11:33:27,762 INFO] src.engine_hmm: Chop 0.0100 0.0128 0.9772
|
|
[2026-05-16 11:33:27,762 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:27,762 INFO] src.engine_hmm: Bull: return=0.582535, vol=-0.244622, rsi_slope=-0.026005
|
|
[2026-05-16 11:33:27,763 INFO] src.engine_hmm: Bear: return=-0.489930, vol=-0.282625, rsi_slope=0.026077
|
|
[2026-05-16 11:33:27,763 INFO] src.engine_hmm: Chop: return=-0.053635, vol=1.349034, rsi_slope=-0.009029
|
|
[2026-05-16 11:33:27,764 INFO] src.engine_hmm: Total regime transitions: 676
|
|
[2026-05-16 11:33:27,764 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:27,765 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:27,765 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:27,766 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:27,766 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:27,767 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:27,767 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 05:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:27,768 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:27,768 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:27,769 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:27,869 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:27,950 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:28,239 INFO] src.engine_xgb: XGB Train Acc: 0.4913 | Test Acc: 0.4913
|
|
[2026-05-16 11:33:28,240 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.2687115), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.057182387), 'atr_normalized': np.float32(0.07254464), 'prev_log_return': np.float32(0.06848339), 'usdchf_log_return': np.float32(0.34301603), 'xagusd_log_return': np.float32(0.06291286), 'xtiusd_log_return': np.float32(0.06393339), 'synth_vix_zscore': np.float32(0.06321583)}
|
|
[2026-05-16 11:33:28,240 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:33:28,476 INFO] src.engine_xgb: XGB Train Acc: 0.4810 | Test Acc: 0.4810
|
|
[2026-05-16 11:33:28,477 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10004123), 'gmm_vol_cluster': np.float32(0.09284883), 'rsi_slope': np.float32(0.08501349), 'atr_normalized': np.float32(0.08813782), 'prev_log_return': np.float32(0.08470128), 'usdchf_log_return': np.float32(0.31848857), 'xagusd_log_return': np.float32(0.06858169), 'xtiusd_log_return': np.float32(0.06926775), 'synth_vix_zscore': np.float32(0.09291935)}
|
|
[2026-05-16 11:33:28,478 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:33:28,733 INFO] src.engine_xgb: XGB Train Acc: 0.4794 | Test Acc: 0.4794
|
|
[2026-05-16 11:33:28,733 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.22040154), 'gmm_vol_cluster': np.float32(0.05906183), 'rsi_slope': np.float32(0.07197982), 'atr_normalized': np.float32(0.0885266), 'prev_log_return': np.float32(0.069558315), 'usdchf_log_return': np.float32(0.26474428), 'xagusd_log_return': np.float32(0.07085216), 'xtiusd_log_return': np.float32(0.07790133), 'synth_vix_zscore': np.float32(0.07697409)}
|
|
[2026-05-16 11:33:28,734 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:33:28,736 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:29,052 INFO] src.backtester: Backtest [H1]: Sharpe=-5.696 | MaxDD=1.295 | WR=0.217 | Return=-72.4% | Trades=161
|
|
[2026-05-16 11:33:29,053 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:35,335 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:35,335 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:35,336 INFO] src.engine_hmm: Bull 0.9843 0.0107 0.0050
|
|
[2026-05-16 11:33:35,336 INFO] src.engine_hmm: Bear 0.0093 0.9866 0.0041
|
|
[2026-05-16 11:33:35,337 INFO] src.engine_hmm: Chop 0.0092 0.0121 0.9787
|
|
[2026-05-16 11:33:35,337 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:35,337 INFO] src.engine_hmm: Bull: return=0.603994, vol=-0.169904, rsi_slope=-0.024669
|
|
[2026-05-16 11:33:35,338 INFO] src.engine_hmm: Bear: return=-0.414116, vol=-0.375009, rsi_slope=0.020972
|
|
[2026-05-16 11:33:35,338 INFO] src.engine_hmm: Chop: return=-0.209123, vol=1.350095, rsi_slope=-0.002121
|
|
[2026-05-16 11:33:35,339 INFO] src.engine_hmm: Total regime transitions: 676
|
|
[2026-05-16 11:33:35,339 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:35,340 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:35,341 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:35,342 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:35,343 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:35,343 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:35,344 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 05:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:35,344 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:35,344 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:35,345 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:35,428 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:35,483 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:35,773 INFO] src.engine_xgb: XGB Train Acc: 0.4830 | Test Acc: 0.4830
|
|
[2026-05-16 11:33:35,774 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.27404225), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.06970559), 'atr_normalized': np.float32(0.07483383), 'prev_log_return': np.float32(0.064207815), 'usdchf_log_return': np.float32(0.30452302), 'xagusd_log_return': np.float32(0.06632774), 'xtiusd_log_return': np.float32(0.067889854), 'synth_vix_zscore': np.float32(0.07846985)}
|
|
[2026-05-16 11:33:35,775 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:33:36,026 INFO] src.engine_xgb: XGB Train Acc: 0.4705 | Test Acc: 0.4705
|
|
[2026-05-16 11:33:36,026 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15194184), 'gmm_vol_cluster': np.float32(0.08445018), 'rsi_slope': np.float32(0.08205862), 'atr_normalized': np.float32(0.08366931), 'prev_log_return': np.float32(0.07546137), 'usdchf_log_return': np.float32(0.289289), 'xagusd_log_return': np.float32(0.07530598), 'xtiusd_log_return': np.float32(0.07023153), 'synth_vix_zscore': np.float32(0.087592155)}
|
|
[2026-05-16 11:33:36,027 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:33:36,275 INFO] src.engine_xgb: XGB Train Acc: 0.4743 | Test Acc: 0.4743
|
|
[2026-05-16 11:33:36,275 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.122120455), 'gmm_vol_cluster': np.float32(0.061292034), 'rsi_slope': np.float32(0.07944356), 'atr_normalized': np.float32(0.10566836), 'prev_log_return': np.float32(0.0668525), 'usdchf_log_return': np.float32(0.30040994), 'xagusd_log_return': np.float32(0.08205972), 'xtiusd_log_return': np.float32(0.075406894), 'synth_vix_zscore': np.float32(0.10674656)}
|
|
[2026-05-16 11:33:36,276 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:33:36,278 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:36,638 INFO] src.backtester: Backtest [H1]: Sharpe=-7.369 | MaxDD=1.811 | WR=0.251 | Return=-83.6% | Trades=271
|
|
[2026-05-16 11:33:36,638 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:39,133 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:39,133 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:39,134 INFO] src.engine_hmm: Bull 0.9850 0.0106 0.0045
|
|
[2026-05-16 11:33:39,134 INFO] src.engine_hmm: Bear 0.0094 0.9861 0.0045
|
|
[2026-05-16 11:33:39,134 INFO] src.engine_hmm: Chop 0.0081 0.0124 0.9795
|
|
[2026-05-16 11:33:39,135 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:39,135 INFO] src.engine_hmm: Bull: return=0.583931, vol=-0.240043, rsi_slope=-0.025973
|
|
[2026-05-16 11:33:39,136 INFO] src.engine_hmm: Bear: return=-0.437333, vol=-0.329818, rsi_slope=0.021120
|
|
[2026-05-16 11:33:39,136 INFO] src.engine_hmm: Chop: return=-0.140399, vol=1.319641, rsi_slope=0.002116
|
|
[2026-05-16 11:33:39,137 INFO] src.engine_hmm: Total regime transitions: 666
|
|
[2026-05-16 11:33:39,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:39,137 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:39,138 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:39,138 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:39,139 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 02:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:39,139 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:39,140 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:39,140 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:39,141 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:39,141 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-29 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:39,236 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:39,291 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:39,573 INFO] src.engine_xgb: XGB Train Acc: 0.4837 | Test Acc: 0.4837
|
|
[2026-05-16 11:33:39,574 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.22886743), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07105931), 'atr_normalized': np.float32(0.077398725), 'prev_log_return': np.float32(0.06843895), 'usdchf_log_return': np.float32(0.34658116), 'xagusd_log_return': np.float32(0.06857802), 'xtiusd_log_return': np.float32(0.06352436), 'synth_vix_zscore': np.float32(0.07555208)}
|
|
[2026-05-16 11:33:39,574 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:33:39,835 INFO] src.engine_xgb: XGB Train Acc: 0.4790 | Test Acc: 0.4790
|
|
[2026-05-16 11:33:39,836 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.26608536), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07400418), 'atr_normalized': np.float32(0.07324879), 'prev_log_return': np.float32(0.06911817), 'usdchf_log_return': np.float32(0.28896868), 'xagusd_log_return': np.float32(0.07184922), 'xtiusd_log_return': np.float32(0.066170536), 'synth_vix_zscore': np.float32(0.090555124)}
|
|
[2026-05-16 11:33:39,837 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:33:40,051 INFO] src.engine_xgb: XGB Train Acc: 0.4841 | Test Acc: 0.4841
|
|
[2026-05-16 11:33:40,052 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11287316), 'gmm_vol_cluster': np.float32(0.056983866), 'rsi_slope': np.float32(0.08328444), 'atr_normalized': np.float32(0.09558278), 'prev_log_return': np.float32(0.07260569), 'usdchf_log_return': np.float32(0.30553693), 'xagusd_log_return': np.float32(0.07188823), 'xtiusd_log_return': np.float32(0.093494), 'synth_vix_zscore': np.float32(0.10775086)}
|
|
[2026-05-16 11:33:40,052 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:33:40,053 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:40,382 INFO] src.backtester: Backtest [H1]: Sharpe=-7.545 | MaxDD=1.757 | WR=0.131 | Return=-82.7% | Trades=222
|
|
[2026-05-16 11:33:40,383 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:45,772 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:45,773 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:45,773 INFO] src.engine_hmm: Bull 0.9822 0.0108 0.0070
|
|
[2026-05-16 11:33:45,774 INFO] src.engine_hmm: Bear 0.0118 0.9809 0.0073
|
|
[2026-05-16 11:33:45,774 INFO] src.engine_hmm: Chop 0.0117 0.0118 0.9765
|
|
[2026-05-16 11:33:45,775 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:45,775 INFO] src.engine_hmm: Bull: return=0.489374, vol=-0.453139, rsi_slope=-0.021972
|
|
[2026-05-16 11:33:45,776 INFO] src.engine_hmm: Bear: return=-0.593296, vol=-0.279452, rsi_slope=0.025918
|
|
[2026-05-16 11:33:45,776 INFO] src.engine_hmm: Chop: return=0.099336, vol=1.218606, rsi_slope=-0.003322
|
|
[2026-05-16 11:33:45,777 INFO] src.engine_hmm: Total regime transitions: 838
|
|
[2026-05-16 11:33:45,778 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:45,779 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:45,779 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:45,780 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:45,780 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:45,781 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:45,781 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:33:45,782 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:45,782 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:45,783 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:45,920 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:45,979 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:46,309 INFO] src.engine_xgb: XGB Train Acc: 0.4918 | Test Acc: 0.4918
|
|
[2026-05-16 11:33:46,310 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.20372091), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.05981633), 'atr_normalized': np.float32(0.078381404), 'prev_log_return': np.float32(0.06893836), 'usdchf_log_return': np.float32(0.37479347), 'xagusd_log_return': np.float32(0.07058002), 'xtiusd_log_return': np.float32(0.06173784), 'synth_vix_zscore': np.float32(0.08203169)}
|
|
[2026-05-16 11:33:46,311 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:33:46,617 INFO] src.engine_xgb: XGB Train Acc: 0.4875 | Test Acc: 0.4875
|
|
[2026-05-16 11:33:46,618 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.092270225), 'gmm_vol_cluster': np.float32(0.056420926), 'rsi_slope': np.float32(0.07873501), 'atr_normalized': np.float32(0.0908676), 'prev_log_return': np.float32(0.0908099), 'usdchf_log_return': np.float32(0.3543406), 'xagusd_log_return': np.float32(0.07847458), 'xtiusd_log_return': np.float32(0.070205554), 'synth_vix_zscore': np.float32(0.08787559)}
|
|
[2026-05-16 11:33:46,618 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:33:46,862 INFO] src.engine_xgb: XGB Train Acc: 0.4899 | Test Acc: 0.4899
|
|
[2026-05-16 11:33:46,862 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08778225), 'gmm_vol_cluster': np.float32(0.092937104), 'rsi_slope': np.float32(0.083691105), 'atr_normalized': np.float32(0.12178116), 'prev_log_return': np.float32(0.070285805), 'usdchf_log_return': np.float32(0.30209795), 'xagusd_log_return': np.float32(0.080502525), 'xtiusd_log_return': np.float32(0.075966895), 'synth_vix_zscore': np.float32(0.08495523)}
|
|
[2026-05-16 11:33:46,863 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:33:46,866 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:47,192 INFO] src.backtester: Backtest [H1]: Sharpe=-4.497 | MaxDD=0.816 | WR=0.195 | Return=-55.4% | Trades=133
|
|
[2026-05-16 11:33:47,193 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:54,284 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:54,285 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:54,285 INFO] src.engine_hmm: Bull 0.9762 0.0189 0.0049
|
|
[2026-05-16 11:33:54,285 INFO] src.engine_hmm: Bear 0.0163 0.9827 0.0010
|
|
[2026-05-16 11:33:54,286 INFO] src.engine_hmm: Chop 0.0205 0.0007 0.9788
|
|
[2026-05-16 11:33:54,286 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:54,286 INFO] src.engine_hmm: Bull: return=0.138955, vol=0.071618, rsi_slope=0.002472
|
|
[2026-05-16 11:33:54,286 INFO] src.engine_hmm: Bear: return=-0.144626, vol=-0.507335, rsi_slope=0.001962
|
|
[2026-05-16 11:33:54,286 INFO] src.engine_hmm: Chop: return=0.074398, vol=1.751756, rsi_slope=-0.016632
|
|
[2026-05-16 11:33:54,287 INFO] src.engine_hmm: Total regime transitions: 889
|
|
[2026-05-16 11:33:54,287 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:54,288 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:33:54,288 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:54,289 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:54,289 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:54,289 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:54,290 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-19 04:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:54,290 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-19 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:33:54,290 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:54,291 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 18:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:54,391 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:54,449 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:54,739 INFO] src.engine_xgb: XGB Train Acc: 0.4855 | Test Acc: 0.4855
|
|
[2026-05-16 11:33:54,739 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.104452), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07792653), 'atr_normalized': np.float32(0.07925976), 'prev_log_return': np.float32(0.07967478), 'usdchf_log_return': np.float32(0.41533604), 'xagusd_log_return': np.float32(0.07897398), 'xtiusd_log_return': np.float32(0.0790457), 'synth_vix_zscore': np.float32(0.08533128)}
|
|
[2026-05-16 11:33:54,740 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:33:54,995 INFO] src.engine_xgb: XGB Train Acc: 0.4824 | Test Acc: 0.4824
|
|
[2026-05-16 11:33:54,996 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.2314903), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07037892), 'atr_normalized': np.float32(0.08157981), 'prev_log_return': np.float32(0.067633145), 'usdchf_log_return': np.float32(0.3180188), 'xagusd_log_return': np.float32(0.07219589), 'xtiusd_log_return': np.float32(0.07078892), 'synth_vix_zscore': np.float32(0.08791431)}
|
|
[2026-05-16 11:33:54,996 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:33:55,258 INFO] src.engine_xgb: XGB Train Acc: 0.4744 | Test Acc: 0.4744
|
|
[2026-05-16 11:33:55,259 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08603796), 'gmm_vol_cluster': np.float32(0.077884436), 'rsi_slope': np.float32(0.08058607), 'atr_normalized': np.float32(0.10738479), 'prev_log_return': np.float32(0.07383957), 'usdchf_log_return': np.float32(0.32179093), 'xagusd_log_return': np.float32(0.08925526), 'xtiusd_log_return': np.float32(0.087090515), 'synth_vix_zscore': np.float32(0.07613043)}
|
|
[2026-05-16 11:33:55,259 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:33:55,261 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:55,597 INFO] src.backtester: Backtest [H1]: Sharpe=-5.582 | MaxDD=1.065 | WR=0.315 | Return=-65.5% | Trades=248
|
|
[2026-05-16 11:33:55,597 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:33:58,815 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:33:58,815 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:33:58,816 INFO] src.engine_hmm: Bull 0.9845 0.0112 0.0043
|
|
[2026-05-16 11:33:58,816 INFO] src.engine_hmm: Bear 0.0095 0.9864 0.0040
|
|
[2026-05-16 11:33:58,817 INFO] src.engine_hmm: Chop 0.0086 0.0125 0.9789
|
|
[2026-05-16 11:33:58,817 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:33:58,818 INFO] src.engine_hmm: Bull: return=0.591567, vol=-0.199187, rsi_slope=-0.027671
|
|
[2026-05-16 11:33:58,818 INFO] src.engine_hmm: Bear: return=-0.438832, vol=-0.319535, rsi_slope=0.022215
|
|
[2026-05-16 11:33:58,819 INFO] src.engine_hmm: Chop: return=-0.125862, vol=1.359254, rsi_slope=0.001129
|
|
[2026-05-16 11:33:58,819 INFO] src.engine_hmm: Total regime transitions: 664
|
|
[2026-05-16 11:33:58,820 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:58,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:58,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:33:58,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:58,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 10:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:58,823 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:33:58,823 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 06:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:58,824 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:33:58,824 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:33:58,825 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:33:58,923 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:58,991 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:33:59,251 INFO] src.engine_xgb: XGB Train Acc: 0.4865 | Test Acc: 0.4865
|
|
[2026-05-16 11:33:59,251 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1901112), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.060509607), 'atr_normalized': np.float32(0.07353946), 'prev_log_return': np.float32(0.064945884), 'usdchf_log_return': np.float32(0.413993), 'xagusd_log_return': np.float32(0.07421814), 'xtiusd_log_return': np.float32(0.056549355), 'synth_vix_zscore': np.float32(0.06613338)}
|
|
[2026-05-16 11:33:59,252 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:33:59,503 INFO] src.engine_xgb: XGB Train Acc: 0.4888 | Test Acc: 0.4888
|
|
[2026-05-16 11:33:59,503 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.2143647), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07482642), 'atr_normalized': np.float32(0.0779642), 'prev_log_return': np.float32(0.07095367), 'usdchf_log_return': np.float32(0.31893307), 'xagusd_log_return': np.float32(0.068455435), 'xtiusd_log_return': np.float32(0.075968415), 'synth_vix_zscore': np.float32(0.098534115)}
|
|
[2026-05-16 11:33:59,504 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:33:59,761 INFO] src.engine_xgb: XGB Train Acc: 0.4846 | Test Acc: 0.4846
|
|
[2026-05-16 11:33:59,763 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13896699), 'gmm_vol_cluster': np.float32(0.059485745), 'rsi_slope': np.float32(0.08130448), 'atr_normalized': np.float32(0.085159555), 'prev_log_return': np.float32(0.06971125), 'usdchf_log_return': np.float32(0.32669514), 'xagusd_log_return': np.float32(0.07517918), 'xtiusd_log_return': np.float32(0.08024005), 'synth_vix_zscore': np.float32(0.083257645)}
|
|
[2026-05-16 11:33:59,764 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:33:59,765 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:00,051 INFO] src.backtester: Backtest [H1]: Sharpe=-4.845 | MaxDD=1.114 | WR=0.204 | Return=-67.0% | Trades=196
|
|
[2026-05-16 11:34:00,052 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:07,618 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:07,618 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:07,619 INFO] src.engine_hmm: Bull 0.9809 0.0113 0.0078
|
|
[2026-05-16 11:34:07,619 INFO] src.engine_hmm: Bear 0.0129 0.9788 0.0083
|
|
[2026-05-16 11:34:07,620 INFO] src.engine_hmm: Chop 0.0109 0.0140 0.9751
|
|
[2026-05-16 11:34:07,620 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:07,620 INFO] src.engine_hmm: Bull: return=0.501770, vol=-0.505410, rsi_slope=-0.020069
|
|
[2026-05-16 11:34:07,621 INFO] src.engine_hmm: Bear: return=-0.560185, vol=-0.264037, rsi_slope=0.026405
|
|
[2026-05-16 11:34:07,621 INFO] src.engine_hmm: Chop: return=0.050646, vol=1.201490, rsi_slope=-0.008074
|
|
[2026-05-16 11:34:07,622 INFO] src.engine_hmm: Total regime transitions: 922
|
|
[2026-05-16 11:34:07,622 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 03:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:07,624 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:07,624 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:07,625 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 08:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:07,625 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:07,625 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:07,626 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:07,626 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:07,626 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:07,627 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:07,718 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:07,774 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:08,076 INFO] src.engine_xgb: XGB Train Acc: 0.4905 | Test Acc: 0.4905
|
|
[2026-05-16 11:34:08,077 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13851771), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.06731729), 'atr_normalized': np.float32(0.069274746), 'prev_log_return': np.float32(0.068110086), 'usdchf_log_return': np.float32(0.4232183), 'xagusd_log_return': np.float32(0.0820452), 'xtiusd_log_return': np.float32(0.07025602), 'synth_vix_zscore': np.float32(0.08126066)}
|
|
[2026-05-16 11:34:08,077 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:34:08,323 INFO] src.engine_xgb: XGB Train Acc: 0.4952 | Test Acc: 0.4952
|
|
[2026-05-16 11:34:08,324 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11147191), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08019238), 'atr_normalized': np.float32(0.10133494), 'prev_log_return': np.float32(0.07618955), 'usdchf_log_return': np.float32(0.37155882), 'xagusd_log_return': np.float32(0.083278246), 'xtiusd_log_return': np.float32(0.085417286), 'synth_vix_zscore': np.float32(0.090556875)}
|
|
[2026-05-16 11:34:08,324 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:34:08,590 INFO] src.engine_xgb: XGB Train Acc: 0.4963 | Test Acc: 0.4963
|
|
[2026-05-16 11:34:08,590 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0732162), 'gmm_vol_cluster': np.float32(0.09230861), 'rsi_slope': np.float32(0.080965325), 'atr_normalized': np.float32(0.07943197), 'prev_log_return': np.float32(0.06769743), 'usdchf_log_return': np.float32(0.36465022), 'xagusd_log_return': np.float32(0.07639181), 'xtiusd_log_return': np.float32(0.08199044), 'synth_vix_zscore': np.float32(0.08334802)}
|
|
[2026-05-16 11:34:08,591 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:34:08,592 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:08,915 INFO] src.backtester: Backtest [H1]: Sharpe=-3.248 | MaxDD=0.564 | WR=0.224 | Return=-42.5% | Trades=134
|
|
[2026-05-16 11:34:08,916 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:16,113 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:16,114 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:16,115 INFO] src.engine_hmm: Bull 0.9771 0.0172 0.0056
|
|
[2026-05-16 11:34:16,115 INFO] src.engine_hmm: Bear 0.0145 0.9846 0.0009
|
|
[2026-05-16 11:34:16,115 INFO] src.engine_hmm: Chop 0.0195 0.0003 0.9802
|
|
[2026-05-16 11:34:16,116 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:16,117 INFO] src.engine_hmm: Bull: return=0.149194, vol=0.051775, rsi_slope=-0.005529
|
|
[2026-05-16 11:34:16,117 INFO] src.engine_hmm: Bear: return=-0.115672, vol=-0.532681, rsi_slope=0.003757
|
|
[2026-05-16 11:34:16,118 INFO] src.engine_hmm: Chop: return=-0.057188, vol=1.654627, rsi_slope=0.003920
|
|
[2026-05-16 11:34:16,119 INFO] src.engine_hmm: Total regime transitions: 831
|
|
[2026-05-16 11:34:16,119 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:16,120 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:16,121 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:16,121 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:16,122 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:16,122 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:16,123 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:16,123 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:16,124 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:16,124 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:16,219 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:16,263 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:16,491 INFO] src.engine_xgb: XGB Train Acc: 0.4790 | Test Acc: 0.4790
|
|
[2026-05-16 11:34:16,491 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10320017), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0798167), 'atr_normalized': np.float32(0.07374777), 'prev_log_return': np.float32(0.07835293), 'usdchf_log_return': np.float32(0.43230653), 'xagusd_log_return': np.float32(0.07401543), 'xtiusd_log_return': np.float32(0.07013065), 'synth_vix_zscore': np.float32(0.088429816)}
|
|
[2026-05-16 11:34:16,491 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:34:16,684 INFO] src.engine_xgb: XGB Train Acc: 0.4784 | Test Acc: 0.4784
|
|
[2026-05-16 11:34:16,684 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14770988), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08618515), 'atr_normalized': np.float32(0.09352387), 'prev_log_return': np.float32(0.08187798), 'usdchf_log_return': np.float32(0.33822778), 'xagusd_log_return': np.float32(0.08569706), 'xtiusd_log_return': np.float32(0.07039471), 'synth_vix_zscore': np.float32(0.09638353)}
|
|
[2026-05-16 11:34:16,685 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:34:16,936 INFO] src.engine_xgb: XGB Train Acc: 0.4791 | Test Acc: 0.4791
|
|
[2026-05-16 11:34:16,937 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08754019), 'gmm_vol_cluster': np.float32(0.07487889), 'rsi_slope': np.float32(0.086919114), 'atr_normalized': np.float32(0.106560424), 'prev_log_return': np.float32(0.07620523), 'usdchf_log_return': np.float32(0.32026395), 'xagusd_log_return': np.float32(0.083362915), 'xtiusd_log_return': np.float32(0.0763289), 'synth_vix_zscore': np.float32(0.08794036)}
|
|
[2026-05-16 11:34:16,937 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:34:16,939 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:17,282 INFO] src.backtester: Backtest [H1]: Sharpe=-6.836 | MaxDD=1.490 | WR=0.290 | Return=-77.5% | Trades=393
|
|
[2026-05-16 11:34:17,282 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:23,534 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:23,535 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:23,535 INFO] src.engine_hmm: Bull 0.9817 0.0104 0.0079
|
|
[2026-05-16 11:34:23,536 INFO] src.engine_hmm: Bear 0.0127 0.9806 0.0067
|
|
[2026-05-16 11:34:23,536 INFO] src.engine_hmm: Chop 0.0111 0.0109 0.9780
|
|
[2026-05-16 11:34:23,536 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:23,537 INFO] src.engine_hmm: Bull: return=0.426538, vol=-0.465582, rsi_slope=-0.019540
|
|
[2026-05-16 11:34:23,538 INFO] src.engine_hmm: Bear: return=-0.597774, vol=-0.312277, rsi_slope=0.029899
|
|
[2026-05-16 11:34:23,538 INFO] src.engine_hmm: Chop: return=0.166362, vol=1.181939, rsi_slope=-0.011176
|
|
[2026-05-16 11:34:23,539 INFO] src.engine_hmm: Total regime transitions: 855
|
|
[2026-05-16 11:34:23,540 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:23,540 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:23,541 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:23,541 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:23,542 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 12:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:23,542 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:23,542 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:23,543 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:23,543 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:23,544 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:23,634 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:23,695 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:23,960 INFO] src.engine_xgb: XGB Train Acc: 0.4851 | Test Acc: 0.4851
|
|
[2026-05-16 11:34:23,960 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.2008812), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0663643), 'atr_normalized': np.float32(0.06557346), 'prev_log_return': np.float32(0.06810561), 'usdchf_log_return': np.float32(0.3978376), 'xagusd_log_return': np.float32(0.06370423), 'xtiusd_log_return': np.float32(0.061697315), 'synth_vix_zscore': np.float32(0.075836286)}
|
|
[2026-05-16 11:34:23,960 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:34:24,200 INFO] src.engine_xgb: XGB Train Acc: 0.4858 | Test Acc: 0.4858
|
|
[2026-05-16 11:34:24,201 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09531925), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09044631), 'atr_normalized': np.float32(0.10345211), 'prev_log_return': np.float32(0.07689337), 'usdchf_log_return': np.float32(0.3690572), 'xagusd_log_return': np.float32(0.09332762), 'xtiusd_log_return': np.float32(0.081259444), 'synth_vix_zscore': np.float32(0.09024469)}
|
|
[2026-05-16 11:34:24,201 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:34:24,516 INFO] src.engine_xgb: XGB Train Acc: 0.4870 | Test Acc: 0.4870
|
|
[2026-05-16 11:34:24,516 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07057908), 'gmm_vol_cluster': np.float32(0.054597545), 'rsi_slope': np.float32(0.08821896), 'atr_normalized': np.float32(0.11147899), 'prev_log_return': np.float32(0.06819248), 'usdchf_log_return': np.float32(0.33975613), 'xagusd_log_return': np.float32(0.0851828), 'xtiusd_log_return': np.float32(0.08571436), 'synth_vix_zscore': np.float32(0.09627967)}
|
|
[2026-05-16 11:34:24,517 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:34:24,518 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:24,797 INFO] src.backtester: Backtest [H1]: Sharpe=-3.180 | MaxDD=0.636 | WR=0.271 | Return=-46.4% | Trades=181
|
|
[2026-05-16 11:34:24,798 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:29,367 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:29,367 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:29,368 INFO] src.engine_hmm: Bull 0.9803 0.0121 0.0076
|
|
[2026-05-16 11:34:29,368 INFO] src.engine_hmm: Bear 0.0107 0.9829 0.0064
|
|
[2026-05-16 11:34:29,369 INFO] src.engine_hmm: Chop 0.0103 0.0118 0.9780
|
|
[2026-05-16 11:34:29,369 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:29,369 INFO] src.engine_hmm: Bull: return=0.616711, vol=-0.303939, rsi_slope=-0.030219
|
|
[2026-05-16 11:34:29,369 INFO] src.engine_hmm: Bear: return=-0.451987, vol=-0.447286, rsi_slope=0.020708
|
|
[2026-05-16 11:34:29,370 INFO] src.engine_hmm: Chop: return=-0.121774, vol=1.208549, rsi_slope=0.008435
|
|
[2026-05-16 11:34:29,370 INFO] src.engine_hmm: Total regime transitions: 843
|
|
[2026-05-16 11:34:29,371 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 04:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:29,372 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:29,372 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-13 02:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:29,372 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:29,373 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:29,373 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:29,373 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:29,374 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:29,375 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:29,376 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:29,473 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:29,540 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:29,798 INFO] src.engine_xgb: XGB Train Acc: 0.4878 | Test Acc: 0.4878
|
|
[2026-05-16 11:34:29,799 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1938819), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.06369294), 'atr_normalized': np.float32(0.08376612), 'prev_log_return': np.float32(0.06217148), 'usdchf_log_return': np.float32(0.40987033), 'xagusd_log_return': np.float32(0.061624594), 'xtiusd_log_return': np.float32(0.056381784), 'synth_vix_zscore': np.float32(0.06861092)}
|
|
[2026-05-16 11:34:29,799 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:34:30,012 INFO] src.engine_xgb: XGB Train Acc: 0.4906 | Test Acc: 0.4906
|
|
[2026-05-16 11:34:30,012 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12353373), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08256965), 'atr_normalized': np.float32(0.087271996), 'prev_log_return': np.float32(0.08198016), 'usdchf_log_return': np.float32(0.35225353), 'xagusd_log_return': np.float32(0.07796279), 'xtiusd_log_return': np.float32(0.08743673), 'synth_vix_zscore': np.float32(0.1069914)}
|
|
[2026-05-16 11:34:30,013 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:34:30,252 INFO] src.engine_xgb: XGB Train Acc: 0.4986 | Test Acc: 0.4986
|
|
[2026-05-16 11:34:30,252 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.081892096), 'gmm_vol_cluster': np.float32(0.052469615), 'rsi_slope': np.float32(0.0940766), 'atr_normalized': np.float32(0.08917253), 'prev_log_return': np.float32(0.06876056), 'usdchf_log_return': np.float32(0.3707263), 'xagusd_log_return': np.float32(0.08002541), 'xtiusd_log_return': np.float32(0.075126514), 'synth_vix_zscore': np.float32(0.0877504)}
|
|
[2026-05-16 11:34:30,253 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:34:30,254 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:30,551 INFO] src.backtester: Backtest [H1]: Sharpe=-4.368 | MaxDD=0.854 | WR=0.220 | Return=-56.6% | Trades=164
|
|
[2026-05-16 11:34:30,552 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:30,592 WARNING] src.optimizer: CPCV [H1]: only 0 valid paths — rejecting trial.
|
|
[2026-05-16 11:34:30,676 INFO] src.optimizer: Trial 6 [H1/headway_cent]: score=-50.000 | valid_paths=0/15 | std_sharpe=0.000 | median_trades=223
|
|
Best trial: 1. Best value: -50: 5%|████ | 7/130 [10:47<3:24:26, 99.73s/it][2026-05-16 11:34:36,679 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:36,680 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:36,680 INFO] src.engine_hmm: Bull 0.9821 0.0022 0.0157
|
|
[2026-05-16 11:34:36,680 INFO] src.engine_hmm: Bear 0.0008 0.9743 0.0248
|
|
[2026-05-16 11:34:36,680 INFO] src.engine_hmm: Chop 0.0235 0.0056 0.9710
|
|
[2026-05-16 11:34:36,681 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:36,681 INFO] src.engine_hmm: Bull: return=0.052248, vol=-0.514457, rsi_slope=0.000600
|
|
[2026-05-16 11:34:36,681 INFO] src.engine_hmm: Bear: return=-0.170793, vol=1.754657, rsi_slope=-0.011889
|
|
[2026-05-16 11:34:36,681 INFO] src.engine_hmm: Chop: return=-0.013686, vol=0.110962, rsi_slope=0.003081
|
|
[2026-05-16 11:34:36,681 INFO] src.engine_hmm: Total regime transitions: 1018
|
|
[2026-05-16 11:34:36,682 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 04:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:36,682 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:36,683 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:36,683 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:36,683 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:36,684 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:36,684 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:36,684 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:36,684 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:36,685 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:36,778 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:36,837 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:37,068 INFO] src.engine_xgb: XGB Train Acc: 0.5180 | Test Acc: 0.5180
|
|
[2026-05-16 11:34:37,069 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.114336774), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08729512), 'atr_normalized': np.float32(0.09549417), 'prev_log_return': np.float32(0.07222222), 'usdchf_log_return': np.float32(0.37851593), 'xagusd_log_return': np.float32(0.08988638), 'xtiusd_log_return': np.float32(0.078729905), 'synth_vix_zscore': np.float32(0.08351939)}
|
|
[2026-05-16 11:34:37,069 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:34:37,296 INFO] src.engine_xgb: XGB Train Acc: 0.5281 | Test Acc: 0.5281
|
|
[2026-05-16 11:34:37,297 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.083506696), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08590587), 'atr_normalized': np.float32(0.08464632), 'prev_log_return': np.float32(0.07625156), 'usdchf_log_return': np.float32(0.40747482), 'xagusd_log_return': np.float32(0.08555189), 'xtiusd_log_return': np.float32(0.0823332), 'synth_vix_zscore': np.float32(0.09432967)}
|
|
[2026-05-16 11:34:37,297 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:34:37,485 INFO] src.engine_xgb: XGB Train Acc: 0.5178 | Test Acc: 0.5178
|
|
[2026-05-16 11:34:37,486 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09057262), 'gmm_vol_cluster': np.float32(0.07966255), 'rsi_slope': np.float32(0.0826545), 'atr_normalized': np.float32(0.10873149), 'prev_log_return': np.float32(0.06646115), 'usdchf_log_return': np.float32(0.29741126), 'xagusd_log_return': np.float32(0.08151369), 'xtiusd_log_return': np.float32(0.08571168), 'synth_vix_zscore': np.float32(0.10728106)}
|
|
[2026-05-16 11:34:37,486 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:34:37,487 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:37,841 INFO] src.backtester: Backtest [H1]: Sharpe=-8.930 | MaxDD=2.314 | WR=0.238 | Return=-90.0% | Trades=265
|
|
[2026-05-16 11:34:37,842 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:41,906 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:41,907 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:41,907 INFO] src.engine_hmm: Bull 0.9770 0.0013 0.0217
|
|
[2026-05-16 11:34:41,908 INFO] src.engine_hmm: Bear 0.0021 0.9801 0.0178
|
|
[2026-05-16 11:34:41,908 INFO] src.engine_hmm: Chop 0.0053 0.0223 0.9725
|
|
[2026-05-16 11:34:41,909 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:41,909 INFO] src.engine_hmm: Bull: return=0.057428, vol=1.607013, rsi_slope=-0.013742
|
|
[2026-05-16 11:34:41,910 INFO] src.engine_hmm: Bear: return=-0.032998, vol=-0.518112, rsi_slope=0.000005
|
|
[2026-05-16 11:34:41,910 INFO] src.engine_hmm: Chop: return=0.018753, vol=0.060646, rsi_slope=0.004549
|
|
[2026-05-16 11:34:41,911 INFO] src.engine_hmm: Total regime transitions: 1028
|
|
[2026-05-16 11:34:41,913 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:41,914 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:41,915 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:41,915 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:41,916 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:41,916 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:41,918 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:41,918 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:41,918 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Chop
|
|
[2026-05-16 11:34:41,919 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Chop -> Bear
|
|
[2026-05-16 11:34:42,018 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:42,074 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:42,304 INFO] src.engine_xgb: XGB Train Acc: 0.5119 | Test Acc: 0.5119
|
|
[2026-05-16 11:34:42,305 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14211708), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07804855), 'atr_normalized': np.float32(0.08716491), 'prev_log_return': np.float32(0.0804615), 'usdchf_log_return': np.float32(0.3963376), 'xagusd_log_return': np.float32(0.07054176), 'xtiusd_log_return': np.float32(0.07403099), 'synth_vix_zscore': np.float32(0.07129754)}
|
|
[2026-05-16 11:34:42,306 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:34:42,504 INFO] src.engine_xgb: XGB Train Acc: 0.5146 | Test Acc: 0.5146
|
|
[2026-05-16 11:34:42,505 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09566708), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07513575), 'atr_normalized': np.float32(0.093815364), 'prev_log_return': np.float32(0.077702925), 'usdchf_log_return': np.float32(0.3738916), 'xagusd_log_return': np.float32(0.084196776), 'xtiusd_log_return': np.float32(0.082046755), 'synth_vix_zscore': np.float32(0.11754375)}
|
|
[2026-05-16 11:34:42,505 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:34:42,686 INFO] src.engine_xgb: XGB Train Acc: 0.5241 | Test Acc: 0.5241
|
|
[2026-05-16 11:34:42,686 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06789796), 'gmm_vol_cluster': np.float32(0.049805697), 'rsi_slope': np.float32(0.08819162), 'atr_normalized': np.float32(0.09546741), 'prev_log_return': np.float32(0.08653978), 'usdchf_log_return': np.float32(0.32426888), 'xagusd_log_return': np.float32(0.094744906), 'xtiusd_log_return': np.float32(0.10282892), 'synth_vix_zscore': np.float32(0.090254806)}
|
|
[2026-05-16 11:34:42,687 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:34:42,688 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:42,990 INFO] src.backtester: Backtest [H1]: Sharpe=-2.086 | MaxDD=0.595 | WR=0.381 | Return=-43.5% | Trades=113
|
|
[2026-05-16 11:34:42,991 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:46,689 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:46,690 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:46,690 INFO] src.engine_hmm: Bull 0.9736 0.0064 0.0200
|
|
[2026-05-16 11:34:46,690 INFO] src.engine_hmm: Bear 0.0222 0.9772 0.0006
|
|
[2026-05-16 11:34:46,691 INFO] src.engine_hmm: Chop 0.0175 0.0013 0.9812
|
|
[2026-05-16 11:34:46,691 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:46,691 INFO] src.engine_hmm: Bull: return=0.054066, vol=0.044834, rsi_slope=-0.000222
|
|
[2026-05-16 11:34:46,692 INFO] src.engine_hmm: Bear: return=-0.058860, vol=1.617177, rsi_slope=-0.003028
|
|
[2026-05-16 11:34:46,692 INFO] src.engine_hmm: Chop: return=-0.031531, vol=-0.549756, rsi_slope=0.001157
|
|
[2026-05-16 11:34:46,692 INFO] src.engine_hmm: Total regime transitions: 990
|
|
[2026-05-16 11:34:46,693 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:46,693 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 08:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:46,694 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:46,694 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:46,694 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:46,695 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:46,695 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:46,695 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:46,696 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:46,696 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:46,800 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:46,867 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:47,091 INFO] src.engine_xgb: XGB Train Acc: 0.5201 | Test Acc: 0.5201
|
|
[2026-05-16 11:34:47,091 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12068836), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07173202), 'atr_normalized': np.float32(0.082480036), 'prev_log_return': np.float32(0.07664147), 'usdchf_log_return': np.float32(0.4113069), 'xagusd_log_return': np.float32(0.072948836), 'xtiusd_log_return': np.float32(0.06997635), 'synth_vix_zscore': np.float32(0.09422599)}
|
|
[2026-05-16 11:34:47,092 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:34:47,296 INFO] src.engine_xgb: XGB Train Acc: 0.5287 | Test Acc: 0.5287
|
|
[2026-05-16 11:34:47,297 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14165562), 'gmm_vol_cluster': np.float32(0.061278157), 'rsi_slope': np.float32(0.07251449), 'atr_normalized': np.float32(0.07366025), 'prev_log_return': np.float32(0.061979342), 'usdchf_log_return': np.float32(0.33205605), 'xagusd_log_return': np.float32(0.07928793), 'xtiusd_log_return': np.float32(0.07095395), 'synth_vix_zscore': np.float32(0.10661418)}
|
|
[2026-05-16 11:34:47,298 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:34:47,495 INFO] src.engine_xgb: XGB Train Acc: 0.5261 | Test Acc: 0.5261
|
|
[2026-05-16 11:34:47,496 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.095748834), 'gmm_vol_cluster': np.float32(0.07128415), 'rsi_slope': np.float32(0.083786085), 'atr_normalized': np.float32(0.1133741), 'prev_log_return': np.float32(0.07971805), 'usdchf_log_return': np.float32(0.29609683), 'xagusd_log_return': np.float32(0.07662778), 'xtiusd_log_return': np.float32(0.0842014), 'synth_vix_zscore': np.float32(0.099162675)}
|
|
[2026-05-16 11:34:47,496 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:34:47,498 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:47,825 INFO] src.backtester: Backtest [H1]: Sharpe=-4.877 | MaxDD=1.248 | WR=0.247 | Return=-71.1% | Trades=263
|
|
[2026-05-16 11:34:47,826 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:51,650 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:51,650 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:51,651 INFO] src.engine_hmm: Bull 0.9745 0.0058 0.0197
|
|
[2026-05-16 11:34:51,651 INFO] src.engine_hmm: Bear 0.0220 0.9774 0.0006
|
|
[2026-05-16 11:34:51,652 INFO] src.engine_hmm: Chop 0.0169 0.0015 0.9816
|
|
[2026-05-16 11:34:51,652 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:51,653 INFO] src.engine_hmm: Bull: return=0.029368, vol=0.051116, rsi_slope=-0.001052
|
|
[2026-05-16 11:34:51,653 INFO] src.engine_hmm: Bear: return=-0.096074, vol=1.646089, rsi_slope=-0.000167
|
|
[2026-05-16 11:34:51,654 INFO] src.engine_hmm: Chop: return=0.001975, vol=-0.547637, rsi_slope=0.001026
|
|
[2026-05-16 11:34:51,655 INFO] src.engine_hmm: Total regime transitions: 955
|
|
[2026-05-16 11:34:51,656 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:51,656 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:51,657 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:51,658 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:51,658 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:51,659 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:51,660 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:51,660 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:51,661 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:34:51,661 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:34:51,778 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:51,836 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:52,081 INFO] src.engine_xgb: XGB Train Acc: 0.5158 | Test Acc: 0.5158
|
|
[2026-05-16 11:34:52,081 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10193976), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0726558), 'atr_normalized': np.float32(0.07760254), 'prev_log_return': np.float32(0.078285836), 'usdchf_log_return': np.float32(0.45699087), 'xagusd_log_return': np.float32(0.066727996), 'xtiusd_log_return': np.float32(0.06730394), 'synth_vix_zscore': np.float32(0.07849333)}
|
|
[2026-05-16 11:34:52,081 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:34:52,274 INFO] src.engine_xgb: XGB Train Acc: 0.5249 | Test Acc: 0.5249
|
|
[2026-05-16 11:34:52,274 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09973706), 'gmm_vol_cluster': np.float32(0.073403016), 'rsi_slope': np.float32(0.07678079), 'atr_normalized': np.float32(0.07550253), 'prev_log_return': np.float32(0.07865779), 'usdchf_log_return': np.float32(0.3572769), 'xagusd_log_return': np.float32(0.07094592), 'xtiusd_log_return': np.float32(0.07764282), 'synth_vix_zscore': np.float32(0.09005318)}
|
|
[2026-05-16 11:34:52,275 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:34:52,451 INFO] src.engine_xgb: XGB Train Acc: 0.5152 | Test Acc: 0.5152
|
|
[2026-05-16 11:34:52,451 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.086179376), 'gmm_vol_cluster': np.float32(0.083696015), 'rsi_slope': np.float32(0.10017265), 'atr_normalized': np.float32(0.09456261), 'prev_log_return': np.float32(0.07142041), 'usdchf_log_return': np.float32(0.29534492), 'xagusd_log_return': np.float32(0.08336783), 'xtiusd_log_return': np.float32(0.086185716), 'synth_vix_zscore': np.float32(0.09907048)}
|
|
[2026-05-16 11:34:52,452 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:34:52,453 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:52,688 INFO] src.backtester: Backtest [H1]: Sharpe=-4.558 | MaxDD=1.123 | WR=0.274 | Return=-67.2% | Trades=285
|
|
[2026-05-16 11:34:52,688 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:34:57,268 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:34:57,268 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:34:57,268 INFO] src.engine_hmm: Bull 0.9662 0.0243 0.0094
|
|
[2026-05-16 11:34:57,269 INFO] src.engine_hmm: Bear 0.0190 0.9770 0.0040
|
|
[2026-05-16 11:34:57,269 INFO] src.engine_hmm: Chop 0.0245 0.0021 0.9734
|
|
[2026-05-16 11:34:57,269 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:34:57,269 INFO] src.engine_hmm: Bull: return=0.036791, vol=0.021227, rsi_slope=0.001357
|
|
[2026-05-16 11:34:57,271 INFO] src.engine_hmm: Bear: return=-0.032646, vol=-0.700036, rsi_slope=-0.002803
|
|
[2026-05-16 11:34:57,271 INFO] src.engine_hmm: Chop: return=-0.001327, vol=1.446414, rsi_slope=0.003348
|
|
[2026-05-16 11:34:57,272 INFO] src.engine_hmm: Total regime transitions: 1214
|
|
[2026-05-16 11:34:57,272 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:57,273 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:57,273 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:57,274 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:57,274 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:57,275 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:57,275 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:57,276 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:57,276 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:34:57,276 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:34:57,379 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:57,440 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:57,630 INFO] src.engine_xgb: XGB Train Acc: 0.5097 | Test Acc: 0.5097
|
|
[2026-05-16 11:34:57,630 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08270106), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.078449406), 'atr_normalized': np.float32(0.09001444), 'prev_log_return': np.float32(0.08357405), 'usdchf_log_return': np.float32(0.42584756), 'xagusd_log_return': np.float32(0.07449316), 'xtiusd_log_return': np.float32(0.078518555), 'synth_vix_zscore': np.float32(0.08640183)}
|
|
[2026-05-16 11:34:57,630 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:34:57,832 INFO] src.engine_xgb: XGB Train Acc: 0.5136 | Test Acc: 0.5136
|
|
[2026-05-16 11:34:57,833 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11469857), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.074595004), 'atr_normalized': np.float32(0.07645189), 'prev_log_return': np.float32(0.080198936), 'usdchf_log_return': np.float32(0.39282423), 'xagusd_log_return': np.float32(0.083434775), 'xtiusd_log_return': np.float32(0.08009167), 'synth_vix_zscore': np.float32(0.09770494)}
|
|
[2026-05-16 11:34:57,833 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:34:58,046 INFO] src.engine_xgb: XGB Train Acc: 0.5102 | Test Acc: 0.5102
|
|
[2026-05-16 11:34:58,047 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09522107), 'gmm_vol_cluster': np.float32(0.089371994), 'rsi_slope': np.float32(0.08228779), 'atr_normalized': np.float32(0.10189254), 'prev_log_return': np.float32(0.07123815), 'usdchf_log_return': np.float32(0.3140614), 'xagusd_log_return': np.float32(0.07554583), 'xtiusd_log_return': np.float32(0.08684187), 'synth_vix_zscore': np.float32(0.0835394)}
|
|
[2026-05-16 11:34:58,047 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:34:58,048 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:34:58,377 INFO] src.backtester: Backtest [H1]: Sharpe=-4.465 | MaxDD=1.079 | WR=0.380 | Return=-65.9% | Trades=411
|
|
[2026-05-16 11:34:58,378 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:03,476 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:03,476 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:03,477 INFO] src.engine_hmm: Bull 0.9708 0.0049 0.0243
|
|
[2026-05-16 11:35:03,477 INFO] src.engine_hmm: Bear 0.0230 0.9755 0.0015
|
|
[2026-05-16 11:35:03,477 INFO] src.engine_hmm: Chop 0.0183 0.0025 0.9792
|
|
[2026-05-16 11:35:03,478 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:03,478 INFO] src.engine_hmm: Bull: return=0.022251, vol=0.074747, rsi_slope=0.000815
|
|
[2026-05-16 11:35:03,478 INFO] src.engine_hmm: Bear: return=-0.054075, vol=1.674036, rsi_slope=-0.009186
|
|
[2026-05-16 11:35:03,479 INFO] src.engine_hmm: Chop: return=-0.004228, vol=-0.509692, rsi_slope=0.001769
|
|
[2026-05-16 11:35:03,479 INFO] src.engine_hmm: Total regime transitions: 1081
|
|
[2026-05-16 11:35:03,481 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 02:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:03,481 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:03,481 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:03,481 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:03,482 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:03,482 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:03,482 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:03,482 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:03,483 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:03,483 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:03,572 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:03,627 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:03,798 INFO] src.engine_xgb: XGB Train Acc: 0.5087 | Test Acc: 0.5087
|
|
[2026-05-16 11:35:03,798 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14348704), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07302683), 'atr_normalized': np.float32(0.090081386), 'prev_log_return': np.float32(0.077048905), 'usdchf_log_return': np.float32(0.3908718), 'xagusd_log_return': np.float32(0.07824124), 'xtiusd_log_return': np.float32(0.0674765), 'synth_vix_zscore': np.float32(0.07976631)}
|
|
[2026-05-16 11:35:03,798 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:35:03,991 INFO] src.engine_xgb: XGB Train Acc: 0.5190 | Test Acc: 0.5190
|
|
[2026-05-16 11:35:03,992 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08558918), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09178342), 'atr_normalized': np.float32(0.096680194), 'prev_log_return': np.float32(0.089496955), 'usdchf_log_return': np.float32(0.3839102), 'xagusd_log_return': np.float32(0.083697595), 'xtiusd_log_return': np.float32(0.0801371), 'synth_vix_zscore': np.float32(0.08870533)}
|
|
[2026-05-16 11:35:03,992 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:35:04,160 INFO] src.engine_xgb: XGB Train Acc: 0.5206 | Test Acc: 0.5206
|
|
[2026-05-16 11:35:04,161 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09336964), 'gmm_vol_cluster': np.float32(0.08478766), 'rsi_slope': np.float32(0.084244534), 'atr_normalized': np.float32(0.09609986), 'prev_log_return': np.float32(0.07808984), 'usdchf_log_return': np.float32(0.30047202), 'xagusd_log_return': np.float32(0.08554309), 'xtiusd_log_return': np.float32(0.093572825), 'synth_vix_zscore': np.float32(0.08382056)}
|
|
[2026-05-16 11:35:04,161 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:35:04,162 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:04,392 INFO] src.backtester: Backtest [H1]: Sharpe=-3.569 | MaxDD=0.867 | WR=0.292 | Return=-57.9% | Trades=250
|
|
[2026-05-16 11:35:04,393 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:08,984 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:08,984 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:08,984 INFO] src.engine_hmm: Bull 0.9724 0.0056 0.0220
|
|
[2026-05-16 11:35:08,985 INFO] src.engine_hmm: Bear 0.0228 0.9765 0.0008
|
|
[2026-05-16 11:35:08,985 INFO] src.engine_hmm: Chop 0.0172 0.0016 0.9812
|
|
[2026-05-16 11:35:08,985 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:08,985 INFO] src.engine_hmm: Bull: return=0.048776, vol=0.078670, rsi_slope=-0.000157
|
|
[2026-05-16 11:35:08,986 INFO] src.engine_hmm: Bear: return=-0.126231, vol=1.720649, rsi_slope=-0.005043
|
|
[2026-05-16 11:35:08,986 INFO] src.engine_hmm: Chop: return=-0.007178, vol=-0.530876, rsi_slope=0.001494
|
|
[2026-05-16 11:35:08,987 INFO] src.engine_hmm: Total regime transitions: 1007
|
|
[2026-05-16 11:35:08,987 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 02:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:08,988 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:08,989 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:08,990 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:08,991 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:08,991 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:08,992 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:08,993 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:08,993 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:08,993 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:09,087 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:09,143 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:09,355 INFO] src.engine_xgb: XGB Train Acc: 0.5170 | Test Acc: 0.5170
|
|
[2026-05-16 11:35:09,355 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10961727), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07766985), 'atr_normalized': np.float32(0.0844334), 'prev_log_return': np.float32(0.07570303), 'usdchf_log_return': np.float32(0.3927542), 'xagusd_log_return': np.float32(0.08598671), 'xtiusd_log_return': np.float32(0.08441966), 'synth_vix_zscore': np.float32(0.08941595)}
|
|
[2026-05-16 11:35:09,356 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:35:09,551 INFO] src.engine_xgb: XGB Train Acc: 0.5295 | Test Acc: 0.5295
|
|
[2026-05-16 11:35:09,552 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.074444644), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10054519), 'atr_normalized': np.float32(0.09720758), 'prev_log_return': np.float32(0.09023632), 'usdchf_log_return': np.float32(0.36081725), 'xagusd_log_return': np.float32(0.09271455), 'xtiusd_log_return': np.float32(0.09151774), 'synth_vix_zscore': np.float32(0.09251672)}
|
|
[2026-05-16 11:35:09,552 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:35:09,745 INFO] src.engine_xgb: XGB Train Acc: 0.5257 | Test Acc: 0.5257
|
|
[2026-05-16 11:35:09,745 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08170107), 'gmm_vol_cluster': np.float32(0.054968413), 'rsi_slope': np.float32(0.08145274), 'atr_normalized': np.float32(0.11181788), 'prev_log_return': np.float32(0.07637169), 'usdchf_log_return': np.float32(0.31374377), 'xagusd_log_return': np.float32(0.08637914), 'xtiusd_log_return': np.float32(0.07735214), 'synth_vix_zscore': np.float32(0.116213135)}
|
|
[2026-05-16 11:35:09,746 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:35:09,747 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:10,038 INFO] src.backtester: Backtest [H1]: Sharpe=-3.793 | MaxDD=0.806 | WR=0.311 | Return=-54.7% | Trades=212
|
|
[2026-05-16 11:35:10,038 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:15,405 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:15,405 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:15,405 INFO] src.engine_hmm: Bull 0.9813 0.0021 0.0166
|
|
[2026-05-16 11:35:15,405 INFO] src.engine_hmm: Bear 0.0009 0.9763 0.0228
|
|
[2026-05-16 11:35:15,406 INFO] src.engine_hmm: Chop 0.0219 0.0052 0.9730
|
|
[2026-05-16 11:35:15,406 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:15,406 INFO] src.engine_hmm: Bull: return=0.026302, vol=-0.528332, rsi_slope=-0.001499
|
|
[2026-05-16 11:35:15,406 INFO] src.engine_hmm: Bear: return=-0.177713, vol=1.726210, rsi_slope=-0.003115
|
|
[2026-05-16 11:35:15,406 INFO] src.engine_hmm: Chop: return=0.025400, vol=0.076978, rsi_slope=0.002771
|
|
[2026-05-16 11:35:15,407 INFO] src.engine_hmm: Total regime transitions: 980
|
|
[2026-05-16 11:35:15,407 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 02:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:15,407 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:35:15,408 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:15,410 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:15,410 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:15,501 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:15,554 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:15,742 INFO] src.engine_xgb: XGB Train Acc: 0.5163 | Test Acc: 0.5163
|
|
[2026-05-16 11:35:15,742 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08517418), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.091107786), 'atr_normalized': np.float32(0.09552583), 'prev_log_return': np.float32(0.08208193), 'usdchf_log_return': np.float32(0.3984763), 'xagusd_log_return': np.float32(0.088326156), 'xtiusd_log_return': np.float32(0.073020786), 'synth_vix_zscore': np.float32(0.08628707)}
|
|
[2026-05-16 11:35:15,743 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:35:15,941 INFO] src.engine_xgb: XGB Train Acc: 0.5210 | Test Acc: 0.5210
|
|
[2026-05-16 11:35:15,942 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.054081462), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.099032365), 'atr_normalized': np.float32(0.08444149), 'prev_log_return': np.float32(0.09421423), 'usdchf_log_return': np.float32(0.3884389), 'xagusd_log_return': np.float32(0.08536585), 'xtiusd_log_return': np.float32(0.094184965), 'synth_vix_zscore': np.float32(0.100240655)}
|
|
[2026-05-16 11:35:15,942 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:35:16,156 INFO] src.engine_xgb: XGB Train Acc: 0.5159 | Test Acc: 0.5159
|
|
[2026-05-16 11:35:16,157 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0738224), 'gmm_vol_cluster': np.float32(0.07878224), 'rsi_slope': np.float32(0.084122546), 'atr_normalized': np.float32(0.108856186), 'prev_log_return': np.float32(0.07058608), 'usdchf_log_return': np.float32(0.31868997), 'xagusd_log_return': np.float32(0.076804005), 'xtiusd_log_return': np.float32(0.08788849), 'synth_vix_zscore': np.float32(0.10044809)}
|
|
[2026-05-16 11:35:16,157 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:35:16,159 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:16,551 INFO] src.backtester: Backtest [H1]: Sharpe=-8.237 | MaxDD=2.056 | WR=0.291 | Return=-87.0% | Trades=306
|
|
[2026-05-16 11:35:16,552 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:21,531 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:21,531 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:21,532 INFO] src.engine_hmm: Bull 0.9652 0.0091 0.0257
|
|
[2026-05-16 11:35:21,532 INFO] src.engine_hmm: Bear 0.0270 0.9706 0.0024
|
|
[2026-05-16 11:35:21,533 INFO] src.engine_hmm: Chop 0.0194 0.0055 0.9752
|
|
[2026-05-16 11:35:21,533 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:21,534 INFO] src.engine_hmm: Bull: return=0.012474, vol=0.017233, rsi_slope=0.001676
|
|
[2026-05-16 11:35:21,534 INFO] src.engine_hmm: Bear: return=-0.045241, vol=1.435978, rsi_slope=0.002405
|
|
[2026-05-16 11:35:21,535 INFO] src.engine_hmm: Chop: return=0.009831, vol=-0.693969, rsi_slope=-0.002685
|
|
[2026-05-16 11:35:21,536 INFO] src.engine_hmm: Total regime transitions: 1284
|
|
[2026-05-16 11:35:21,537 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:21,537 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:21,538 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:21,539 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:21,539 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:21,540 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:21,540 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:21,541 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:21,541 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:21,542 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:21,640 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:21,696 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:21,910 INFO] src.engine_xgb: XGB Train Acc: 0.5082 | Test Acc: 0.5082
|
|
[2026-05-16 11:35:21,911 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09309703), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07758849), 'atr_normalized': np.float32(0.08672947), 'prev_log_return': np.float32(0.08425375), 'usdchf_log_return': np.float32(0.41922098), 'xagusd_log_return': np.float32(0.08640678), 'xtiusd_log_return': np.float32(0.06996762), 'synth_vix_zscore': np.float32(0.082735896)}
|
|
[2026-05-16 11:35:21,912 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:35:22,124 INFO] src.engine_xgb: XGB Train Acc: 0.5125 | Test Acc: 0.5125
|
|
[2026-05-16 11:35:22,125 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11046577), 'gmm_vol_cluster': np.float32(0.083898), 'rsi_slope': np.float32(0.08550498), 'atr_normalized': np.float32(0.08214654), 'prev_log_return': np.float32(0.081363365), 'usdchf_log_return': np.float32(0.33091483), 'xagusd_log_return': np.float32(0.06815974), 'xtiusd_log_return': np.float32(0.07421633), 'synth_vix_zscore': np.float32(0.08333041)}
|
|
[2026-05-16 11:35:22,125 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:35:22,308 INFO] src.engine_xgb: XGB Train Acc: 0.5101 | Test Acc: 0.5101
|
|
[2026-05-16 11:35:22,308 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07544356), 'gmm_vol_cluster': np.float32(0.05831165), 'rsi_slope': np.float32(0.09371247), 'atr_normalized': np.float32(0.1212108), 'prev_log_return': np.float32(0.07781617), 'usdchf_log_return': np.float32(0.31885767), 'xagusd_log_return': np.float32(0.08557117), 'xtiusd_log_return': np.float32(0.078534), 'synth_vix_zscore': np.float32(0.0905425)}
|
|
[2026-05-16 11:35:22,309 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:35:22,310 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:22,570 INFO] src.backtester: Backtest [H1]: Sharpe=-3.543 | MaxDD=0.740 | WR=0.343 | Return=-52.3% | Trades=312
|
|
[2026-05-16 11:35:22,570 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:26,763 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:26,763 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:26,764 INFO] src.engine_hmm: Bull 0.9733 0.0214 0.0052
|
|
[2026-05-16 11:35:26,764 INFO] src.engine_hmm: Bear 0.0181 0.9804 0.0014
|
|
[2026-05-16 11:35:26,764 INFO] src.engine_hmm: Chop 0.0214 0.0011 0.9775
|
|
[2026-05-16 11:35:26,765 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:26,765 INFO] src.engine_hmm: Bull: return=0.050417, vol=0.060357, rsi_slope=0.005165
|
|
[2026-05-16 11:35:26,766 INFO] src.engine_hmm: Bear: return=-0.057713, vol=-0.511121, rsi_slope=0.000805
|
|
[2026-05-16 11:35:26,767 INFO] src.engine_hmm: Chop: return=0.045554, vol=1.682744, rsi_slope=-0.020079
|
|
[2026-05-16 11:35:26,768 INFO] src.engine_hmm: Total regime transitions: 985
|
|
[2026-05-16 11:35:26,769 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:26,769 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:26,770 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:26,770 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:26,772 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:26,772 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:26,772 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:26,773 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:26,773 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-06 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:26,774 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-09 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:26,847 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:26,900 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:27,078 WARNING] src.engine_xgb: hmm_state importance=0: XGBoost ignores the HMM regime. The regime-aligned filter gates signals on a feature XGB deems uninformative — likely caused by heavy regularisation or n_states=2. Consider re-optimising with n_states>=3 or lower reg_alpha/gamma.
|
|
[2026-05-16 11:35:27,078 INFO] src.engine_xgb: XGB Train Acc: 0.5145 | Test Acc: 0.5145
|
|
[2026-05-16 11:35:27,079 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09034088), 'atr_normalized': np.float32(0.08998123), 'prev_log_return': np.float32(0.091993496), 'usdchf_log_return': np.float32(0.46270606), 'xagusd_log_return': np.float32(0.090036646), 'xtiusd_log_return': np.float32(0.08227323), 'synth_vix_zscore': np.float32(0.09266842)}
|
|
[2026-05-16 11:35:27,079 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:35:27,211 INFO] src.engine_xgb: XGB Train Acc: 0.5176 | Test Acc: 0.5176
|
|
[2026-05-16 11:35:27,211 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1350771), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.079406805), 'atr_normalized': np.float32(0.09049047), 'prev_log_return': np.float32(0.07897083), 'usdchf_log_return': np.float32(0.35484076), 'xagusd_log_return': np.float32(0.08393667), 'xtiusd_log_return': np.float32(0.08214702), 'synth_vix_zscore': np.float32(0.09513035)}
|
|
[2026-05-16 11:35:27,211 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:35:27,343 INFO] src.engine_xgb: XGB Train Acc: 0.5256 | Test Acc: 0.5256
|
|
[2026-05-16 11:35:27,344 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11542431), 'gmm_vol_cluster': np.float32(0.076064765), 'rsi_slope': np.float32(0.07073522), 'atr_normalized': np.float32(0.09903322), 'prev_log_return': np.float32(0.07437495), 'usdchf_log_return': np.float32(0.32013384), 'xagusd_log_return': np.float32(0.084537305), 'xtiusd_log_return': np.float32(0.087523825), 'synth_vix_zscore': np.float32(0.072172575)}
|
|
[2026-05-16 11:35:27,344 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:35:27,345 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:27,572 INFO] src.backtester: Backtest [H1]: Sharpe=-4.428 | MaxDD=1.346 | WR=0.317 | Return=-72.6% | Trades=325
|
|
[2026-05-16 11:35:27,572 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:29,818 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:29,818 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:29,818 INFO] src.engine_hmm: Bull 0.9748 0.0206 0.0046
|
|
[2026-05-16 11:35:29,819 INFO] src.engine_hmm: Bear 0.0165 0.9818 0.0017
|
|
[2026-05-16 11:35:29,819 INFO] src.engine_hmm: Chop 0.0209 0.0011 0.9780
|
|
[2026-05-16 11:35:29,819 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:29,819 INFO] src.engine_hmm: Bull: return=0.047966, vol=0.072646, rsi_slope=0.003176
|
|
[2026-05-16 11:35:29,819 INFO] src.engine_hmm: Bear: return=-0.034684, vol=-0.505808, rsi_slope=-0.001066
|
|
[2026-05-16 11:35:29,820 INFO] src.engine_hmm: Chop: return=-0.027514, vol=1.717228, rsi_slope=-0.006598
|
|
[2026-05-16 11:35:29,820 INFO] src.engine_hmm: Total regime transitions: 943
|
|
[2026-05-16 11:35:29,820 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:29,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:29,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:29,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:29,821 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:29,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:29,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:29,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:29,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:29,822 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-18 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:29,882 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:29,925 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:30,076 INFO] src.engine_xgb: XGB Train Acc: 0.5135 | Test Acc: 0.5135
|
|
[2026-05-16 11:35:30,076 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09835692), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.072110735), 'atr_normalized': np.float32(0.07995845), 'prev_log_return': np.float32(0.07775006), 'usdchf_log_return': np.float32(0.4434666), 'xagusd_log_return': np.float32(0.08238477), 'xtiusd_log_return': np.float32(0.069001675), 'synth_vix_zscore': np.float32(0.07697076)}
|
|
[2026-05-16 11:35:30,076 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:35:30,210 INFO] src.engine_xgb: XGB Train Acc: 0.5112 | Test Acc: 0.5112
|
|
[2026-05-16 11:35:30,210 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.15594865), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08606854), 'atr_normalized': np.float32(0.082034975), 'prev_log_return': np.float32(0.07665684), 'usdchf_log_return': np.float32(0.34780684), 'xagusd_log_return': np.float32(0.07426067), 'xtiusd_log_return': np.float32(0.07703894), 'synth_vix_zscore': np.float32(0.100184515)}
|
|
[2026-05-16 11:35:30,211 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:35:30,333 INFO] src.engine_xgb: XGB Train Acc: 0.5154 | Test Acc: 0.5154
|
|
[2026-05-16 11:35:30,333 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06746546), 'gmm_vol_cluster': np.float32(0.075134486), 'rsi_slope': np.float32(0.09036765), 'atr_normalized': np.float32(0.08797685), 'prev_log_return': np.float32(0.074878134), 'usdchf_log_return': np.float32(0.35205886), 'xagusd_log_return': np.float32(0.08334817), 'xtiusd_log_return': np.float32(0.08937343), 'synth_vix_zscore': np.float32(0.07939694)}
|
|
[2026-05-16 11:35:30,333 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:35:30,334 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:30,555 INFO] src.backtester: Backtest [H1]: Sharpe=-3.923 | MaxDD=1.183 | WR=0.318 | Return=-68.0% | Trades=384
|
|
[2026-05-16 11:35:30,556 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:33,501 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:33,502 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:33,502 INFO] src.engine_hmm: Bull 0.9677 0.0031 0.0292
|
|
[2026-05-16 11:35:33,502 INFO] src.engine_hmm: Bear 0.0052 0.9758 0.0190
|
|
[2026-05-16 11:35:33,502 INFO] src.engine_hmm: Chop 0.0096 0.0252 0.9652
|
|
[2026-05-16 11:35:33,502 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:33,503 INFO] src.engine_hmm: Bull: return=0.052438, vol=1.506410, rsi_slope=0.000381
|
|
[2026-05-16 11:35:33,503 INFO] src.engine_hmm: Bear: return=-0.037549, vol=-0.716318, rsi_slope=-0.002417
|
|
[2026-05-16 11:35:33,504 INFO] src.engine_hmm: Chop: return=0.016568, vol=0.076256, rsi_slope=0.002486
|
|
[2026-05-16 11:35:33,504 INFO] src.engine_hmm: Total regime transitions: 1309
|
|
[2026-05-16 11:35:33,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:33,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:33,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:33,505 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:33,506 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:33,506 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:33,506 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:33,506 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:33,507 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:35:33,507 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:33,567 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:33,606 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:33,751 INFO] src.engine_xgb: XGB Train Acc: 0.5095 | Test Acc: 0.5095
|
|
[2026-05-16 11:35:33,752 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.06984429), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07216186), 'atr_normalized': np.float32(0.072183385), 'prev_log_return': np.float32(0.06963895), 'usdchf_log_return': np.float32(0.4765814), 'xagusd_log_return': np.float32(0.07771908), 'xtiusd_log_return': np.float32(0.06999128), 'synth_vix_zscore': np.float32(0.09187971)}
|
|
[2026-05-16 11:35:33,752 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:35:33,887 INFO] src.engine_xgb: XGB Train Acc: 0.5048 | Test Acc: 0.5048
|
|
[2026-05-16 11:35:33,887 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08975361), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09008286), 'atr_normalized': np.float32(0.10011224), 'prev_log_return': np.float32(0.07893876), 'usdchf_log_return': np.float32(0.3743913), 'xagusd_log_return': np.float32(0.08846649), 'xtiusd_log_return': np.float32(0.07845447), 'synth_vix_zscore': np.float32(0.09980027)}
|
|
[2026-05-16 11:35:33,888 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:35:34,023 INFO] src.engine_xgb: XGB Train Acc: 0.5037 | Test Acc: 0.5037
|
|
[2026-05-16 11:35:34,023 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08505305), 'gmm_vol_cluster': np.float32(0.08523695), 'rsi_slope': np.float32(0.0750447), 'atr_normalized': np.float32(0.07558157), 'prev_log_return': np.float32(0.06743396), 'usdchf_log_return': np.float32(0.3851417), 'xagusd_log_return': np.float32(0.07100311), 'xtiusd_log_return': np.float32(0.07767912), 'synth_vix_zscore': np.float32(0.077825874)}
|
|
[2026-05-16 11:35:34,024 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:35:34,024 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:34,245 INFO] src.backtester: Backtest [H1]: Sharpe=-2.878 | MaxDD=1.504 | WR=0.381 | Return=-76.5% | Trades=423
|
|
[2026-05-16 11:35:34,245 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:36,215 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Bull 0.9755 0.0056 0.0189
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Bear 0.0210 0.9786 0.0005
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Chop 0.0162 0.0011 0.9827
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Bull: return=0.072390, vol=0.054316, rsi_slope=-0.001661
|
|
[2026-05-16 11:35:36,216 INFO] src.engine_hmm: Bear: return=-0.130084, vol=1.697500, rsi_slope=0.003798
|
|
[2026-05-16 11:35:36,218 INFO] src.engine_hmm: Chop: return=-0.028248, vol=-0.537498, rsi_slope=0.000414
|
|
[2026-05-16 11:35:36,218 INFO] src.engine_hmm: Total regime transitions: 913
|
|
[2026-05-16 11:35:36,218 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:36,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:36,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:36,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:36,219 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:36,220 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:36,220 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:36,220 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:35:36,220 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-25 04:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:36,221 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:36,285 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:36,326 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:36,468 INFO] src.engine_xgb: XGB Train Acc: 0.5210 | Test Acc: 0.5210
|
|
[2026-05-16 11:35:36,468 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11285006), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.070794255), 'atr_normalized': np.float32(0.075077675), 'prev_log_return': np.float32(0.075926706), 'usdchf_log_return': np.float32(0.43558002), 'xagusd_log_return': np.float32(0.0804712), 'xtiusd_log_return': np.float32(0.065482765), 'synth_vix_zscore': np.float32(0.083817296)}
|
|
[2026-05-16 11:35:36,469 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:35:36,603 INFO] src.engine_xgb: XGB Train Acc: 0.5216 | Test Acc: 0.5216
|
|
[2026-05-16 11:35:36,603 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.24839456), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07255149), 'atr_normalized': np.float32(0.077396184), 'prev_log_return': np.float32(0.0700377), 'usdchf_log_return': np.float32(0.30268446), 'xagusd_log_return': np.float32(0.07863944), 'xtiusd_log_return': np.float32(0.06412568), 'synth_vix_zscore': np.float32(0.08617052)}
|
|
[2026-05-16 11:35:36,604 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:35:36,742 INFO] src.engine_xgb: XGB Train Acc: 0.5209 | Test Acc: 0.5209
|
|
[2026-05-16 11:35:36,743 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.097006194), 'gmm_vol_cluster': np.float32(0.055473596), 'rsi_slope': np.float32(0.084803484), 'atr_normalized': np.float32(0.10718239), 'prev_log_return': np.float32(0.08034782), 'usdchf_log_return': np.float32(0.31658912), 'xagusd_log_return': np.float32(0.07555275), 'xtiusd_log_return': np.float32(0.08311512), 'synth_vix_zscore': np.float32(0.09992956)}
|
|
[2026-05-16 11:35:36,743 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:35:36,744 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:36,978 INFO] src.backtester: Backtest [H1]: Sharpe=-4.913 | MaxDD=1.307 | WR=0.280 | Return=-72.8% | Trades=339
|
|
[2026-05-16 11:35:36,979 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:38,947 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:38,948 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:38,948 INFO] src.engine_hmm: Bull 0.9668 0.0229 0.0103
|
|
[2026-05-16 11:35:38,949 INFO] src.engine_hmm: Bear 0.0188 0.9776 0.0036
|
|
[2026-05-16 11:35:38,949 INFO] src.engine_hmm: Chop 0.0254 0.0013 0.9733
|
|
[2026-05-16 11:35:38,949 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:38,949 INFO] src.engine_hmm: Bull: return=0.041338, vol=-0.004252, rsi_slope=0.006154
|
|
[2026-05-16 11:35:38,950 INFO] src.engine_hmm: Bear: return=-0.050361, vol=-0.704893, rsi_slope=-0.004011
|
|
[2026-05-16 11:35:38,950 INFO] src.engine_hmm: Chop: return=0.022328, vol=1.419158, rsi_slope=-0.003655
|
|
[2026-05-16 11:35:38,951 INFO] src.engine_hmm: Total regime transitions: 1213
|
|
[2026-05-16 11:35:38,951 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:38,952 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:38,952 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:38,953 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:38,955 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:38,955 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:38,956 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:38,956 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:38,956 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:38,957 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:39,031 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:39,074 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:39,322 INFO] src.engine_xgb: XGB Train Acc: 0.5149 | Test Acc: 0.5149
|
|
[2026-05-16 11:35:39,323 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09156467), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.071471006), 'atr_normalized': np.float32(0.07064877), 'prev_log_return': np.float32(0.08651155), 'usdchf_log_return': np.float32(0.44541895), 'xagusd_log_return': np.float32(0.0752918), 'xtiusd_log_return': np.float32(0.07045405), 'synth_vix_zscore': np.float32(0.08863919)}
|
|
[2026-05-16 11:35:39,323 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:35:39,542 INFO] src.engine_xgb: XGB Train Acc: 0.5142 | Test Acc: 0.5142
|
|
[2026-05-16 11:35:39,543 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11467491), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08414889), 'atr_normalized': np.float32(0.09633159), 'prev_log_return': np.float32(0.078121156), 'usdchf_log_return': np.float32(0.37435243), 'xagusd_log_return': np.float32(0.08904265), 'xtiusd_log_return': np.float32(0.07392608), 'synth_vix_zscore': np.float32(0.089402296)}
|
|
[2026-05-16 11:35:39,543 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:35:39,781 INFO] src.engine_xgb: XGB Train Acc: 0.5130 | Test Acc: 0.5130
|
|
[2026-05-16 11:35:39,782 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.056814957), 'gmm_vol_cluster': np.float32(0.058082353), 'rsi_slope': np.float32(0.08935285), 'atr_normalized': np.float32(0.10720637), 'prev_log_return': np.float32(0.07428933), 'usdchf_log_return': np.float32(0.352819), 'xagusd_log_return': np.float32(0.085215494), 'xtiusd_log_return': np.float32(0.08401182), 'synth_vix_zscore': np.float32(0.092207864)}
|
|
[2026-05-16 11:35:39,782 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:35:39,785 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:40,109 INFO] src.backtester: Backtest [H1]: Sharpe=-5.226 | MaxDD=1.306 | WR=0.334 | Return=-72.9% | Trades=419
|
|
[2026-05-16 11:35:40,109 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:42,930 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:42,930 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:42,930 INFO] src.engine_hmm: Bull 0.9670 0.0097 0.0233
|
|
[2026-05-16 11:35:42,931 INFO] src.engine_hmm: Bear 0.0264 0.9720 0.0015
|
|
[2026-05-16 11:35:42,931 INFO] src.engine_hmm: Chop 0.0180 0.0037 0.9783
|
|
[2026-05-16 11:35:42,931 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:42,931 INFO] src.engine_hmm: Bull: return=0.059049, vol=0.028088, rsi_slope=0.000943
|
|
[2026-05-16 11:35:42,932 INFO] src.engine_hmm: Bear: return=-0.082942, vol=1.466504, rsi_slope=0.009107
|
|
[2026-05-16 11:35:42,932 INFO] src.engine_hmm: Chop: return=-0.016298, vol=-0.676643, rsi_slope=-0.004894
|
|
[2026-05-16 11:35:42,933 INFO] src.engine_hmm: Total regime transitions: 1204
|
|
[2026-05-16 11:35:42,933 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:42,934 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:42,934 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:42,935 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:42,935 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:42,936 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 05:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:42,936 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:42,936 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:42,937 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:42,937 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:43,005 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:43,046 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:43,245 WARNING] src.engine_xgb: hmm_state importance=0: XGBoost ignores the HMM regime. The regime-aligned filter gates signals on a feature XGB deems uninformative — likely caused by heavy regularisation or n_states=2. Consider re-optimising with n_states>=3 or lower reg_alpha/gamma.
|
|
[2026-05-16 11:35:43,245 INFO] src.engine_xgb: XGB Train Acc: 0.5122 | Test Acc: 0.5122
|
|
[2026-05-16 11:35:43,246 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08306322), 'atr_normalized': np.float32(0.09039026), 'prev_log_return': np.float32(0.09912332), 'usdchf_log_return': np.float32(0.47232872), 'xagusd_log_return': np.float32(0.09334859), 'xtiusd_log_return': np.float32(0.07327786), 'synth_vix_zscore': np.float32(0.088468)}
|
|
[2026-05-16 11:35:43,246 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:35:43,436 INFO] src.engine_xgb: XGB Train Acc: 0.5094 | Test Acc: 0.5094
|
|
[2026-05-16 11:35:43,438 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1504273), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07780043), 'atr_normalized': np.float32(0.082531504), 'prev_log_return': np.float32(0.0769972), 'usdchf_log_return': np.float32(0.35626358), 'xagusd_log_return': np.float32(0.073330015), 'xtiusd_log_return': np.float32(0.08583787), 'synth_vix_zscore': np.float32(0.09681205)}
|
|
[2026-05-16 11:35:43,438 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:35:43,610 INFO] src.engine_xgb: XGB Train Acc: 0.5014 | Test Acc: 0.5014
|
|
[2026-05-16 11:35:43,610 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.111040205), 'gmm_vol_cluster': np.float32(0.058066826), 'rsi_slope': np.float32(0.08858312), 'atr_normalized': np.float32(0.08457447), 'prev_log_return': np.float32(0.06544274), 'usdchf_log_return': np.float32(0.3622568), 'xagusd_log_return': np.float32(0.07317759), 'xtiusd_log_return': np.float32(0.07597764), 'synth_vix_zscore': np.float32(0.08088058)}
|
|
[2026-05-16 11:35:43,611 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:35:43,612 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:43,877 INFO] src.backtester: Backtest [H1]: Sharpe=-4.478 | MaxDD=1.105 | WR=0.349 | Return=-66.8% | Trades=510
|
|
[2026-05-16 11:35:43,877 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:43,898 WARNING] src.optimizer: CPCV [H1]: only 0 valid paths — rejecting trial.
|
|
[2026-05-16 11:35:43,951 INFO] src.optimizer: Trial 7 [H1/headway_cent]: score=-50.000 | valid_paths=0/15 | std_sharpe=0.000 | median_trades=312
|
|
Best trial: 1. Best value: -50: 6%|████▋ | 8/130 [12:01<3:05:35, 91.28s/it][2026-05-16 11:35:47,219 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:47,219 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:47,219 INFO] src.engine_hmm: Bull 0.9817 0.0023 0.0159
|
|
[2026-05-16 11:35:47,219 INFO] src.engine_hmm: Bear 0.0008 0.9735 0.0257
|
|
[2026-05-16 11:35:47,220 INFO] src.engine_hmm: Chop 0.0244 0.0056 0.9700
|
|
[2026-05-16 11:35:47,220 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:47,220 INFO] src.engine_hmm: Bull: return=0.052147, vol=-0.512788, rsi_slope=0.001968
|
|
[2026-05-16 11:35:47,220 INFO] src.engine_hmm: Bear: return=-0.178724, vol=1.756302, rsi_slope=-0.013622
|
|
[2026-05-16 11:35:47,220 INFO] src.engine_hmm: Chop: return=-0.011707, vol=0.115519, rsi_slope=0.001820
|
|
[2026-05-16 11:35:47,221 INFO] src.engine_hmm: Total regime transitions: 1028
|
|
[2026-05-16 11:35:47,221 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 04:00:00: Chop -> Bear
|
|
[2026-05-16 11:35:47,221 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-08 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:47,222 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-09 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:47,222 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-12 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:47,222 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-13 16:00:00: Chop -> Bear
|
|
[2026-05-16 11:35:47,222 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-14 14:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:47,224 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-20 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:47,224 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-23 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:47,224 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-26 21:00:00: Bear -> Chop
|
|
[2026-05-16 11:35:47,225 INFO] src.engine_hmm: REGIME CHANGE at 2019-08-27 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:47,287 INFO] src.engine_xgb: Features prepared: 38912 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:47,328 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:47,472 INFO] src.engine_xgb: XGB Train Acc: 0.5130 | Test Acc: 0.5130
|
|
[2026-05-16 11:35:47,472 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1094814), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09376887), 'atr_normalized': np.float32(0.101109125), 'prev_log_return': np.float32(0.09303317), 'usdchf_log_return': np.float32(0.32142597), 'xagusd_log_return': np.float32(0.09998108), 'xtiusd_log_return': np.float32(0.09001214), 'synth_vix_zscore': np.float32(0.09118829)}
|
|
[2026-05-16 11:35:47,473 INFO] src.engine_xgb: Trained vol-bucket 'low': 12841 samples.
|
|
[2026-05-16 11:35:47,599 INFO] src.engine_xgb: XGB Train Acc: 0.5160 | Test Acc: 0.5160
|
|
[2026-05-16 11:35:47,599 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0832249), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10231248), 'atr_normalized': np.float32(0.101474494), 'prev_log_return': np.float32(0.08821074), 'usdchf_log_return': np.float32(0.31353948), 'xagusd_log_return': np.float32(0.095729776), 'xtiusd_log_return': np.float32(0.10473756), 'synth_vix_zscore': np.float32(0.11077058)}
|
|
[2026-05-16 11:35:47,600 INFO] src.engine_xgb: Trained vol-bucket 'med': 12841 samples.
|
|
[2026-05-16 11:35:47,729 INFO] src.engine_xgb: XGB Train Acc: 0.5055 | Test Acc: 0.5055
|
|
[2026-05-16 11:35:47,730 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11275882), 'gmm_vol_cluster': np.float32(0.094843954), 'rsi_slope': np.float32(0.088078946), 'atr_normalized': np.float32(0.10468762), 'prev_log_return': np.float32(0.08631175), 'usdchf_log_return': np.float32(0.23256457), 'xagusd_log_return': np.float32(0.08812491), 'xtiusd_log_return': np.float32(0.08759219), 'synth_vix_zscore': np.float32(0.105037294)}
|
|
[2026-05-16 11:35:47,730 INFO] src.engine_xgb: Trained vol-bucket 'high': 13231 samples.
|
|
[2026-05-16 11:35:47,731 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12841, 'med': 12841, 'high': 13231} thresholds=(-0.38484, 0.24583) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:47,938 INFO] src.backtester: Backtest [H1]: Sharpe=0.772 | MaxDD=0.030 | WR=0.421 | Return=7.4% | Trades=38
|
|
[2026-05-16 11:35:47,938 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:49,952 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:49,952 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:49,952 INFO] src.engine_hmm: Bull 0.9720 0.0225 0.0055
|
|
[2026-05-16 11:35:49,953 INFO] src.engine_hmm: Bear 0.0179 0.9798 0.0023
|
|
[2026-05-16 11:35:49,953 INFO] src.engine_hmm: Chop 0.0235 0.0013 0.9752
|
|
[2026-05-16 11:35:49,953 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:49,953 INFO] src.engine_hmm: Bull: return=0.018889, vol=0.062831, rsi_slope=0.004640
|
|
[2026-05-16 11:35:49,954 INFO] src.engine_hmm: Bear: return=-0.021303, vol=-0.518428, rsi_slope=-0.000193
|
|
[2026-05-16 11:35:49,954 INFO] src.engine_hmm: Chop: return=0.016438, vol=1.628293, rsi_slope=-0.013684
|
|
[2026-05-16 11:35:49,954 INFO] src.engine_hmm: Total regime transitions: 1050
|
|
[2026-05-16 11:35:49,955 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:49,955 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 11:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:49,955 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:49,955 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:49,956 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:49,956 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 17:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:49,956 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:49,956 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:49,957 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:49,957 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:50,018 INFO] src.engine_xgb: Features prepared: 38864 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:50,053 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:50,206 INFO] src.engine_xgb: XGB Train Acc: 0.5289 | Test Acc: 0.5289
|
|
[2026-05-16 11:35:50,207 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1453562), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0928642), 'atr_normalized': np.float32(0.09249037), 'prev_log_return': np.float32(0.099686116), 'usdchf_log_return': np.float32(0.3265769), 'xagusd_log_return': np.float32(0.07857717), 'xtiusd_log_return': np.float32(0.0840062), 'synth_vix_zscore': np.float32(0.08044293)}
|
|
[2026-05-16 11:35:50,207 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:35:50,523 INFO] src.engine_xgb: XGB Train Acc: 0.5193 | Test Acc: 0.5193
|
|
[2026-05-16 11:35:50,524 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09225967), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.089494154), 'atr_normalized': np.float32(0.10161551), 'prev_log_return': np.float32(0.08853562), 'usdchf_log_return': np.float32(0.31827945), 'xagusd_log_return': np.float32(0.09698021), 'xtiusd_log_return': np.float32(0.09836006), 'synth_vix_zscore': np.float32(0.11447528)}
|
|
[2026-05-16 11:35:50,524 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:35:50,695 INFO] src.engine_xgb: XGB Train Acc: 0.5030 | Test Acc: 0.5030
|
|
[2026-05-16 11:35:50,696 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.104454085), 'gmm_vol_cluster': np.float32(0.07122373), 'rsi_slope': np.float32(0.08986851), 'atr_normalized': np.float32(0.095578894), 'prev_log_return': np.float32(0.09357012), 'usdchf_log_return': np.float32(0.2756333), 'xagusd_log_return': np.float32(0.09400952), 'xtiusd_log_return': np.float32(0.08639125), 'synth_vix_zscore': np.float32(0.08927065)}
|
|
[2026-05-16 11:35:50,696 INFO] src.engine_xgb: Trained vol-bucket 'high': 13214 samples.
|
|
[2026-05-16 11:35:50,697 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13214} thresholds=(-0.34113, 0.53818) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:50,975 INFO] src.backtester: Backtest [H1]: Sharpe=-6.348 | MaxDD=1.301 | WR=0.298 | Return=-72.0% | Trades=667
|
|
[2026-05-16 11:35:50,976 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:52,876 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:52,876 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: Bull 0.9731 0.0065 0.0205
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: Bear 0.0234 0.9760 0.0006
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: Chop 0.0175 0.0015 0.9810
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: Bull: return=0.040665, vol=0.052567, rsi_slope=-0.000448
|
|
[2026-05-16 11:35:52,877 INFO] src.engine_hmm: Bear: return=-0.056865, vol=1.639080, rsi_slope=-0.003329
|
|
[2026-05-16 11:35:52,878 INFO] src.engine_hmm: Chop: return=-0.019833, vol=-0.547553, rsi_slope=0.001424
|
|
[2026-05-16 11:35:52,878 INFO] src.engine_hmm: Total regime transitions: 991
|
|
[2026-05-16 11:35:52,878 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:52,879 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:52,879 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:52,879 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:52,880 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:52,880 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 11:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:52,880 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:52,880 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:52,880 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:52,881 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:52,944 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:52,985 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:53,125 INFO] src.engine_xgb: XGB Train Acc: 0.5249 | Test Acc: 0.5249
|
|
[2026-05-16 11:35:53,126 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11734515), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09256352), 'atr_normalized': np.float32(0.09084503), 'prev_log_return': np.float32(0.09379082), 'usdchf_log_return': np.float32(0.33890462), 'xagusd_log_return': np.float32(0.083908275), 'xtiusd_log_return': np.float32(0.08193724), 'synth_vix_zscore': np.float32(0.10070536)}
|
|
[2026-05-16 11:35:53,126 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:35:53,275 INFO] src.engine_xgb: XGB Train Acc: 0.5128 | Test Acc: 0.5128
|
|
[2026-05-16 11:35:53,276 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.121803574), 'gmm_vol_cluster': np.float32(0.10850621), 'rsi_slope': np.float32(0.08540243), 'atr_normalized': np.float32(0.08567301), 'prev_log_return': np.float32(0.081044696), 'usdchf_log_return': np.float32(0.2678735), 'xagusd_log_return': np.float32(0.07475711), 'xtiusd_log_return': np.float32(0.079674624), 'synth_vix_zscore': np.float32(0.09526482)}
|
|
[2026-05-16 11:35:53,276 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:35:53,437 INFO] src.engine_xgb: XGB Train Acc: 0.5082 | Test Acc: 0.5082
|
|
[2026-05-16 11:35:53,437 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.103015356), 'gmm_vol_cluster': np.float32(0.06182321), 'rsi_slope': np.float32(0.079383634), 'atr_normalized': np.float32(0.116383895), 'prev_log_return': np.float32(0.08751799), 'usdchf_log_return': np.float32(0.25191942), 'xagusd_log_return': np.float32(0.09460706), 'xtiusd_log_return': np.float32(0.09871598), 'synth_vix_zscore': np.float32(0.10663337)}
|
|
[2026-05-16 11:35:53,438 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:35:53,439 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.36405, 0.29161) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:53,692 INFO] src.backtester: Backtest [H1]: Sharpe=0.154 | MaxDD=0.053 | WR=0.402 | Return=2.7% | Trades=127
|
|
[2026-05-16 11:35:53,693 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:55,580 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:55,580 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:55,580 INFO] src.engine_hmm: Bull 0.9741 0.0059 0.0200
|
|
[2026-05-16 11:35:55,580 INFO] src.engine_hmm: Bear 0.0233 0.9761 0.0006
|
|
[2026-05-16 11:35:55,581 INFO] src.engine_hmm: Chop 0.0170 0.0018 0.9813
|
|
[2026-05-16 11:35:55,581 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:55,581 INFO] src.engine_hmm: Bull: return=0.020550, vol=0.052317, rsi_slope=-0.000499
|
|
[2026-05-16 11:35:55,581 INFO] src.engine_hmm: Bear: return=-0.084239, vol=1.650396, rsi_slope=-0.000509
|
|
[2026-05-16 11:35:55,581 INFO] src.engine_hmm: Chop: return=0.006410, vol=-0.547826, rsi_slope=0.000617
|
|
[2026-05-16 11:35:55,582 INFO] src.engine_hmm: Total regime transitions: 983
|
|
[2026-05-16 11:35:55,582 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:55,582 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 05:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:55,583 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:55,583 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:55,583 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:55,583 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-03 10:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:55,584 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:55,584 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:55,585 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-12 17:00:00: Chop -> Bull
|
|
[2026-05-16 11:35:55,585 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:35:55,649 INFO] src.engine_xgb: Features prepared: 38865 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:55,690 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:55,839 INFO] src.engine_xgb: XGB Train Acc: 0.5347 | Test Acc: 0.5347
|
|
[2026-05-16 11:35:55,840 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12028506), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.07921263), 'atr_normalized': np.float32(0.084347025), 'prev_log_return': np.float32(0.0995723), 'usdchf_log_return': np.float32(0.3668089), 'xagusd_log_return': np.float32(0.07726553), 'xtiusd_log_return': np.float32(0.083048984), 'synth_vix_zscore': np.float32(0.0894595)}
|
|
[2026-05-16 11:35:55,840 INFO] src.engine_xgb: Trained vol-bucket 'low': 12826 samples.
|
|
[2026-05-16 11:35:55,997 INFO] src.engine_xgb: XGB Train Acc: 0.5145 | Test Acc: 0.5145
|
|
[2026-05-16 11:35:55,999 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10594523), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.1039882), 'atr_normalized': np.float32(0.09335667), 'prev_log_return': np.float32(0.098221354), 'usdchf_log_return': np.float32(0.30409813), 'xagusd_log_return': np.float32(0.0922824), 'xtiusd_log_return': np.float32(0.097618446), 'synth_vix_zscore': np.float32(0.1044896)}
|
|
[2026-05-16 11:35:55,999 INFO] src.engine_xgb: Trained vol-bucket 'med': 12825 samples.
|
|
[2026-05-16 11:35:56,180 INFO] src.engine_xgb: XGB Train Acc: 0.5084 | Test Acc: 0.5084
|
|
[2026-05-16 11:35:56,181 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09992488), 'gmm_vol_cluster': np.float32(0.10222803), 'rsi_slope': np.float32(0.09318014), 'atr_normalized': np.float32(0.10349274), 'prev_log_return': np.float32(0.08891623), 'usdchf_log_return': np.float32(0.22434838), 'xagusd_log_return': np.float32(0.0998922), 'xtiusd_log_return': np.float32(0.08519286), 'synth_vix_zscore': np.float32(0.10282447)}
|
|
[2026-05-16 11:35:56,181 INFO] src.engine_xgb: Trained vol-bucket 'high': 13215 samples.
|
|
[2026-05-16 11:35:56,182 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12826, 'med': 12825, 'high': 13215} thresholds=(-0.37238, 0.26672) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:56,442 INFO] src.backtester: Backtest [H1]: Sharpe=-0.578 | MaxDD=0.142 | WR=0.333 | Return=-7.7% | Trades=114
|
|
[2026-05-16 11:35:56,443 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:35:58,653 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:35:58,653 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:35:58,654 INFO] src.engine_hmm: Bull 0.9655 0.0248 0.0097
|
|
[2026-05-16 11:35:58,654 INFO] src.engine_hmm: Bear 0.0184 0.9767 0.0048
|
|
[2026-05-16 11:35:58,655 INFO] src.engine_hmm: Chop 0.0262 0.0020 0.9718
|
|
[2026-05-16 11:35:58,655 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:35:58,655 INFO] src.engine_hmm: Bull: return=0.047639, vol=0.018928, rsi_slope=0.003197
|
|
[2026-05-16 11:35:58,656 INFO] src.engine_hmm: Bear: return=-0.029080, vol=-0.700883, rsi_slope=-0.004315
|
|
[2026-05-16 11:35:58,656 INFO] src.engine_hmm: Chop: return=-0.028571, vol=1.427288, rsi_slope=0.003013
|
|
[2026-05-16 11:35:58,657 INFO] src.engine_hmm: Total regime transitions: 1238
|
|
[2026-05-16 11:35:58,658 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-05 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:58,658 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-06 13:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:58,659 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-13 21:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:58,659 INFO] src.engine_hmm: REGIME CHANGE at 2017-12-14 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:58,660 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-02 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:58,660 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 01:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:58,660 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-04 17:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:58,661 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-05 22:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:58,661 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-10 12:00:00: Bear -> Bull
|
|
[2026-05-16 11:35:58,662 INFO] src.engine_hmm: REGIME CHANGE at 2018-01-11 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:35:58,739 INFO] src.engine_xgb: Features prepared: 38889 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:58,782 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:58,965 INFO] src.engine_xgb: XGB Train Acc: 0.5316 | Test Acc: 0.5316
|
|
[2026-05-16 11:35:58,965 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.123303756), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09265452), 'atr_normalized': np.float32(0.09056408), 'prev_log_return': np.float32(0.0955648), 'usdchf_log_return': np.float32(0.3333073), 'xagusd_log_return': np.float32(0.08776673), 'xtiusd_log_return': np.float32(0.08221449), 'synth_vix_zscore': np.float32(0.09462432)}
|
|
[2026-05-16 11:35:58,966 INFO] src.engine_xgb: Trained vol-bucket 'low': 12834 samples.
|
|
[2026-05-16 11:35:59,156 INFO] src.engine_xgb: XGB Train Acc: 0.5211 | Test Acc: 0.5211
|
|
[2026-05-16 11:35:59,156 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13297388), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09316841), 'atr_normalized': np.float32(0.087847345), 'prev_log_return': np.float32(0.096241005), 'usdchf_log_return': np.float32(0.3160537), 'xagusd_log_return': np.float32(0.08902357), 'xtiusd_log_return': np.float32(0.0923306), 'synth_vix_zscore': np.float32(0.09236157)}
|
|
[2026-05-16 11:35:59,157 INFO] src.engine_xgb: Trained vol-bucket 'med': 12833 samples.
|
|
[2026-05-16 11:35:59,332 INFO] src.engine_xgb: XGB Train Acc: 0.5075 | Test Acc: 0.5075
|
|
[2026-05-16 11:35:59,332 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09898649), 'gmm_vol_cluster': np.float32(0.0804669), 'rsi_slope': np.float32(0.094022036), 'atr_normalized': np.float32(0.102084264), 'prev_log_return': np.float32(0.08985761), 'usdchf_log_return': np.float32(0.26487887), 'xagusd_log_return': np.float32(0.08658226), 'xtiusd_log_return': np.float32(0.09493295), 'synth_vix_zscore': np.float32(0.08818865)}
|
|
[2026-05-16 11:35:59,333 INFO] src.engine_xgb: Trained vol-bucket 'high': 13223 samples.
|
|
[2026-05-16 11:35:59,334 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12834, 'med': 12833, 'high': 13223} thresholds=(-0.46512, 0.07794) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:35:59,627 INFO] src.backtester: Backtest [H1]: Sharpe=-3.581 | MaxDD=1.083 | WR=0.302 | Return=-65.7% | Trades=504
|
|
[2026-05-16 11:35:59,627 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:02,699 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:02,699 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:02,699 INFO] src.engine_hmm: Bull 0.9706 0.0048 0.0246
|
|
[2026-05-16 11:36:02,699 INFO] src.engine_hmm: Bear 0.0239 0.9744 0.0016
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: Chop 0.0187 0.0027 0.9786
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: Bull: return=0.018978, vol=0.074360, rsi_slope=0.001054
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: Bear: return=-0.040403, vol=1.685718, rsi_slope=-0.009050
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: Chop: return=-0.005444, vol=-0.511218, rsi_slope=0.001506
|
|
[2026-05-16 11:36:02,700 INFO] src.engine_hmm: Total regime transitions: 1094
|
|
[2026-05-16 11:36:02,701 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 02:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:02,701 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:02,702 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:02,702 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:02,702 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:02,702 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:02,703 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:02,703 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:02,703 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:02,704 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:02,771 INFO] src.engine_xgb: Features prepared: 38849 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:02,816 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:02,977 INFO] src.engine_xgb: XGB Train Acc: 0.5223 | Test Acc: 0.5223
|
|
[2026-05-16 11:36:02,977 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.124746725), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08853109), 'atr_normalized': np.float32(0.09778011), 'prev_log_return': np.float32(0.09089009), 'usdchf_log_return': np.float32(0.3358081), 'xagusd_log_return': np.float32(0.09573153), 'xtiusd_log_return': np.float32(0.082964614), 'synth_vix_zscore': np.float32(0.083547726)}
|
|
[2026-05-16 11:36:02,978 INFO] src.engine_xgb: Trained vol-bucket 'low': 12820 samples.
|
|
[2026-05-16 11:36:03,143 INFO] src.engine_xgb: XGB Train Acc: 0.5076 | Test Acc: 0.5076
|
|
[2026-05-16 11:36:03,143 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09496178), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.10450022), 'atr_normalized': np.float32(0.10040422), 'prev_log_return': np.float32(0.094674684), 'usdchf_log_return': np.float32(0.29843685), 'xagusd_log_return': np.float32(0.098565705), 'xtiusd_log_return': np.float32(0.09467032), 'synth_vix_zscore': np.float32(0.113786295)}
|
|
[2026-05-16 11:36:03,144 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:36:03,304 INFO] src.engine_xgb: XGB Train Acc: 0.5017 | Test Acc: 0.5017
|
|
[2026-05-16 11:36:03,304 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10334273), 'gmm_vol_cluster': np.float32(0.06513767), 'rsi_slope': np.float32(0.09449178), 'atr_normalized': np.float32(0.10145115), 'prev_log_return': np.float32(0.092856854), 'usdchf_log_return': np.float32(0.25697333), 'xagusd_log_return': np.float32(0.08816107), 'xtiusd_log_return': np.float32(0.09423226), 'synth_vix_zscore': np.float32(0.103353284)}
|
|
[2026-05-16 11:36:03,305 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:36:03,306 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12820, 'med': 12820, 'high': 13209} thresholds=(-0.34935, 0.44633) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:03,567 INFO] src.backtester: Backtest [H1]: Sharpe=-0.607 | MaxDD=0.246 | WR=0.307 | Return=-12.9% | Trades=150
|
|
[2026-05-16 11:36:03,567 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:07,352 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:07,352 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:07,353 INFO] src.engine_hmm: Bull 0.9715 0.0057 0.0228
|
|
[2026-05-16 11:36:07,353 INFO] src.engine_hmm: Bear 0.0240 0.9752 0.0008
|
|
[2026-05-16 11:36:07,353 INFO] src.engine_hmm: Chop 0.0177 0.0018 0.9805
|
|
[2026-05-16 11:36:07,353 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:07,353 INFO] src.engine_hmm: Bull: return=0.035007, vol=0.083324, rsi_slope=-0.000586
|
|
[2026-05-16 11:36:07,354 INFO] src.engine_hmm: Bear: return=-0.143157, vol=1.742516, rsi_slope=-0.004462
|
|
[2026-05-16 11:36:07,354 INFO] src.engine_hmm: Chop: return=0.008194, vol=-0.530492, rsi_slope=0.001673
|
|
[2026-05-16 11:36:07,354 INFO] src.engine_hmm: Total regime transitions: 1027
|
|
[2026-05-16 11:36:07,354 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:07,356 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:07,356 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:07,356 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:07,357 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:07,357 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:07,357 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:07,357 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:07,358 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:07,358 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:07,421 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:07,465 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:07,608 INFO] src.engine_xgb: XGB Train Acc: 0.5111 | Test Acc: 0.5111
|
|
[2026-05-16 11:36:07,608 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10166303), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09815987), 'atr_normalized': np.float32(0.09645371), 'prev_log_return': np.float32(0.08566879), 'usdchf_log_return': np.float32(0.32820117), 'xagusd_log_return': np.float32(0.098075554), 'xtiusd_log_return': np.float32(0.09150641), 'synth_vix_zscore': np.float32(0.10027149)}
|
|
[2026-05-16 11:36:07,609 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:36:07,762 INFO] src.engine_xgb: XGB Train Acc: 0.5016 | Test Acc: 0.5016
|
|
[2026-05-16 11:36:07,763 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09945465), 'gmm_vol_cluster': np.float32(0.10054297), 'rsi_slope': np.float32(0.098086536), 'atr_normalized': np.float32(0.09323732), 'prev_log_return': np.float32(0.089184806), 'usdchf_log_return': np.float32(0.25208104), 'xagusd_log_return': np.float32(0.08737045), 'xtiusd_log_return': np.float32(0.088393055), 'synth_vix_zscore': np.float32(0.091649145)}
|
|
[2026-05-16 11:36:07,763 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:36:07,921 INFO] src.engine_xgb: XGB Train Acc: 0.5097 | Test Acc: 0.5097
|
|
[2026-05-16 11:36:07,921 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.12187805), 'gmm_vol_cluster': np.float32(0.059605114), 'rsi_slope': np.float32(0.08861224), 'atr_normalized': np.float32(0.09938395), 'prev_log_return': np.float32(0.07995317), 'usdchf_log_return': np.float32(0.26429337), 'xagusd_log_return': np.float32(0.09070573), 'xtiusd_log_return': np.float32(0.08261681), 'synth_vix_zscore': np.float32(0.1129515)}
|
|
[2026-05-16 11:36:07,922 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:36:07,923 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.37431, 0.26058) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:08,171 INFO] src.backtester: Backtest [H1]: Sharpe=-0.262 | MaxDD=0.077 | WR=0.422 | Return=-2.9% | Trades=90
|
|
[2026-05-16 11:36:08,172 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Bull 0.9808 0.0022 0.0170
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Bear 0.0010 0.9751 0.0239
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Chop 0.0225 0.0053 0.9722
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Bull: return=0.032827, vol=-0.529167, rsi_slope=-0.000951
|
|
[2026-05-16 11:36:10,906 INFO] src.engine_hmm: Bear: return=-0.187229, vol=1.731342, rsi_slope=-0.004465
|
|
[2026-05-16 11:36:10,907 INFO] src.engine_hmm: Chop: return=0.020402, vol=0.078811, rsi_slope=0.002541
|
|
[2026-05-16 11:36:10,907 INFO] src.engine_hmm: Total regime transitions: 1004
|
|
[2026-05-16 11:36:10,907 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 01:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-12 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-15 14:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-18 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 22:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:10,908 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Chop -> Bear
|
|
[2026-05-16 11:36:10,910 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Chop
|
|
[2026-05-16 11:36:10,910 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:10,910 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:10,968 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:11,008 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:11,146 INFO] src.engine_xgb: XGB Train Acc: 0.5159 | Test Acc: 0.5159
|
|
[2026-05-16 11:36:11,147 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.070618406), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09469796), 'atr_normalized': np.float32(0.09834005), 'prev_log_return': np.float32(0.085825406), 'usdchf_log_return': np.float32(0.3710188), 'xagusd_log_return': np.float32(0.095230654), 'xtiusd_log_return': np.float32(0.08864812), 'synth_vix_zscore': np.float32(0.095620655)}
|
|
[2026-05-16 11:36:11,147 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:36:11,300 INFO] src.engine_xgb: XGB Train Acc: 0.5106 | Test Acc: 0.5106
|
|
[2026-05-16 11:36:11,301 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0696328), 'gmm_vol_cluster': np.float32(0.056087423), 'rsi_slope': np.float32(0.104729824), 'atr_normalized': np.float32(0.09913339), 'prev_log_return': np.float32(0.08721253), 'usdchf_log_return': np.float32(0.29213622), 'xagusd_log_return': np.float32(0.092491455), 'xtiusd_log_return': np.float32(0.10068907), 'synth_vix_zscore': np.float32(0.0978873)}
|
|
[2026-05-16 11:36:11,301 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:36:11,463 INFO] src.engine_xgb: XGB Train Acc: 0.5055 | Test Acc: 0.5055
|
|
[2026-05-16 11:36:11,464 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07279994), 'gmm_vol_cluster': np.float32(0.08067499), 'rsi_slope': np.float32(0.09969841), 'atr_normalized': np.float32(0.110626504), 'prev_log_return': np.float32(0.089573435), 'usdchf_log_return': np.float32(0.25826257), 'xagusd_log_return': np.float32(0.089882486), 'xtiusd_log_return': np.float32(0.08642382), 'synth_vix_zscore': np.float32(0.11205781)}
|
|
[2026-05-16 11:36:11,464 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:36:11,465 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.38472, 0.23361) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:11,718 INFO] src.backtester: Backtest [H1]: Sharpe=-1.195 | MaxDD=0.140 | WR=0.312 | Return=-10.9% | Trades=64
|
|
[2026-05-16 11:36:11,719 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:14,024 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:14,024 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:14,024 INFO] src.engine_hmm: Bull 0.9645 0.0096 0.0259
|
|
[2026-05-16 11:36:14,025 INFO] src.engine_hmm: Bear 0.0281 0.9694 0.0025
|
|
[2026-05-16 11:36:14,025 INFO] src.engine_hmm: Chop 0.0195 0.0060 0.9746
|
|
[2026-05-16 11:36:14,025 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:14,025 INFO] src.engine_hmm: Bull: return=0.025535, vol=0.008934, rsi_slope=0.001412
|
|
[2026-05-16 11:36:14,026 INFO] src.engine_hmm: Bear: return=-0.062997, vol=1.413068, rsi_slope=0.001674
|
|
[2026-05-16 11:36:14,026 INFO] src.engine_hmm: Chop: return=0.006871, vol=-0.698324, rsi_slope=-0.002139
|
|
[2026-05-16 11:36:14,026 INFO] src.engine_hmm: Total regime transitions: 1323
|
|
[2026-05-16 11:36:14,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:14,027 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:14,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:14,028 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:14,029 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:14,029 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:14,030 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:14,030 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-27 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:14,030 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:14,031 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 01:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:14,106 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:14,148 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:14,308 INFO] src.engine_xgb: XGB Train Acc: 0.5178 | Test Acc: 0.5178
|
|
[2026-05-16 11:36:14,308 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.096377045), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09272439), 'atr_normalized': np.float32(0.09813413), 'prev_log_return': np.float32(0.098406956), 'usdchf_log_return': np.float32(0.33830875), 'xagusd_log_return': np.float32(0.10495702), 'xtiusd_log_return': np.float32(0.07653641), 'synth_vix_zscore': np.float32(0.09455533)}
|
|
[2026-05-16 11:36:14,309 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:36:14,468 INFO] src.engine_xgb: XGB Train Acc: 0.5099 | Test Acc: 0.5099
|
|
[2026-05-16 11:36:14,468 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10950717), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09781204), 'atr_normalized': np.float32(0.09368845), 'prev_log_return': np.float32(0.108643755), 'usdchf_log_return': np.float32(0.3096515), 'xagusd_log_return': np.float32(0.08991022), 'xtiusd_log_return': np.float32(0.096071914), 'synth_vix_zscore': np.float32(0.094714954)}
|
|
[2026-05-16 11:36:14,469 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:36:14,631 INFO] src.engine_xgb: XGB Train Acc: 0.5041 | Test Acc: 0.5041
|
|
[2026-05-16 11:36:14,632 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09389316), 'gmm_vol_cluster': np.float32(0.0677076), 'rsi_slope': np.float32(0.09258583), 'atr_normalized': np.float32(0.11236481), 'prev_log_return': np.float32(0.085461326), 'usdchf_log_return': np.float32(0.268485), 'xagusd_log_return': np.float32(0.08718292), 'xtiusd_log_return': np.float32(0.09327093), 'synth_vix_zscore': np.float32(0.099048465)}
|
|
[2026-05-16 11:36:14,632 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:36:14,634 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.48493, 0.05236) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:14,903 INFO] src.backtester: Backtest [H1]: Sharpe=-1.271 | MaxDD=0.575 | WR=0.341 | Return=-40.2% | Trades=229
|
|
[2026-05-16 11:36:14,903 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:18,079 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:18,079 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:18,079 INFO] src.engine_hmm: Bull 0.9728 0.0218 0.0054
|
|
[2026-05-16 11:36:18,080 INFO] src.engine_hmm: Bear 0.0185 0.9799 0.0016
|
|
[2026-05-16 11:36:18,080 INFO] src.engine_hmm: Chop 0.0222 0.0014 0.9764
|
|
[2026-05-16 11:36:18,080 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:18,080 INFO] src.engine_hmm: Bull: return=0.052733, vol=0.057338, rsi_slope=0.006171
|
|
[2026-05-16 11:36:18,081 INFO] src.engine_hmm: Bear: return=-0.048972, vol=-0.512628, rsi_slope=-0.000214
|
|
[2026-05-16 11:36:18,081 INFO] src.engine_hmm: Chop: return=0.004262, vol=1.673548, rsi_slope=-0.019543
|
|
[2026-05-16 11:36:18,081 INFO] src.engine_hmm: Total regime transitions: 1012
|
|
[2026-05-16 11:36:18,082 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:18,082 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:18,083 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:18,083 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:18,084 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:18,084 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:18,085 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-03 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:18,085 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-04 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:18,085 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-06 15:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:18,086 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-09 12:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:18,163 INFO] src.engine_xgb: Features prepared: 38850 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:18,215 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:18,418 INFO] src.engine_xgb: XGB Train Acc: 0.5236 | Test Acc: 0.5236
|
|
[2026-05-16 11:36:18,418 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.0569013), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.095911056), 'atr_normalized': np.float32(0.09591014), 'prev_log_return': np.float32(0.09876495), 'usdchf_log_return': np.float32(0.37458047), 'xagusd_log_return': np.float32(0.08893547), 'xtiusd_log_return': np.float32(0.09376959), 'synth_vix_zscore': np.float32(0.09522702)}
|
|
[2026-05-16 11:36:18,419 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:36:18,633 INFO] src.engine_xgb: XGB Train Acc: 0.5091 | Test Acc: 0.5091
|
|
[2026-05-16 11:36:18,634 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.17741573), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09347885), 'atr_normalized': np.float32(0.096727304), 'prev_log_return': np.float32(0.08974852), 'usdchf_log_return': np.float32(0.26564005), 'xagusd_log_return': np.float32(0.09034609), 'xtiusd_log_return': np.float32(0.08760592), 'synth_vix_zscore': np.float32(0.09903755)}
|
|
[2026-05-16 11:36:18,635 INFO] src.engine_xgb: Trained vol-bucket 'med': 12820 samples.
|
|
[2026-05-16 11:36:18,809 INFO] src.engine_xgb: XGB Train Acc: 0.5079 | Test Acc: 0.5079
|
|
[2026-05-16 11:36:18,810 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10620597), 'gmm_vol_cluster': np.float32(0.08242693), 'rsi_slope': np.float32(0.08838052), 'atr_normalized': np.float32(0.105892494), 'prev_log_return': np.float32(0.0908604), 'usdchf_log_return': np.float32(0.25440207), 'xagusd_log_return': np.float32(0.09650731), 'xtiusd_log_return': np.float32(0.089336835), 'synth_vix_zscore': np.float32(0.08598747)}
|
|
[2026-05-16 11:36:18,810 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:36:18,811 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12820, 'high': 13209} thresholds=(-0.31728, 0.55895) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:19,084 INFO] src.backtester: Backtest [H1]: Sharpe=-4.935 | MaxDD=0.888 | WR=0.309 | Return=-58.7% | Trades=511
|
|
[2026-05-16 11:36:19,085 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:21,381 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:21,381 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:21,381 INFO] src.engine_hmm: Bull 0.9740 0.0048 0.0212
|
|
[2026-05-16 11:36:21,382 INFO] src.engine_hmm: Bear 0.0223 0.9764 0.0013
|
|
[2026-05-16 11:36:21,382 INFO] src.engine_hmm: Chop 0.0169 0.0018 0.9813
|
|
[2026-05-16 11:36:21,382 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:21,382 INFO] src.engine_hmm: Bull: return=0.040951, vol=0.074756, rsi_slope=0.003986
|
|
[2026-05-16 11:36:21,382 INFO] src.engine_hmm: Bear: return=-0.055585, vol=1.733604, rsi_slope=-0.007319
|
|
[2026-05-16 11:36:21,383 INFO] src.engine_hmm: Chop: return=-0.021479, vol=-0.505816, rsi_slope=-0.001606
|
|
[2026-05-16 11:36:21,383 INFO] src.engine_hmm: Total regime transitions: 960
|
|
[2026-05-16 11:36:21,383 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:21,383 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 22:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:21,384 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:21,384 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:21,384 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:21,385 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:21,385 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:21,385 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 20:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:21,385 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:21,385 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:21,449 INFO] src.engine_xgb: Features prepared: 38802 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:21,488 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:21,637 INFO] src.engine_xgb: XGB Train Acc: 0.5374 | Test Acc: 0.5374
|
|
[2026-05-16 11:36:21,638 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08163543), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09943192), 'atr_normalized': np.float32(0.090192765), 'prev_log_return': np.float32(0.1080623), 'usdchf_log_return': np.float32(0.35015336), 'xagusd_log_return': np.float32(0.106175296), 'xtiusd_log_return': np.float32(0.07734049), 'synth_vix_zscore': np.float32(0.087008394)}
|
|
[2026-05-16 11:36:21,638 INFO] src.engine_xgb: Trained vol-bucket 'low': 12805 samples.
|
|
[2026-05-16 11:36:21,791 INFO] src.engine_xgb: XGB Train Acc: 0.5124 | Test Acc: 0.5124
|
|
[2026-05-16 11:36:21,792 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14633831), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.0969707), 'atr_normalized': np.float32(0.1004175), 'prev_log_return': np.float32(0.088028386), 'usdchf_log_return': np.float32(0.28210023), 'xagusd_log_return': np.float32(0.08594398), 'xtiusd_log_return': np.float32(0.0968487), 'synth_vix_zscore': np.float32(0.10335218)}
|
|
[2026-05-16 11:36:21,792 INFO] src.engine_xgb: Trained vol-bucket 'med': 12804 samples.
|
|
[2026-05-16 11:36:21,946 INFO] src.engine_xgb: XGB Train Acc: 0.5070 | Test Acc: 0.5070
|
|
[2026-05-16 11:36:21,946 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.07832314), 'gmm_vol_cluster': np.float32(0.10044855), 'rsi_slope': np.float32(0.09186338), 'atr_normalized': np.float32(0.09670004), 'prev_log_return': np.float32(0.08517657), 'usdchf_log_return': np.float32(0.28981638), 'xagusd_log_return': np.float32(0.08275991), 'xtiusd_log_return': np.float32(0.08553382), 'synth_vix_zscore': np.float32(0.08937819)}
|
|
[2026-05-16 11:36:21,947 INFO] src.engine_xgb: Trained vol-bucket 'high': 13193 samples.
|
|
[2026-05-16 11:36:21,948 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12805, 'med': 12804, 'high': 13193} thresholds=(-0.32383, 0.49237) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:22,211 INFO] src.backtester: Backtest [H1]: Sharpe=-1.435 | MaxDD=0.500 | WR=0.356 | Return=-29.8% | Trades=233
|
|
[2026-05-16 11:36:22,211 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:25,520 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:25,521 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:25,521 INFO] src.engine_hmm: Bull 0.9657 0.0030 0.0313
|
|
[2026-05-16 11:36:25,521 INFO] src.engine_hmm: Bear 0.0061 0.9756 0.0182
|
|
[2026-05-16 11:36:25,521 INFO] src.engine_hmm: Chop 0.0095 0.0254 0.9652
|
|
[2026-05-16 11:36:25,522 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:25,522 INFO] src.engine_hmm: Bull: return=0.046411, vol=1.499389, rsi_slope=0.002575
|
|
[2026-05-16 11:36:25,522 INFO] src.engine_hmm: Bear: return=-0.037604, vol=-0.716684, rsi_slope=-0.003043
|
|
[2026-05-16 11:36:25,522 INFO] src.engine_hmm: Chop: return=0.019419, vol=0.079545, rsi_slope=0.002129
|
|
[2026-05-16 11:36:25,522 INFO] src.engine_hmm: Total regime transitions: 1322
|
|
[2026-05-16 11:36:25,523 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 03:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:25,523 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:25,524 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:25,524 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:25,524 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 08:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:25,525 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:25,525 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:25,525 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:25,525 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Chop -> Bear
|
|
[2026-05-16 11:36:25,525 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Chop
|
|
[2026-05-16 11:36:25,587 INFO] src.engine_xgb: Features prepared: 38826 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:25,626 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:25,770 INFO] src.engine_xgb: XGB Train Acc: 0.5316 | Test Acc: 0.5316
|
|
[2026-05-16 11:36:25,770 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10710609), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.081354745), 'atr_normalized': np.float32(0.08495654), 'prev_log_return': np.float32(0.07985605), 'usdchf_log_return': np.float32(0.3738628), 'xagusd_log_return': np.float32(0.08810147), 'xtiusd_log_return': np.float32(0.08166392), 'synth_vix_zscore': np.float32(0.10309832)}
|
|
[2026-05-16 11:36:25,771 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:36:25,923 INFO] src.engine_xgb: XGB Train Acc: 0.5144 | Test Acc: 0.5144
|
|
[2026-05-16 11:36:25,923 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09314148), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.102968365), 'atr_normalized': np.float32(0.112149), 'prev_log_return': np.float32(0.0974038), 'usdchf_log_return': np.float32(0.30505154), 'xagusd_log_return': np.float32(0.09746328), 'xtiusd_log_return': np.float32(0.08962798), 'synth_vix_zscore': np.float32(0.10219447)}
|
|
[2026-05-16 11:36:25,924 INFO] src.engine_xgb: Trained vol-bucket 'med': 12812 samples.
|
|
[2026-05-16 11:36:26,081 INFO] src.engine_xgb: XGB Train Acc: 0.5161 | Test Acc: 0.5161
|
|
[2026-05-16 11:36:26,082 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09840281), 'gmm_vol_cluster': np.float32(0.090061724), 'rsi_slope': np.float32(0.08766451), 'atr_normalized': np.float32(0.08835471), 'prev_log_return': np.float32(0.08343291), 'usdchf_log_return': np.float32(0.30049554), 'xagusd_log_return': np.float32(0.08320569), 'xtiusd_log_return': np.float32(0.08266936), 'synth_vix_zscore': np.float32(0.08571272)}
|
|
[2026-05-16 11:36:26,082 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:36:26,083 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12812, 'high': 13201} thresholds=(-0.43300, 0.25133) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:26,350 INFO] src.backtester: Backtest [H1]: Sharpe=-2.438 | MaxDD=0.687 | WR=0.321 | Return=-49.6% | Trades=268
|
|
[2026-05-16 11:36:26,350 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:28,349 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:28,349 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:28,350 INFO] src.engine_hmm: Bull 0.9748 0.0058 0.0194
|
|
[2026-05-16 11:36:28,350 INFO] src.engine_hmm: Bear 0.0219 0.9774 0.0007
|
|
[2026-05-16 11:36:28,350 INFO] src.engine_hmm: Chop 0.0165 0.0012 0.9822
|
|
[2026-05-16 11:36:28,350 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:28,351 INFO] src.engine_hmm: Bull: return=0.060231, vol=0.056834, rsi_slope=-0.000568
|
|
[2026-05-16 11:36:28,351 INFO] src.engine_hmm: Bear: return=-0.125881, vol=1.705318, rsi_slope=0.002422
|
|
[2026-05-16 11:36:28,351 INFO] src.engine_hmm: Chop: return=-0.018699, vol=-0.537775, rsi_slope=-0.000176
|
|
[2026-05-16 11:36:28,351 INFO] src.engine_hmm: Total regime transitions: 928
|
|
[2026-05-16 11:36:28,352 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 15:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:28,352 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:28,352 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:28,352 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 16:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:28,353 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 13:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:28,353 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-10 20:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:28,353 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-11 17:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:28,354 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-12 15:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:28,354 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-20 12:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:28,354 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-24 17:00:00: Chop -> Bear
|
|
[2026-05-16 11:36:28,420 INFO] src.engine_xgb: Features prepared: 38851 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:28,462 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:28,609 INFO] src.engine_xgb: XGB Train Acc: 0.5287 | Test Acc: 0.5287
|
|
[2026-05-16 11:36:28,609 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08299854), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09511983), 'atr_normalized': np.float32(0.08741297), 'prev_log_return': np.float32(0.09078883), 'usdchf_log_return': np.float32(0.36146018), 'xagusd_log_return': np.float32(0.09364645), 'xtiusd_log_return': np.float32(0.094603054), 'synth_vix_zscore': np.float32(0.09397017)}
|
|
[2026-05-16 11:36:28,610 INFO] src.engine_xgb: Trained vol-bucket 'low': 12821 samples.
|
|
[2026-05-16 11:36:28,761 INFO] src.engine_xgb: XGB Train Acc: 0.5164 | Test Acc: 0.5164
|
|
[2026-05-16 11:36:28,762 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.1843638), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09493781), 'atr_normalized': np.float32(0.09661547), 'prev_log_return': np.float32(0.08907206), 'usdchf_log_return': np.float32(0.27507964), 'xagusd_log_return': np.float32(0.085419826), 'xtiusd_log_return': np.float32(0.08013829), 'synth_vix_zscore': np.float32(0.094373114)}
|
|
[2026-05-16 11:36:28,762 INFO] src.engine_xgb: Trained vol-bucket 'med': 12821 samples.
|
|
[2026-05-16 11:36:28,921 INFO] src.engine_xgb: XGB Train Acc: 0.5119 | Test Acc: 0.5119
|
|
[2026-05-16 11:36:28,922 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.13734044), 'gmm_vol_cluster': np.float32(0.08120153), 'rsi_slope': np.float32(0.09355467), 'atr_normalized': np.float32(0.1007277), 'prev_log_return': np.float32(0.08011632), 'usdchf_log_return': np.float32(0.2424743), 'xagusd_log_return': np.float32(0.086162895), 'xtiusd_log_return': np.float32(0.08111126), 'synth_vix_zscore': np.float32(0.097310886)}
|
|
[2026-05-16 11:36:28,922 INFO] src.engine_xgb: Trained vol-bucket 'high': 13209 samples.
|
|
[2026-05-16 11:36:28,924 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12821, 'med': 12821, 'high': 13209} thresholds=(-0.34271, 0.30034) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:29,174 INFO] src.backtester: Backtest [H1]: Sharpe=-0.932 | MaxDD=0.194 | WR=0.391 | Return=-13.2% | Trades=174
|
|
[2026-05-16 11:36:29,174 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:31,065 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Bull 0.9664 0.0232 0.0103
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Bear 0.0186 0.9772 0.0042
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Chop 0.0269 0.0013 0.9718
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Bull: return=0.043970, vol=-0.003127, rsi_slope=0.005661
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Bear: return=-0.042047, vol=-0.706023, rsi_slope=-0.004021
|
|
[2026-05-16 11:36:31,066 INFO] src.engine_hmm: Chop: return=0.000108, vol=1.417620, rsi_slope=-0.002771
|
|
[2026-05-16 11:36:31,068 INFO] src.engine_hmm: Total regime transitions: 1230
|
|
[2026-05-16 11:36:31,068 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:31,069 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-14 23:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:31,069 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:31,070 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:31,070 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:31,070 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:31,070 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:31,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 06:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:31,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:31,071 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:31,129 INFO] src.engine_xgb: Features prepared: 38827 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:31,166 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:31,307 INFO] src.engine_xgb: XGB Train Acc: 0.5240 | Test Acc: 0.5240
|
|
[2026-05-16 11:36:31,307 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.08512433), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.08580859), 'atr_normalized': np.float32(0.0879848), 'prev_log_return': np.float32(0.09113014), 'usdchf_log_return': np.float32(0.3762253), 'xagusd_log_return': np.float32(0.09633507), 'xtiusd_log_return': np.float32(0.082308404), 'synth_vix_zscore': np.float32(0.09508343)}
|
|
[2026-05-16 11:36:31,308 INFO] src.engine_xgb: Trained vol-bucket 'low': 12813 samples.
|
|
[2026-05-16 11:36:31,453 INFO] src.engine_xgb: XGB Train Acc: 0.5109 | Test Acc: 0.5109
|
|
[2026-05-16 11:36:31,454 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.11882155), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09734743), 'atr_normalized': np.float32(0.09302198), 'prev_log_return': np.float32(0.094917186), 'usdchf_log_return': np.float32(0.30356482), 'xagusd_log_return': np.float32(0.09624373), 'xtiusd_log_return': np.float32(0.09158357), 'synth_vix_zscore': np.float32(0.104499735)}
|
|
[2026-05-16 11:36:31,454 INFO] src.engine_xgb: Trained vol-bucket 'med': 12813 samples.
|
|
[2026-05-16 11:36:31,610 INFO] src.engine_xgb: XGB Train Acc: 0.5074 | Test Acc: 0.5074
|
|
[2026-05-16 11:36:31,610 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.10334102), 'gmm_vol_cluster': np.float32(0.08374613), 'rsi_slope': np.float32(0.09755664), 'atr_normalized': np.float32(0.098926075), 'prev_log_return': np.float32(0.08875079), 'usdchf_log_return': np.float32(0.25677586), 'xagusd_log_return': np.float32(0.09195184), 'xtiusd_log_return': np.float32(0.08284289), 'synth_vix_zscore': np.float32(0.09610877)}
|
|
[2026-05-16 11:36:31,611 INFO] src.engine_xgb: Trained vol-bucket 'high': 13201 samples.
|
|
[2026-05-16 11:36:31,612 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12813, 'med': 12813, 'high': 13201} thresholds=(-0.42485, 0.09968) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:31,866 INFO] src.backtester: Backtest [H1]: Sharpe=-2.427 | MaxDD=0.695 | WR=0.350 | Return=-50.0% | Trades=360
|
|
[2026-05-16 11:36:31,867 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:34,069 INFO] src.engine_hmm: Transition Matrix:
|
|
[2026-05-16 11:36:34,069 INFO] src.engine_hmm: Bull Bear Chop
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Bull 0.9666 0.0096 0.0238
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Bear 0.0277 0.9706 0.0017
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Chop 0.0175 0.0043 0.9782
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: State means (scaled: kalman_return, volatility, rsi_slope):
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Bull: return=0.055259, vol=0.035904, rsi_slope=0.001801
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Bear: return=-0.081499, vol=1.472781, rsi_slope=0.009486
|
|
[2026-05-16 11:36:34,070 INFO] src.engine_hmm: Chop: return=-0.013299, vol=-0.673765, rsi_slope=-0.005726
|
|
[2026-05-16 11:36:34,072 INFO] src.engine_hmm: Total regime transitions: 1212
|
|
[2026-05-16 11:36:34,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-19 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:34,072 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-20 06:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:34,073 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-21 09:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:34,073 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 13:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:34,073 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-22 19:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:34,074 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:34,074 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-25 18:00:00: Bull -> Chop
|
|
[2026-05-16 11:36:34,074 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-26 09:00:00: Chop -> Bull
|
|
[2026-05-16 11:36:34,074 INFO] src.engine_hmm: REGIME CHANGE at 2016-04-28 06:00:00: Bull -> Bear
|
|
[2026-05-16 11:36:34,074 INFO] src.engine_hmm: REGIME CHANGE at 2016-05-02 03:00:00: Bear -> Bull
|
|
[2026-05-16 11:36:34,131 INFO] src.engine_xgb: Features prepared: 38875 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:34,169 INFO] src.engine_xgb: Features prepared: 58367 samples, 9 features: ['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:34,342 INFO] src.engine_xgb: XGB Train Acc: 0.5350 | Test Acc: 0.5350
|
|
[2026-05-16 11:36:34,342 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.067649044), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09012019), 'atr_normalized': np.float32(0.099902555), 'prev_log_return': np.float32(0.10093327), 'usdchf_log_return': np.float32(0.37205723), 'xagusd_log_return': np.float32(0.08648798), 'xtiusd_log_return': np.float32(0.08495364), 'synth_vix_zscore': np.float32(0.09789613)}
|
|
[2026-05-16 11:36:34,343 INFO] src.engine_xgb: Trained vol-bucket 'low': 12829 samples.
|
|
[2026-05-16 11:36:34,499 INFO] src.engine_xgb: XGB Train Acc: 0.5149 | Test Acc: 0.5149
|
|
[2026-05-16 11:36:34,500 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.14811614), 'gmm_vol_cluster': np.float32(0.0), 'rsi_slope': np.float32(0.09025526), 'atr_normalized': np.float32(0.0891318), 'prev_log_return': np.float32(0.08433343), 'usdchf_log_return': np.float32(0.29778856), 'xagusd_log_return': np.float32(0.09702174), 'xtiusd_log_return': np.float32(0.08981891), 'synth_vix_zscore': np.float32(0.10353412)}
|
|
[2026-05-16 11:36:34,500 INFO] src.engine_xgb: Trained vol-bucket 'med': 12828 samples.
|
|
[2026-05-16 11:36:34,662 INFO] src.engine_xgb: XGB Train Acc: 0.5154 | Test Acc: 0.5154
|
|
[2026-05-16 11:36:34,663 INFO] src.engine_xgb: Feature importance: {'hmm_state': np.float32(0.09590579), 'gmm_vol_cluster': np.float32(0.08456121), 'rsi_slope': np.float32(0.09788348), 'atr_normalized': np.float32(0.10342894), 'prev_log_return': np.float32(0.07882456), 'usdchf_log_return': np.float32(0.287492), 'xagusd_log_return': np.float32(0.07986584), 'xtiusd_log_return': np.float32(0.08164921), 'synth_vix_zscore': np.float32(0.09038899)}
|
|
[2026-05-16 11:36:34,663 INFO] src.engine_xgb: Trained vol-bucket 'high': 13218 samples.
|
|
[2026-05-16 11:36:34,664 INFO] src.engine_xgb: Ensemble trained: buckets={'low': 12829, 'med': 12828, 'high': 13218} thresholds=(-0.39349, 0.14651) features=['hmm_state', 'gmm_vol_cluster', 'rsi_slope', 'atr_normalized', 'prev_log_return', 'usdchf_log_return', 'xagusd_log_return', 'xtiusd_log_return', 'synth_vix_zscore']
|
|
[2026-05-16 11:36:34,938 INFO] src.backtester: Backtest [H1]: Sharpe=-1.803 | MaxDD=0.853 | WR=0.320 | Return=-53.6% | Trades=341
|
|
[2026-05-16 11:36:34,938 INFO] src.backtester: headway_cent: account=$15.00 | costs=0.0004/trade
|
|
[2026-05-16 11:36:34,968 WARNING] src.optimizer: CPCV [H1]: only 5 valid paths — rejecting trial.
|
|
[2026-05-16 11:36:35,025 INFO] src.optimizer: Trial 8 [H1/headway_cent]: score=-50.000 | valid_paths=5/15 | std_sharpe=0.000 | median_trades=229
|
|
Best trial: 1. Best value: -50: 7%|█████▎ | 9/130 [12:52<2:38:43, 78.71s/it][ |