Animation de la jauge de l’indice de peur et de cupidité du CNN

par Shenghui Yang
Article original
L’indice de peur et de cupidité est un indicateur de sentiment populaire qui mesure les émotions à l’origine des marchés financiers. Ce notebook montre comment visualiser l’indice à l’aide de
AngularGauge
pour la valeur actuelle et de
DateListPlot
pour les tendances historiques.

Acquisition des données

Dans ce cas, une requête HTTP de base suffit pour accéder aux données. Cependant, il peut être nécessaire d’inclure un en-tête agent-utilisateur dans votre requête. Vous pouvez généralement trouver la chaîne agent-utilisateur de votre navigateur en consultant les outils de développement lorsque vous effectuez une requête en ligne.
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

Vérifiez si la requête a réussi. Un code d’état de 200 indique une connexion réussie et un transfert complet des données :
In[]:=
resp=URLRead[req]
Out[]=
HTTPResponse
Status: OK
Content type: application/json

Convertissez les données récupérées en
Association
 :
In[]:=
data=ImportString[resp["Body"],"RawJSON"];
Trouvez les champs disponibles dans les données ci-dessus :
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}
Créez un
Tableau
qui ne stocke que l’historique (utilisez
Once
pour empêcher que le code ne s’exécute plusieurs fois).
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

Effacez les données intermédiaires stockées :
In[]:=
data=.

Conception de jauge

Utilisez le code ci-dessous pour créer une jauge similaire à celle présentée sur la page web du CNN :
Construisez un effet de pont de pierre encerclant la jauge en utilisant la fonction
Annulus
. Spécifiez à la fois les rayons intérieur et extérieur :
In[]:=
ri=3;​​ro=4.6;
Indiquez la plage angulaire correspondant à chaque segment de l’anneau partiel :
In[]:=
segmentAnnulus={​​{135.5,180},​​{99.5,134.5},​​{81.5,98.5},​​{45.5,80.5},​​{0,44.5}​​};
Concevez une jauge sous la forme d’un demi-disque :
In[]:=
Clear[g]
In[]:=
g[t_]:=AngularGauge[t,{0,100},ScaleOrigin->{π,0},GaugeStyle->StandardOrange,ImageSize->100];
Mettez en évidence le segment de l’anneau qui s’aligne sur la direction indiquée par l’aiguille de la jauge :
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}]​​]
La fonction place les mots dans les positions correctes avec l’orientation appropriée :
In[]:=
PlaceWord[txt_String,r_,θ_]:=Rotate[Text[Style[txt,10,FontFamily->"Helvetica",Black,Bold],r*{Cos[θ],Sin[θ]}],θ-π/2]
Générez un graphique de l’indice de peur et de cupidité du CNN, y compris un tracé de série temporelle des valeurs de l’indice :
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[]=

CITER CE NOTEBOOK