Api V2 Signals Basic Positioning-Trap Get
Crowd-positioning trap — squeeze/flush risk from one-way crowding.
Flags setups where tape behavior is starting to invalidate crowd direction — the classic squeeze/flush patterns.
- +score (squeeze risk): puts crowded + aggressive put-buying + up-momentum + price above gamma flip + short-gamma regime → upside squeeze fuel.
- −score (flush risk): calls crowded + aggressive call-buying + down-momentum + price below gamma flip + short-gamma → downside air-pocket.
Uses signed net smart-money premium (buy − sell) from flow_contract_facts when available — more informative than legacy total_premium because opposite-side buying nets out (a big put-buy
- big put-sell should not count as crowd skew).
Logic highlights (src/signals/basic/positioning_trap.py):
short_crowding = clip((put_call_ratio − 1.05) / 0.35, [0, 1])
long_crowding = clip((0.95 − put_call_ratio) / 0.35, [0, 1])
put_skew = max(0, −smart_imbalance)
call_skew = max(0, +smart_imbalance)
squeeze = 0.45·short_crowding + 0.25·put_skew
+ 0.15·clip(momentum_5bar / 0.004, [0,1])
+ 0.10·above_flip + 0.05·neg_gex
flush = 0.45·long_crowding + 0.25·call_skew
+ 0.15·clip(−momentum_5bar / 0.004, [0,1])
+ 0.10·below_flip + 0.05·neg_gex
score = clip(squeeze − flush, [-1, 1])
- smart_imbalance = (smart_call_net − smart_put_net) / (|call_net| + |put_net|), abstaining when denominator < $100K.
Params:
- symbol (default SPY). Returns 404 if no row exists yet.
Returns:
{
"underlying": "SPY", "timestamp": "...",
"clamped_score": 0.52, "score": 52.0, "direction": "bullish",
"weighted_score": 0.0, "weight": 0.0,
"smart_imbalance": -0.41,
"smart_imbalance_source": "signed_net_premium",
"momentum_5bar": 0.0025,
"context_values": {
"put_call_ratio": 1.28, "smart_imbalance": -0.41,
"smart_imbalance_source": "signed_net_premium",
"momentum_5bar": 0.0025, "close": 577.24,
"gamma_flip": 574.5, "net_gex": -1.4e9
},
"score_history": [{"score": 31.0, "timestamp": "..."}, "...up to 90"]
}
- score / clamped_score — [-100, +100] / [-1, +1]. + = squeeze risk, − = flush risk.
- smart_imbalance — [-1, +1]; + = call-buy heavy, − = put-buy heavy. Counter-intuitively, put-heavy imbalance drives +score (squeeze fuel).
- smart_imbalance_source — "signed_net_premium" (best) | "signed_top_level" (older fields).
- momentum_5bar — 5-bar price %, e.g. 0.0035 = +0.35%.
- context_values.put_call_ratio — float, typically [0.5, 2.0].
- context_values.close / gamma_flip — used to derive above_flip/below_flip.
- context_values.net_gex — signed; < 0 amplifies both sides.
- score_history — up to 90 recent points.
Trader interpretation.
- score > +50 → upside squeeze setup. Long-delta; size up if close > gamma_flip AND net_gex < 0.
- score < −50 → downside flush setup. Put debit spreads; trim longs.
- Moderate magnitude (±25–50) plus contradictory tape_flow_bias → the trap may already be unwinding; wait.
- smart_imbalance_source = "signed_top_level" → lower-precision fields; signal still valid.
Page design. Horizontal ±100 "trap meter" with "Flush Risk" (left) and "Squeeze Risk" (right). Decomposition panel showing the five input factors as mini-bars (short/long_crowding, put/call_skew, momentum, above/below_flip, neg_gex) so the trader sees why. Contextual footer with put_call_ratio, momentum_5bar %, close vs gamma_flip, net_gex sign.
Request
- Base URL: https://api.zerogex.io (the document declares no server; this is the origin it was published from)
- URL: https://api.zerogex.io/api/v2/signals/basic/positioning-trap
- Auth: HTTP bearer
Query parameters
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.