Tighten qualified signal gate
This commit is contained in:
@@ -39,13 +39,15 @@ export function qualifiesSetup(setup: TradeSetup, config: ActivationConfig): boo
|
||||
if (setup.current_price != null && liveRiskReward(setup, setup.current_price) < config.min_rr) {
|
||||
return false;
|
||||
}
|
||||
const targetProbability = primaryTargetProbability(setup);
|
||||
if (targetProbability == null || targetProbability <= 0) return false;
|
||||
if ((setup.confidence_score ?? 0) < config.min_confidence) return false;
|
||||
// Residual cross-sectional momentum is the core selection (long-only). While
|
||||
// the gate is active, shorts never qualify; the percentile floor is enforced
|
||||
// only when a percentile is attached, otherwise defer to the floors.
|
||||
// the gate is active, shorts never qualify; missing ranks do not qualify
|
||||
// because the production edge depends on this cross-sectional selection.
|
||||
if (config.min_momentum_percentile > 0) {
|
||||
if (setup.direction === 'short') return false;
|
||||
if (setup.momentum_percentile != null && setup.momentum_percentile < config.min_momentum_percentile) {
|
||||
if (setup.momentum_percentile == null || setup.momentum_percentile < config.min_momentum_percentile) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user