fix(rl): gate controller target 0.02→0.10, dead zone 0.5×/2× → 0.2×/5×
Controller oscillated: 3 dones at step 15k spiked EMA above 2×target, triggering thousands of steps of tightening that killed trades. Higher target (10% vs 2%) matches the natural trade frequency at b=16. Wider dead zone (5× above / 0.2× below) prevents single-batch spikes from triggering tighten/relax oscillation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -56,12 +56,12 @@ extern "C" __global__ void rl_gate_threshold_controller(
|
||||
float frd_long = isv[RL_FRD_GATE_THR_LONG_INDEX];
|
||||
float frd_short = isv[RL_FRD_GATE_THR_SHORT_INDEX];
|
||||
|
||||
if (dones_ema < target * 0.5f) {
|
||||
if (dones_ema < target * 0.2f) {
|
||||
// Trades well below target — relax gates.
|
||||
conf_thr *= adjust;
|
||||
frd_long *= adjust;
|
||||
frd_short *= adjust;
|
||||
} else if (dones_ema > target * 2.0f) {
|
||||
} else if (dones_ema > target * 5.0f) {
|
||||
// Trades well above target — tighten gates.
|
||||
conf_thr /= adjust;
|
||||
frd_long /= adjust;
|
||||
|
||||
@@ -1616,7 +1616,7 @@ impl IntegratedTrainer {
|
||||
(crate::rl::isv_slots::RL_PI_SAMPLE_P_MIN_INDEX, 0.015),
|
||||
(crate::rl::isv_slots::RL_OUTCOME_ALPHA_INDEX, 0.1),
|
||||
(crate::rl::isv_slots::RL_GATE_WARMUP_STEPS_INDEX, 10000.0),
|
||||
(crate::rl::isv_slots::RL_GATE_DONES_TARGET_INDEX, 0.02),
|
||||
(crate::rl::isv_slots::RL_GATE_DONES_TARGET_INDEX, 0.10),
|
||||
(crate::rl::isv_slots::RL_GATE_CONF_MIN_INDEX, 0.0),
|
||||
(crate::rl::isv_slots::RL_GATE_CONF_MAX_INDEX, 0.50),
|
||||
(crate::rl::isv_slots::RL_GATE_FRD_MIN_INDEX, 0.0),
|
||||
|
||||
Reference in New Issue
Block a user