Trade Signals

Get Vanna Charm Flow Signal

Second-order greek dealer-hedging pressure (vanna + charm).

Answers: which way is the modeled dealer book likely being pulled to hedge right now from IV moves and time decay, independently of spot?

  • Vanna (dVega/dSpot) — dealer delta changes when IV moves. A morning IV drop tends to make a book modeled short vanna buy underlying (the "vol-crush rally"); direction depends on the book's composition and ownership.
  • Charm (dDelta/dTime) — decay of short-dated deltas toward expiry. In the final ~2h, where the modeled book is short calls above spot, that decay tends to pull hedging toward selling — which can accelerate afternoon drift. Modeled pressure, not a scheduled order.

Logic highlights (src/signals/basic/vanna_charm_flow.py):

  • Sum dealer_vanna_exposure + dealer_charm_exposure × charm_amplification across all strikes in gex_by_strike.
  • charm_amplification — 1.0 most of the day, ramps to 1.5 in the final ~40% of the session (charm flow dominates into the close).
  • score = clip(combined / vc_norm, [-1, 1]); vc_norm defaults to 5e7 (may be scaled per symbol via normalizers).
  • Abstains (score=0) if gex_by_strike is empty.
  • Legacy rows (no dealer columns) fall back to negated market-aggregate exposures — signal still valid, less precise.

Sign convention: + score = dealer buying pressure (bullish tailwind); − score = dealer selling pressure (bearish headwind).

Params:

  • symbol (default SPY). Returns 404 if no row exists yet.

Returns:

{
  "underlying": "SPY", "timestamp": "...",
  "clamped_score": 0.42, "score": 42.0, "direction": "bullish",
  "weighted_score": 0.0, "weight": 0.0,
  "vanna_total": 18500000.0,
  "charm_total": 9200000.0,
  "charm_amplification": 1.18,
  "source": "dealer_exposure",
  "context_values": {
    "vanna_total": 18500000.0, "charm_total": 9200000.0,
    "charm_amplification": 1.18, "vc_norm": 50000000.0,
    "source": "dealer_exposure"
  },
  "score_history": [{"score": 31.2, "timestamp": "..."}, "...up to 90"]
}
  • score / clamped_score — [-100, +100] / [-1, +1]; + = bullish.
  • vanna_total — sum of dealer vanna exposure; + = dealer delta grows with spot ↑.
  • charm_total — sum of dealer charm exposure; + = dealer delta grows with time.
  • charm_amplification — [1.0, 1.5]; session-time multiplier. 1.5 = final 40%.
  • source — "dealer_exposure" | "market_exposure_negated" (legacy fallback) | "unavailable".
  • context_values — the above plus vc_norm (saturation denominator).
  • score_history — up to 90 recent points.

Trader interpretation.

  • score > +40 in the morning → vanna-driven melt-up; trend-follow upside.
  • score < −40 in the final 90 minutes → charm-driven afternoon fade; momentum shorts.
  • Crosses zero into the afternoon → pressure reversal; trim directional size.
  • charm_amplification = 1.5 means we're in the EOD acceleration window.
  • source = "market_exposure_negated" → lower-precision fallback; widen thresholds.

Page design. Two stacked horizontal bars: vanna_total and charm_total × charm_amplification, colored by sign. A small clock gauge shows charm_amplification on a 1.0→1.5 scale as "time pressure." Composite score as a big number + direction chip on top. Source chip in footer.

get/api/signals/basic/vanna-charm-flow

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/signals/basic/vanna-charm-flow
  • Auth: HTTP bearer

Query parameters

symbolstring

Response

Successful Response

unknown required

Changes

No recorded changes to this operation across all 1 revision of this API.