Skip to main content

Options & Positioning Tools

These tools answer questions like:

  • "What is the options market saying about NVDA?"
  • "Which stocks is the crowd getting scared of right now?"
  • "Where is futures positioning most stretched β€” what's a crowded trade?"
  • "Find stocks where smart money is quietly building a bullish position"
  • "Is copper futures positioning already priced-in bullish?"

Tools at a glance​

ToolWhat it doesCoverage
options_sentimentFull options positioning read for one stock, or a batch comparison~557 US-optionable names
find_oppatternResolve a plain-language options-behavior phrase to a scan tokenβ€”
options_scanScan all US optionable names for a specific options-behavior pattern~557 US names
positioningCOT futures positioning for one commodity/FX/rate/index assetCFTC-tracked assets
cot_extremesMost crowded COT positions across all tracked marketsAll CFTC markets

options_sentiment β€” What the options market says about a stock​

Returns what the US options market is pricing in for one stock: put/call lean, implied volatility percentile, dealer gamma stability, max-pain pinning, and notable expiries β€” with plain-language read labels for each signal.

Single stock (deep read)​

Pass ticker for a full narrative payload with per-horizon breakdowns and a _guide that tells the AI exactly how to narrate each signal to a non-expert.

options_sentiment(ticker="NVDA.US")
options_sentiment(ticker="TSLA.US", as_of="2026-06-30") # historical

Batch comparison​

Pass tickers=[...] (and optionally dates=[...]) for a compact comparison grid β€” one row per ticker Γ— date cell. This is how you answer "NVDA vs AAPL, last week vs this week" without NΓ—M calls.

options_sentiment(
tickers=["NVDA.US", "AAPL.US", "TSLA.US"],
dates=["2026-07-31", "2026-08-29"]
)

Key params:

ParamDescription
tickerA US-optionable ticker (NVDA / NVDA.US) or index-ETF proxy (SPY, QQQ, GLD)
styleplain (default, layperson language) or technical
as_ofISO date for historical point-in-time snapshot
tickersBatch form β€” list of tickers
datesBatch form β€” list of ISO dates

If a ticker is not covered (covered: false), the response says so β€” never fabricate a positioning read; use the news/impact lens instead.

:::tip Index proxies For a broad-market positioning read: S&P 500 β†’ SPY, Nasdaq 100 β†’ QQQ, Dow β†’ DIA, Russell 2000 β†’ IWM, 20y Treasuries β†’ TLT, Gold β†’ GLD. :::


find_oppattern β€” Resolve an options-behavior phrase​

Translates plain-language descriptions of options-market behavior into the exact pattern tokens that options_scan and screen_unified's options leg expect.

Tense matters β€” the temporal mode is a real axis: "the crowd is afraid" (state NOW) vs "fear is building" (trend) vs "was afraid, now getting brave" (flip) resolve to different tokens.

Example inputs β†’ what comes back:

InputPattern tokenTemporal mode
"crowd is scared"fear_levellevel
"fear is building"fear_buildingrising
"was scared, now braver"fear_to_confidenceflip
"smart money buying"positioning_building_bullrising
"IV cheap"iv_cheaplevel
"one-sided / crowded"crowded_bull or crowded_bearlevel

The response also tells you the exec_path:

  • scan β†’ feed the pattern token to options_scan
  • compose β†’ the pattern needs composing with another leg (e.g. a price-trend divergence); the response includes a compose_recipe
  • unsupported β†’ no such data available; say so plainly

This resolver is free (0 credits).


options_scan β€” Scan the universe for an options pattern​

Finds stocks across the ~557 US optionable names that match an options-behavior pattern β€” ranked, each with a plain-language because explanation and the underlying metrics.

options_scan(pattern="fear_building")
options_scan(pattern="iv_cheap,positioning_building_bull") # AND-combine with CSV

The pattern token comes from find_oppattern. Multiple tokens in a CSV are AND-combined; the first token owns the ranking.

Key params: horizon (long = conviction/positioning lens, short = gamma/near-term), min_strength, limit (default 15).

:::note US only options_scan covers ~557 US-optionable names only. For non-US stocks, options data isn't available β€” say so and use the news/impact lens instead.

Options history window is ~1 month. Older-period questions ("fearful in May") aren't supported. :::


positioning β€” COT futures positioning​

CFTC Commitment of Traders (COT) futures positioning for a single commodity, FX pair, rate, or equity index. Returns the current net positioning percentile for commercials (the "smart money"), large speculators, and small speculators β€” plus a historical series.

This is the non-equity equivalent of options_sentiment β€” for assets that don't have an options market but do have CFTC futures data.

Ticker formats:

Asset classFormatExamples
CommoditiesSYMBOL.COMMCOPPER.COMM, GOLD.COMM, WTI.COMM
FXPAIR.FOREXEURUSD.FOREX, USDJPY.FOREX
Government bondsISO2-TENOR.GBUS-10Y.GB, JP-10Y.GB
Equity indicesTICKER.USSPY.US, QQQ.US

:::caution Bond positioning is inverted For .GB and .MM assets, long futures = positioned for lower yields (i.e. bullish on the bond price). The tool accounts for this inversion automatically, but keep it in mind when narrating. :::


cot_extremes β€” Where positioning is most stretched​

Returns assets with the most extreme COT positioning β€” near historical highs or lows for any spec group. Useful for identifying crowded trades and potential mean-reversion setups.

cot_extremes(asset_class="commodity") # most crowded commodity positions
cot_extremes(limit=20) # top 20 across all markets

Key params: asset_class (filter to commodity, forex, rates, equity), limit (default 15).


Pair with news for the full picture​

Options/COT positioning answers how the market is positioned but not why. The most informative reads pair positioning with news:

CombinationInsight
Bullish news + bullish positioningGood news may be priced in β€” upside limited
Bullish news + bearish positioningPositioning hasn't caught up β€” potential catch-up move
Bearish news + bullish crowded positioningUnwind risk β€” position is fragile

Use asset_pulse (stocks/ETFs) or commodity_pulse (commodities) to get both lenses in one call.


Routing guide​

You want to…Use
"What is the options market saying about NVDA?"options_sentiment(ticker="NVDA.US")
"NVDA vs AAPL positioning, last 2 quarters"options_sentiment(tickers=[...], dates=[...])
"Find stocks the crowd is getting scared of"find_oppattern β†’ options_scan
"Add an options condition to a screener"find_oppattern β†’ screen_unified(options=...)
"Is copper futures positioning crowded?"positioning(asset="COPPER.COMM")
"What's the most crowded commodity trade?"cot_extremes(asset_class="commodity")