TradingView workflows

Fear and Greed Index on TradingView: Sources and Proxies

CNN measures US equity sentiment; Alternative.me publishes a Bitcoin sentiment index. A TradingView script may import a sourced series or calculate a different proxy. Identify which one you have before comparing values or testing a rule.

Source review: October 17, 2026. Educational information, not investment advice.

Three readings that must stay separate

Sentiment source, scope, update timing, and replication limits
SourceMarket and inputsUpdate timing
CNN Fear & GreedUS equities; seven equally weighted components, normalized to a 0 to 100 score.As new component data arrives. Check the displayed timestamp.
Alternative.meBitcoin; price, volume, social, dominance, and search inputs.Daily. The API supplies an observation timestamp and a next-update countdown for the latest value.
This page's proxySPY momentum and inverse VIX deviation, equally weighted.Prior daily observations, held between daily updates. No imported publisher score.

CNN's seven inputs cover momentum, stock strength, breadth, put/call activity, volatility, safe-haven demand, and junk bonds. Its published summary does not supply every data-processing detail needed for an exact reproduction. A replacement ETF or a different normalization window changes the series. See CNN's methodology.

Alternative.me lists nominal weights of 25% volatility, 25% momentum/volume, 15% social media, 15% surveys, 10% dominance, and 10% trends. Surveys are marked paused; do not invent a redistribution of that weight or describe the remaining 85% as a complete replicating formula. Its methodology identifies the current index as Bitcoin-specific. See Alternative.me's source and API documentation.

Verify a TradingView script before using it

  1. Open the script description and source when available. Record the author, provider, requested symbols, formula, timeframe, and whether historical values can change.
  2. Compare several dates against the named provider at matching timestamps. A copied current value or a manually entered input is not a historical data feed.
  3. Check missing values and market closures. A US equity series held through a crypto weekend does not become a new crypto sentiment observation.
  4. Keep provider observations and proxy outputs in separate columns in your research log. Record source date, retrieval time, chart timezone, and any delay.

Data access and publication limits

A public chart does not establish permission to redistribute its underlying data. For CNN components and feeds, verify the applicable publisher and data-vendor terms before republishing; this example does not grant a license. Alternative.me permits commercial data use with attribution beside the displayed data and prohibits impersonating its service.

Pine cannot fetch arbitrary JSON URLs. Its supported data requests use TradingView data contexts. An external API address is not a ticker for request.security. Review a community script's data path before trusting claims that it displays an official index.

A transparent equity sentiment proxy in Pine v6

This educational formula combines two observable series. The multipliers and equal weights are design choices, with no fitted performance claim. It omits breadth, credit, options volume, social data, and the publishers' normalization. Label its output "Custom proxy" in charts, alerts, and exports.

Pine Script v6 · Custom proxy
//@version=6
indicator("Custom Equity Sentiment Proxy (prior daily)", overlay=false, precision=1)

// Educational model. Not CNN or Alternative.me index data.
if timeframe.in_seconds() > timeframe.in_seconds("1D")
    runtime.error("Use a standard daily or intraday chart.")

clamp(float value) =>
    math.max(0.0, math.min(100.0, value))

// Each expression uses the previous completed daily bar.
[spy, spyAverage] = request.security("AMEX:SPY", "1D", [close[1], ta.sma(close, 125)[1]], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on, ignore_invalid_symbol=true)
[vix, vixAverage] = request.security("CBOE:VIX", "1D", [close[1], ta.sma(close, 50)[1]], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on, ignore_invalid_symbol=true)

float momentum = not na(spy) and spyAverage > 0 ? clamp(50.0 + 500.0 * (spy / spyAverage - 1.0)) : na
float calm = not na(vix) and vixAverage > 0 ? clamp(50.0 - 200.0 * (vix / vixAverage - 1.0)) : na
float proxy = (momentum + calm) / 2.0

plot(proxy, "Custom proxy, 0 to 100", color=color.blue, linewidth=2, style=plot.style_stepline)
plot(momentum, "Momentum component", color=color.teal, display=display.data_window)
plot(calm, "Inverse volatility component", color=color.orange, display=display.data_window)
hline(50, "Model midpoint", color=color.gray)

Paste into the Pine Editor, save, and add to a standard SPY chart.

Recalculate a hypothetical reading

Assume the prior SPY close is 510 and its 125-day simple average is 500; the prior VIX close is 24 and its 50-day average is 20. Clamp means cap the result at 0 and 100.

Momentum = clamp(50 + 500 × (510 / 500 − 1)) = 60

Calm = clamp(50 − 200 × (24 / 20 − 1)) = 10

Custom proxy = (60 + 10) / 2 = 35

A score of 35 means only that these two rules averaged to 35. If VIX rises to 30 with its average unchanged, the raw calm score is −50 and is clamped to 0; the composite becomes 30. Clamping hides further extremes, so retain the raw observations in research.

Timing, missing data, and failure cases

Use a standard SPY daily or intraday chart. Every requested expression is offset by one daily bar; lookahead_on therefore maps prior completed values, not future closes. The daily chart intentionally shows the previous observation. Do not remove the offsets while keeping lookahead_on.

The averages need 125 SPY and 50 VIX daily observations, plus the one-bar offset. Missing inputs or nonpositive denominators produce no score. gaps_off carries observations through gaps; different source sessions, holidays, provider revisions, or data access can cause stale or differing values. Weekly and higher charts stop with an error. This indicator places no orders and contains no validated entry or exit signal.

Continue the research in Pineify

Market Insights includes a Market Tide view for call and put premium context. It measures a different quantity from either publisher's fear and greed index. Compare its observation time and units before using it alongside a proxy.

The Pine Script AI Coding Agent can help edit a documented proxy and check Pine syntax. Supply the exact formula, symbols, and timing rules; review the generated code and chart behavior. Syntax checking does not establish data rights, replication accuracy, or trading performance.

Review the volatility input separately with the VIX tracker.

Frequently asked questions

A script name does not establish its source. Check the author, input series, formula, timestamps, and permission to redistribute the data. A script calculated from SPY and VIX is a custom equity proxy, even if it uses a 0 to 100 scale.

Pine has no general HTTP client for arbitrary JSON endpoints. request.security reads TradingView symbol data; passing an API URL does not import that response. Inspect the provider outside Pine or use an available, licensed data series with a documented source.

The example averages two custom scores from prior daily SPY and VIX data. CNN uses seven equally weighted components with its own normalization and data timing. Differences are expected; matching one observation does not validate a replica.

No. A low score is a model observation, not a valuation or a reversal forecast. Fear can persist while prices fall. Any trading rule needs separate entry, exit, cost, and position-risk assumptions and testing on data not used to choose its parameters.