Animando o indicador do índice de medo e ganância da CNN

por Shenghui Yang
O Índice de Medo e Ganância (Fear and Greed Index) é um indicador popular de sentimento que mede as emoções que impulsionam os mercados financeiros. Este notebook mostra como visualizar o índice usando
AngularGauge
para o valor atual e
DateListPlot
para as tendências históricas.

Aquisição de Dados

Neste caso, uma requisição HTTP básica é suficiente para acessar os dados. No entanto, pode ser necessário incluir um cabeçalho user-agent na requisição. Normalmente, é possível encontrar a string de user-agent do navegador nas ferramentas de desenvolvedor ao realizar uma requisição online.
In[]:=
req=HTTPRequest[​​"https://production.dataviz.cnn.io/index/fearandgreed/graphdata",<|"UserAgent"->"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0"|>]
Out[]=
HTTPRequest
URL:
https://production.dataviz.cnn.io/index/fearandgreed/graphdata
ContentType: None

Verifique se a requisição foi bem-sucedida: um código de status 200 indica uma conexão bem-sucedida e transferência completa dos dados:
In[]:=
resp=URLRead[req]
Out[]=
HTTPResponse
Status: OK
Content type: application/json

Converta os dados obtidos para uma
Association
:
In[]:=
data=ImportString[resp["Body"],"RawJSON"];
Identifique os campos disponíveis nos dados acima:
In[]:=
Keys[data]
Out[]=
{fear_and_greed,fear_and_greed_historical,market_momentum_sp500,market_momentum_sp125,stock_price_strength,stock_price_breadth,put_call_options,market_volatility_vix,market_volatility_vix_50,junk_bond_demand,safe_haven_demand}
Crie uma tabela -
Tabular
- que armazene apenas o histórico (use
Once
para evitar múltiplas execuções do código)
In[]:=
tab=OnceWith{tab=ToTabular[data["fear_and_greed_historical"]["data"]]},ConstructColumnstab,"Date"->FunctionDateObjectFromUnixTime@
Floor[#x]
1000
,"Day","FGIdx"->Function[Ceiling@#y],"Rating"->Function[#rating]​​//Most
Out[]=
Tabular
Row count: 251
Column count: 3

Limpe os dados intermediários armazenados:
In[]:=
data=.

Design do Indicador

Utilize o código abaixo para criar um indicador semelhante ao exibido na página da CNN:
Construa um efeito de ponte de pedra ao redor do indicador usando a função
Annulus
, especificando os raios interno e externo:
In[]:=
ri=3;​​ro=4.6;
Liste o intervalo angular correspondente a cada segmento do anel parcial:
In[]:=
segmentAnnulus={​​{135.5,180},​​{99.5,134.5},​​{81.5,98.5},​​{45.5,80.5},​​{0,44.5}​​};
Projete um indicador no formato de um semidisco:
In[]:=
Clear[g]
In[]:=
g[t_]:=AngularGauge[t,{0,100},ScaleOrigin->{π,0},GaugeStyle->StandardOrange,ImageSize->100];
Destaque o segmento do anel que corresponde à direção indicada pelo ponteiro do indicador:
In[]:=
styledAnnulus[v1_,v2_,input_]:=With[{s=Annulus[{0,0},{ri,ro},{v1Degree,v2Degree}]},If[Floor@v1<input<Ceiling@v2,{EdgeForm[{Thick,StandardBlue}],StandardOrange,s},{Cyan,s}]​​]
A função posiciona as palavras nas posições corretas com a orientação apropriada:
In[]:=
PlaceWord[txt_String,r_,θ_]:=Rotate[Text[Style[txt,10,FontFamily->"Helvetica",Black,Bold],r*{Cos[θ],Sin[θ]}],θ-π/2]
Gere um gráfico do Índice de Medo e Ganância da CNN, incluindo uma série temporal dos valores do índice:
Manipulate​​With{idx=tab[k,"FGIdx"],date=tab[k,"Date"]},ColumnGraphicsstyledAnnulus#11,#12,
1
100
(100-idx)180&/@segmentAnnulus,Inset[g[idx],{0,0},{0,0},Scaled[0.86`]],PlaceWord["EXTREME\nFEAR",ro-0.5`,157.75`°],PlaceWord["FEAR",ro-0.35`,117°],PlaceWord["NEUTRAL",ro-0.35`,90°],PlaceWord["GREED",ro-0.35`,63°],PlaceWord["EXTREME\nGREED",ro-0.5`,22.25`°],Text[date,{0,5.`}],ImagePadding{{2,2},{20,1}},ImageSize420,DateListPlot
,{k,1,Length[tab],1},SaveDefinitionsTrue
Out[]=

CITE ESTE NOTEBOOK

Animate the CNN fear and greed index gauge​
by Shenghui Yang​
Wolfram Community, STAFF PICKS, April 18, 2026
​https://community.wolfram.com/groups/-/m/t/3694627