fix(oneshot): add momentum scoring, widen gates to fix rare-entry problem
Root causes identified and fixed:
1. SPREAD_MAX 0.02 → 0.04 (biggest culprit — near-expiry books often have
0.03 spread, hard gate was blocking all valid entries)
2. tteMax 90s → 150s (direction is established by TTE=150s on 5m markets;
previous 90s window was too narrow, skipped the "trend building" phase)
3. Added momentum as scoring factor W_MOMENTUM=0.30 ("follow where odds
are moving" — midSlope6s from FeatureEngine now drives 30% of entry score)
4. Added SLOPE_CANCEL momentum gate (-0.0020): if dominant side's mid is
actively falling (reversal risk), block entry regardless of mid level.
New reason code: SIG_FADING_DOMINANT
5. Revised score weights: MID 45%→35%, IMBALANCE 35%→20%, SPREAD 20%→15%,
MOMENTUM 0%→30%
6. Score threshold 0.55 → 0.42 (now calibrated for 4-factor scoring)
7. minDominantMid default 0.60 → 0.58, tteMin 20 → 15
8. Spread gate now checks min(up.spread, down.spread) — dominant side only
needs to be tradeable, not both sides
Updated .env and .env.example defaults to match new parameters.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
89a7803aa8
commit
8296c4129b
+11
-8
@@ -150,19 +150,22 @@ ONESHOT_BASE_RISK_USDC=5
|
||||
# ── Entry filters ──────────────────────────────────────────────────────
|
||||
|
||||
# Minimum mid price for the dominant side to qualify as an entry candidate.
|
||||
# Example: 0.60 means the token must be priced at ≥60% probability of winning.
|
||||
# Example: 0.58 means the token must be priced at ≥58% probability of winning.
|
||||
# Lower = more trades but more uncertain outcomes. Higher = fewer but more confident.
|
||||
ONESHOT_MIN_DOMINANT_MID=0.60
|
||||
# Recommended range: 0.55–0.65. The momentum gate provides additional conviction filtering.
|
||||
ONESHOT_MIN_DOMINANT_MID=0.58
|
||||
|
||||
# Minimum composite score to trigger entry (0–1).
|
||||
# Score is based on: mid price strength (45%), order-book imbalance (35%), spread (20%).
|
||||
ONESHOT_SCORE_THRESHOLD=0.55
|
||||
# Score = mid strength (35%) + momentum direction (30%) + book imbalance (20%) + spread (15%).
|
||||
# Lower threshold captures more "decent but not perfect" setups.
|
||||
ONESHOT_SCORE_THRESHOLD=0.42
|
||||
|
||||
# TTE (time-to-expiry) window in seconds for entry.
|
||||
# Only enter when the market is between TTE_MIN and TTE_MAX seconds from closing.
|
||||
# Narrowing this window means entering later when direction is clearer.
|
||||
ONESHOT_TTE_MIN=20
|
||||
ONESHOT_TTE_MAX=90
|
||||
# TTE_MAX=150 captures the "direction establishment" phase (last 2.5 minutes).
|
||||
# TTE_MIN=15 ensures enough time to get a fill before market locks.
|
||||
# Tighter window = higher conviction but fewer entries per session.
|
||||
ONESHOT_TTE_MIN=15
|
||||
ONESHOT_TTE_MAX=150
|
||||
|
||||
# Minimum shares at the best bid AND best ask for the depth hard gate
|
||||
ONESHOT_MIN_TOP_SIZE=10
|
||||
|
||||
Reference in New Issue
Block a user