diff --git a/crates/ml/src/cuda_pipeline/experience_kernels.cu b/crates/ml/src/cuda_pipeline/experience_kernels.cu index 6ddc1ef39..657ee2d88 100644 --- a/crates/ml/src/cuda_pipeline/experience_kernels.cu +++ b/crates/ml/src/cuda_pipeline/experience_kernels.cu @@ -1789,11 +1789,22 @@ extern "C" __global__ void experience_env_step( hold_quality = sign_pos * hold_return / fmaxf(atr_pct, 1e-6f); } - /* Composite quality */ + /* ISV-adaptive reward weights: regime routing adjusts micro-reward composition. + * Volatile regime → weight momentum (price_confirm) higher. + * Stable regime → weight book aggression + hold quality higher. + * Regime transition (low stability) → reduce hold quality (don't hold through shifts). */ + float regime_stab = (isv_signals_ptr != NULL) ? isv_signals_ptr[11] : 0.5f; + float volatility = (isv_signals_ptr != NULL) ? isv_signals_ptr[2] : 0.5f; + + float w_price = price_confirm_weight * (0.5f + 0.5f * volatility); + float w_book = book_aggression_weight * (0.5f + 0.5f * regime_stab); + float w_hold = hold_quality_weight * regime_stab; + + /* Composite quality — regime-adaptive */ float quality = flow_momentum * (1.0f + vol_informed) - + price_confirm_weight * price_confirm - + book_aggression_weight * sign_pos * book_aggression - + hold_quality_weight * hold_quality + + w_price * price_confirm + + w_book * sign_pos * book_aggression + + w_hold * hold_quality - spread_penalty; reward = micro_reward_scale * tanhf(quality / micro_reward_temp); } else if (!segment_complete && fabsf(position) > 0.001f) {