Files
FXandRatesDashboard/__pycache__/generate.cpython-312.pyc
T

273 lines
34 KiB
Plaintext
Raw Normal View History

2026-04-12 20:13:22 +00:00
Ë
2026-04-12 20:35:22 +00:00
ŽÜixã óºdZddlZddlZddlZddlZddlmZmZddlmZddl Z ddl
2026-04-12 20:13:22 +00:00
Z ejjdd«Zejjdd«Zejjdd«Zd Zd
dd d d
dœddddœddddœdddœdœZddddddddddddœ Zddiddid did!did"did#œZd$d%d&d'œd(d%d)d'œd*d%d+d'œd,d-d.d'œd/d0d.d'œd1d2d.d'œd3d%d.d'œd4œZid5d6d7d%d8œd9d:d;d%d8œd<d=d>d%d8œd?d@dAd-d8œdBdCdDd-d8œdEdFdGd-d8œdHdIdJd0d8œdKdLdMd0d8œdNdOdPd0d8œdQdRdSd2d8œdTdUdVd2d8œdWdXdYd2d8œdZd[d\d0d8œd]d^d_d0d8œd`dadbd0d8œdcddded0d8œdfdgdhdid8œdjdkdid8œdldmdnd8œdodpdnd8œdqdrdsd8œdtdudsd8œdvdwdxd8œdydzd{d8œd|d}d~d8œdœ¥Zd€dddƒœd„d…d‚dƒœd†d‡dˆdƒœd‰dŠdˆdƒœd‹dŒddƒœdŽdddƒœd‘d’d“dƒœd”d•d“dƒœd–œZid—d˜“d™dš“d›dœ“ddž“dŸd “d¡d¢“d£d¤“d¥d¦“d§d¨“d©dª“d«d¬“d­d®“d¯d°“d±d²“d³d´“dµd¶“d·d¸“d¹dºd»d¼œ¥Zd½d¾d¿dÀdÁœZidÂdÓdÄdÅ“dÆdÇ“dÈdÉ“dÊdË“dÌdÍ“dÎdÏ“dÐdÑ“dÒdÓ“dÔdÕ“dÖdדdØdÙ“dÚdÛ“dÜdÝ“dÞdß“dàdá“dâdã“dädådædçdèdédꜥZdë„Zdödì„Zd÷dí„Zdødî„Zdùdï„Zdð„Z dñ„Z!dò„Z"dødó„Z#dô„Z$e%dõk(re$«yy)úué
FX RADAR — Data Generation Pipeline
Fetches global yields, commodities, ETFs, vol data, FX, and news.
Outputs data.json which the HTML dashboard reads.
Run locally: python generate.py
Run via GitHub Actions: automatic on schedule
éN)ÚdatetimeÚ timedelta)ÚPathÚ FRED_API_KEYÚÚFINNHUB_API_KEYÚ GOV_API_KEYz data.jsonú^IRXú^FVXú^TNXú^TYX)Ú1MÚ2YÚ5YÚ10YÚ30Y)rrr)rr)ÚUSÚUKÚGermanyÚJapanrÚ3MÚ6MÚ1YrÚ3YrÚ7YrÚ20Yr) ÚDGS1MOÚDGS3MOÚDGS6MOÚDGS1ÚDGS2ÚDGS3ÚDGS5ÚDGS7ÚDGS10ÚDGS20ÚDGS30ÚIRLTLT01DEM156NÚIRLTLT01GBM156NÚIRLTLT01JPM156NÚIRLTLT01CAM156NÚIRLTLT01AUM156N)ÚEurozonerrÚCanadaÚ AustraliazUS 20Y+ TreasuryrÚlong)ÚnameÚcountryÚdurationzUS 7-10Y TreasuryÚmediumzUS 1-3Y TreasuryÚshortzUK GiltsrÚmixedzEurozone Govt Bondsr-zJapan Govt BondsrzUS Total Treasury)ÚTLTÚIEFÚSHYzIGLT.LzIBGL.LÚJGBSÚGOVTz
US2Y.GBONDÚus2yzUS 2Y)ÚkeyÚlabelr2z US10Y.GBONDÚus10yzUS 10Yz US30Y.GBONDÚus30yzUS 30Yz
UK2Y.GBONDÚuk2yzUK 2Yz UK10Y.GBONDÚuk10yzUK 10Yz UK30Y.GBONDÚuk30yzUK 30Yz
DE2Y.GBONDÚde2yz
Germany 2Yz DE10Y.GBONDÚde10yz Germany 10Yz DE30Y.GBONDÚde30yz Germany 30Yz
JP2Y.GBONDÚjp2yzJapan 2Yz JP10Y.GBONDÚjp10yz Japan 10Yz JP30Y.GBONDÚjp30yz Japan 30Yz
IT2Y.GBONDÚit2yzItaly 2Yz IT10Y.GBONDÚit10yz Italy 10Yz FR10Y.GBONDÚfr10yz
France 10Yz ES10Y.GBONDÚes10yz Spain 10Yz
2026-04-12 20:35:22 +00:00
CA2Y.GBONDÚca2yz Canada 2Yr.Úca10yz
2026-04-12 20:13:22 +00:00
Canada 10YÚau2yz Australia 2Yr/Úau10yz
Australia 10YÚnz2yzNew Zealand 2Yú New ZealandÚnz10yzNew Zealand 10YÚch10yzSwitzerland 10YÚ SwitzerlandÚse10yz
Sweden 10YÚSwedenÚno10yz
Norway 10YÚNorway)z CA10Y.GBONDz
AU2Y.GBONDz AU10Y.GBONDz
NZ2Y.GBONDz NZ10Y.GBONDz SW10Y.GBONDz SE10Y.GBONDz NO10Y.GBONDÚgoldÚGoldz$/oz)r=r1ÚunitÚsilverÚSilverÚwtiz WTI Crudez$/bblÚbrentz Brent CrudeÚnatgasz Natural Gasz$/MMBtuÚcopperÚCopperz$/lbÚwheatÚWheatu¢/buÚcornÚCorn)zGC=FzSI=FzCL=FzBZ=FzNG=FzHG=FzZW=FzZC=FÚSPYzS&P 500ÚQQQz
Nasdaq 100ÚIWMz Russell 2000ÚEEMz EM EquitiesÚFXIzChina Large CapÚEWJzJapan EquitiesÚEWZzBrazil EquitiesÚEWGzGermany EquitiesÚEWUz UK EquitiesÚUUPzUS Dollar IndexÚFXEzEuro ETFÚFXYzYen ETFÚFXBzGBP ETFÚFXAzAUD ETFÚFXCzCAD ETFÚGLDzGold ETFÚUSOzOil ETFzAgriculture ETFz
Energy SectorzFinancials Sector)ÚDBAÚXLEÚXLFzVIX (S&P 500 Vol)zVXN (Nasdaq Vol)zMOVE (Bond Vol)zVIX Short-Term ETF)z^VIXz^VXNz^MOVEÚVIXYzEURUSD=XÚEURUSDzGBPUSD=XÚGBPUSDzUSDJPY=XÚUSDJPYzUSDCHF=XÚUSDCHFzAUDUSD=XÚAUDUSDzNZDUSD=XÚNZDUSDzUSDCAD=XÚUSDCADzUSDSEK=XÚUSDSEKzUSDNOK=XÚUSDNOKzUSDCNY=XÚUSDCNYzUSDMXN=XÚUSDMXNzUSDBRL=XÚUSDBRLzUSDZAR=XÚUSDZARzUSDINR=XÚUSDINRzUSDKRW=XÚUSDKRWzUSDTRY=XÚUSDTRYzUSDPLN=XÚUSDPLNÚUSDHUFÚUSDCZKÚUSDSGDÚUSDIDRÚUSDTHBÚDXY)zUSDHUF=XzUSDCZK=XzUSDSGD=XzUSDIDR=XzUSDTHB=XzDX-Y.NYBcóDtsy d|}tddddœ}tj||d¬«}|j«|j «}t |t «rt|«d kry|d
}t|«dk\r|d nd}|jd «}|r|jd «nd}||t||z
d «nd} |||d
k7rt||z
2026-04-12 20:35:22 +00:00
|z d
zd «nd}
|| |
2026-04-12 20:13:22 +00:00
|jd«dœS#t$r} td|d| «Yd} ~ yd} ~ wwxYw)z8Fetch latest EOD data from EODHD for a bond/rate symbol.Nzhttps://eodhd.com/api/eod/ÚjsonÚ)Ú api_tokenÚfmtÚorderÚlimité©ÚparamsÚtimeoutérÚcloseéédÚdate)ÚvalueÚchangeÚ
pct_changer¥z EODHD error (ú): ) ÚGOV_KEYÚrequestsÚgetÚraise_for_statusrÚ
isinstanceÚlistÚlenÚroundÚ ExceptionÚprint) ÚsymbolÚurlrŸÚdataÚlatestÚprevr¦Ú
prev_valuer§Úes ú generate.pyÚfetch_eodhd_eodr½¬sDå ØðØ*¨6¨(ÐÜ&¨vÀÈaÑPˆÜ L‰L˜ V°RÔ Ø ×ÑÔØv‰v‹xˆÜ˜$¤Ô¨T«°QªØØa‘ˆÜ˜d›) qš.ˆtAŠw¨dˆØ
˜7Ó#ˆÙ*.T—XX˜&°Dˆ
Ø16Ð1BÀzÐG]”u˜)¨1Ô-ÐcgˆðÐ  ZÐ%;À
ÈaÂô
2026-04-12 20:35:22 +00:00
5˜:ÑÑ3°cÑ9¸1Ô ð ð ØØ—JJ˜
ð
øô òÜ
 ˜x s¨1¨#Ðûðús‰A&C;Á0B
2026-04-12 20:13:22 +00:00
C;Ã; DÄDÄDcó¦tstd|«y d}|tdd|dœ}tj||d¬«}|j «|j «}|jd g«Dcgc]
}|d
d k7sŒ |Œ}}|rt
|d d
«Std
|«ycc}w#t$r}td|d|«Yd}~yd}~wwxYw)z!Fetch latest value from FRED API.z FRED key missing for Nz3https://api.stlouisfed.org/fred/series/observationsrÚdesc)Ú series_idÚapi_keyÚ file_typeÚ
sort_orderrώ
Ú observationsr¦ú.rz No valid FRED obs for z FRED error (r©)ÚFRED_KEYr³r­rÚfloatr²) rÀÚobsr»s Ú
fetch_fredrËÍå Ü
РðàØØ Øñ 
ˆô
L‰L˜ V°RÔ Ø ×ÑÔØv‰v‹xˆØŸ(™( >°2ÓLQ¸!¸G¹*ÈÓ:KŠqÐРܘ˜Q™ Ó 
2026-04-12 20:35:22 +00:00
Ш Ð ùò
2026-04-12 20:13:22 +00:00
Møô ò
2026-04-12 20:35:22 +00:00
˜y˜k¨¨Q¨CÐ ûð2ús6—AB,Á1
2026-04-12 20:13:22 +00:00
B'Á?B'ÂB,ÂB,Â'B,Â, CÂ5C à Ccó¼i}t|j««} tj||dd¬«}|D}||} t |«dk(r|d}n|d|}|j «}t |«dk\rt
t|jd«d«} t |«dk\r"t
t|jd «d«nd
}
|
r|
2026-04-12 20:35:22 +00:00
d kDrt
2026-04-12 20:13:22 +00:00
| |
2026-04-12 20:35:22 +00:00
z dz
2026-04-12 20:13:22 +00:00
d zd«nd
} | |
| t|jd«d
œ||<ŒÖ |S#t$r} td|d| «Yd
} ~ Νd
} ~ wwxYw#t$r} td| «Yd
} ~ |Sd
} ~ wwxYw)z;Fetch quotes from Yahoo Finance for a dict of ticker: name.FT©ÚperiodÚprogressÚthreadsr¡ÚCloseéÿÿÿÿr£éþÿÿÿNr)ÚpriceÚ
2026-04-12 20:35:22 +00:00
prev_closeÚ
change_pctÚ timestampz yfinance parse error (r©z yfinance batch error: )
2026-04-12 20:13:22 +00:00
ÚkeysÚyfÚdownloadr°Údropnar±ÚilocÚstrÚindexr²)
Ú tickers_dictrÎÚresultsÚ ticker_listr·Útickerr1Ú close_seriesÚclosesÚlastr¹Úchgr»s
Úfetch_yf_quotesrççs{à€GÜ+€Kð{‰{˜;¨vÀÈtÔà Aˆ Ñ'ˆ
AÜ# (Ø#'¨¡=Là#'¨¡=°Ñ#8%×.Üv“; !Ò ¤ v§{¡{°2¡Ó!7¸Ó;DÜ?BÀ6»{ÈaÒ?Oœ5¤ v§{¡{°2¡Ó!7¸Ô;ÐUYDÙ?CÈÈqÊœ% ¨¡¨q¡°CÑ 7¸Ô;ÐVZ"&Ø&*Ø&)Ü%(¨¯©°bÑ)9Ó%:ñ %G˜DMøñ Að6 €Nøô
ò
AÜа¸¸A¸3Ð@ûð
Aûô ò
ШР€Nûð.úsB#D9ÁC DÄ
D9Ä D6ÄD1Ä,D9Ä1D6Ä6D9Ä9 EÅEÅEcóŠi}t|j««} tj||dd¬«}|D]9}||} t |«dk(r|dj «}n|d|j «}t |«dkrŒQt
|jd«}t |«dk\rt
|jd«nd } t |«d
k\rt
|jd «nd }
t |«d k\rt
|jd
«nd } t|d«| rt|| z dz
dzd«nd |
rt||
z dz
dzd«nd | rt|| z dz
dzd«nd dœ||<Œ< |S#t$r} td|d| «Yd } ~ Œ`d } ~ wwxYw#t$r} td| «Yd } ~ |Sd } ~ wwxYw)z9Fetch longer history for calculating 1W, 1M, YTD changes.FTrÍr˜éúÿÿÿééêÿÿÿr£©Úd1_pctÚw1_pctÚm1_pctz History parse error (r©z History batch error: ) )
r1Úd1Úw1Úm1r»s
Úfetch_yf_historyrôà€GÜ+€Kð{‰{˜;¨vÀÈtÔà @ˆ Ñ'ˆ
2026-04-12 20:35:22 +00:00
@Ü# ! '™]×3! '™]¨6Ñ2×;v“; ’?Øä˜VŸ[™[¨™_Ó-Ü/2°6«{¸aÒ/?”U˜6Ÿ;™; r™?Ô+ÀTÜ/2°6«{¸aÒ/?”U˜6Ÿ;™; r™?Ô+ÀTÜ03°F³ ¸rÒ0A”U˜6Ÿ;™; ,Àtô# ^ÙACœe T¨B¡Y°¡]°cÑ$9¸ÙACœe T¨B¡Y°¡]°cÑ$9¸ÙACœe T¨B¡Y°¡]°cÑ$9¸ñ !˜
ñ! @ð8 €Nøô
ò
@ÜШx°s¸1¸>×?ûð
@ûô ò
Р+× €Nûð-úsO$F ÁAE8ÂF  C)E8Å2F Å8 FÆFÆF ÆFÆF Æ GÆ)F=Æ=Gc
2026-04-12 20:13:22 +00:00
ó‚tsgS d|dt}tj|d¬«}|j«}|ddDcgc]J}|jdd«|jd d«|jd
d«|jd d «|d
œŒLc}Scc}w#t$r}t d|«gcYd}~Sd}~wwxYw)zFetch news from Finnhub.z(https://finnhub.io/api/v1/news?category=ú&token=rÄ©r ÚheadlinerÚsourcerµrr©rÚcategoryz Finnhub news error: )Ú FINNHUB_KEYr«r)ÚarticlesÚar»sÚfetch_finnhub_newsr5å Øˆ ðظ
À'Ì+ÈÐÜ L‰L˜ bÔ Ø—6‘6“8ˆð˜c˜r 
ðð
2026-04-12 20:35:22 +00:00
ŸE™E *¨bÓŸ%™% ¨"Ó—uu˜U ŸE™E *¨aÓ 
ò 
2026-04-12 20:13:22 +00:00
ð
ùò 
øô òÜ
Ð& q  ûðús0Š:BÁABÂBÂBÂ B>Â$B9Â3B>Â9B>c
ó\tsgS tj«jd«}tj«t d¬«zjd«}d|d|dt}t j |d¬«}|j«}|j
d g«}|d
d Dcgc}|j
2026-04-12 20:35:22 +00:00
d d
«d
d|j
2026-04-12 20:13:22 +00:00
d d
«dd|j
dd
2026-04-12 20:35:22 +00:00
«|j
2026-04-12 20:13:22 +00:00
dd
2026-04-12 20:35:22 +00:00
«|j
2026-04-12 20:13:22 +00:00
d«|j
d«nd|j
d«|j
d«nd|j
d«|j
d«nd|j
d«dk(rdnddœŒÑc}Scc}w#t$r}td|«gcYd
}~Sd
}~wwxYw)z%Fetch economic calendar from Finnhub.ú%Y-%m-%dé)Údaysz1https://finnhub.io/api/v1/calendar/economic?from=z&to=röÚeconomicCalendarNé(Útimeré ér2Úeventr¹õ—ÚestimateÚactualÚimpactÚhighÚredÚorange)rÚctryÚevr¹ÚfcastÚactÚimpz Finnhub calendar error: )
rÚnowÚstrftimerr)ÚtodayÚfuturerµÚeventsr»sÚfetch_finnhub_calendarrLå Øˆ ðÜ ×
ÓÜ—,,“.¤9°!Ô#4Ñ4×>¸JˆØAÀ%ÀÈÈVÈHÐT[Ô\gÐ[hÐÜ L‰L˜ bÔ Øv‰v‹xˆØÐ,¨bÓð˜C˜R 
ððŸ˜f bÓ)¨#¨2П˜f )¨"¨RП˜i¨Ó—e‘e˜G RÓ(Ø)*¯©¨v«Ð)B˜Ÿ˜fœ
ÈØ./¯e©e°JÓ.?Ð.K˜Ÿ˜*ÐQYØ*+¯%©%°«/Ð*Eq—u‘u˜X”È8Ø !§¡ h£°6Ò 9‘u¸xó
ò 
ð
ùò 
øô òÜ
Ð*¨1¨#Ð ûðús1ŠB"FÂ,CFÆFÆFÆ F+ÆF&Æ F+Æ&F+có ddlm}d}dddœ} t j
||d¬ «}|j
«td
2026-04-12 20:35:22 +00:00
|jd t|j««||jd «}g}|jd
2026-04-12 20:13:22 +00:00
«D]T}|jxsd}d|vsŒd|vsŒtj|«}|j di«j dg«}n|s
2026-04-12 20:35:22 +00:00
td«gSg} |D}
|
2026-04-12 20:13:22 +00:00
j dd«} |
2026-04-12 20:35:22 +00:00
j dd«} |
2026-04-12 20:13:22 +00:00
j dd«}
2026-04-12 20:35:22 +00:00
|
j d«}|
j d«}|
j d«}|
j dd«}|
r|
ddnd}t|
«dkDr|
ddnd}d}| |ž tt|«j!d d«j!d!d««}tt|«j!d d«j!d!d««}|
j d"d«}|r||kDrd#n||krd$nd%}n||krd#n||kDrd$nd%}|d&k\rd'n|d(k\rd)nd)}| j'||d*| | rd+| d,ndz| t|«nd-| t|«nd-| t|«nd-||d.d/œ
2026-04-12 20:13:22 +00:00
«Œ¢td0t| ««| dd1S#t$rtd«gcYSwxYw#t"t$f$rYŒ«wxYw#t($r}
td2|
2026-04-12 20:35:22 +00:00
«gcYd}
~
Sd}
2026-04-12 20:13:22 +00:00
~
wwxYw)3uQFetch economic calendar from Finviz — data is embedded as JSON in a script tag.r)Ú
BeautifulSoupu0 bs4 not installed — skipping Finviz calendarz https://finviz.com/calendar.ashxz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zen-GB,en;q=0.9)ú
User-AgentzAccept-Languageé)Úheadersr z Finviz status: z, html length: z html.parserÚscriptrÚentriesÚ
calendarIdr·z' Finviz: no JSON entries found in pager
Ú referencer¥r
ÚforecastÚpreviousÚ
importancer¡NrÄrrr úisHigherPositiveÚbeatÚmissÚinlineérrõ🇺🇸ú)r Úfinviz)
rrrrrrr,z Finviz parsed rows: é<z Finviz calendar error: )Úbs4rÚ ImportErrorr³r­Ú status_coder°ÚtextÚfind_allÚstringrÚloadsrÈÚreplaceÚ
ValueErrorÚ TypeErrorÚappendr²)rr!Úsoupr#r"Útxtr·Úrowsr»Úev_nameÚrefÚdtr
r&r'r(Údate_strÚtime_strr,Úa_valÚf_valÚ higher_goodrsÚfetch_finviz_calendarrKis7ðÝ
-€Cà€Gð
CÜ L‰L˜ g°rÔ Ø ×ÑÔÜ
Ð! !§-¡- °ÄÀAÇFÁFà ¸}ИQŸV™V ]ÓðˆØ—m‘m HÓ ˆFØ—-‘-Ò% 2ˆCؘCÒ L°CÒ$7Ü—z‘z #“ØŸ(™( 6¨2Ó2°9¸bÓAÙð  ñÜ Ð ˆˆØó' ˆ—ee˜G (ˆ—%‘%˜  RÓ(ˆv˜"ˆBØ—UU˜8“_ˆFØ—u‘u˜ZÓ(ˆHØ—u‘u˜ZÓ(ˆHØŸ˜|¨QÓ/ˆJá"$r˜#˜2w¨"ˆHÜ$'¨£G¨b¢Lr˜"˜Ry°bˆˆÐ! hÐ&:ð Ü!¤# f£+×"5Ñ"5°c¸2Ó">×"FÑ"FÀsÈBÓ"OÓP!¤# h£-×"7Ñ"7¸¸RÓ"@×"HÑ"HÈÈbÓ"QÓREØ"#§%¡%Ð(:¸AÓ">"Ø).°ª™vÀuÈuÂ}¹VÐZb™à).°ª™vÀuÈuÂ}¹VÐZb˜ðš?%¸ZÈ1º_±ÐRZˆ K‰KØ Ø Ø ˜ ±S¨¨3¨%¨q¡k¸AØ)1Ð)=œ˜
À5Ø*2Ð*>œ˜ÀEØ&,Ð&8”s˜6”{¸ØØ ö
ð9' ôR Ð&¤s¨4£y CRˆyÐøôS òÜ
Њ ðûôl#¤IÐÙðûô* òÜ
Ð)¨!¨Ð ûðúsiJ5BK&Â$K&Â)AK&Ã2B'K&ÆBKÈ7A=K&Ê5KË
KËK#Ë K&Ë"K#Ë#K&Ë& L Ë/LË>L ÌL c
óDddlmcm}ddg}g}|D\}} tj|dddi¬«}|j |j «}|jd «ddD]€}|jd
d «}|jd d «} |jd
d «}
ttj|
d«j««} |sŒj|j||| | ddœ«Œ‚ŒÔ|S#t$rd} YŒ-wxYw#t$r} td|d| «Yd} ~ Œd} ~ wwxYw)z3Fetch news from free RSS feeds (no API key needed).rN)z:https://feeds.content.dowjones.io/public/rss/mw_topstoriesÚ MarketWatch)z.https://feeds.bbci.co.uk/news/business/rss.xmlz BBC BusinessrÄrz FXRadar/1.0)r r!z.//itemÚtitlerÚlinkÚpubDatez%a, %d %b %Y %H:%M:%S %ZÚgeneralrûz
RSS error (r©)Úxml.etree.ElementTreeÚetreeÚ ElementTreer«Ú
fromstringÚcontentÚfindallÚfindtextÚintrÚstrptimer×r?)
ÚETÚfeedsrþÚrootÚitemrNrOÚpubÚpub_tsr»s
Úfetch_rss_newsra½s@ç VØ
€Eð€HØò2‰ ˆˆVð ˜S¨"°|À]Ð6SÔTˆ—=‘= §¡Ó+ˆDØŸ  YÓ°Ð
ØŸ
 g¨rÓ2Ø—}} V¨RÓ0Ø—m‘m I¨rÓ2ðÜ ¤×!2Ñ!2°3Ð8RÓ!S×!]Ñ!]Ó!_Ó`Ø—OOØ$)Ø"(Ø#Ø$*Ø$-ñ %õñ
ð 2ð, €OøôØ’Fðûôò M & ¨¨Q¨CÐ0× 1ûð 2úsB™BC:Â-C)à C:à C:Ã) C7Ã4C:Ã6C7Ã7C:Ã: DÄDÄDcó˜ tj||dd¬«}|dj«}t|«dkryt |j
d«}t|«dk\rt |j
d«nd}t|«dk\rt |j
d «nd}t|«d
k\rt |j
d «nd}t
|d «|rt
||z d
z
2026-04-12 20:35:22 +00:00
dzd«nd|rt
2026-04-12 20:13:22 +00:00
||z d
z
2026-04-12 20:35:22 +00:00
dzd«nd|rt
||z d
z
dzd«dœSddœS#t$r} td|d| «Yd} ~ yd} ~ wwxYw)zEFallback: fetch a single ticker individually if batch download fails.FrÍr˜NrÒz Single ticker history error (r©) rÙ)
r1s
Úfetch_single_ticker_historyrcßsIðÜ{‰{˜6¨&¸5È%ÔPˆØg×Ü ˆv‹;˜Š?ØÜV—[[ %ˆÜ'*¨6£{°aÒ'7ŒU6—;;˜r
#¸TˆÜ'*¨6£{°aÒ'7ŒU6—;;˜r
#¸TˆÜ(+¨F« °rÒ(9ŒU6—;;˜
$¸tˆä˜4 “^Ù9;”e˜T B™Y¨™]¨cÑ1°1ÔÙ9;”e˜T B™Y¨™]¨cÑ1°1ÔÙ9;”e˜T B™Y¨™]¨cÑ1°1Ó
ð
ðBFñ 
ð
øô òÜ
Шx°s¸1¸#Ðûðús#:D%½C#D%Ä!D%Ä% E Ä.EÅE có‡2—td«tdtj«jd««td«tj«j «dziiiiiiggiiiiidœ}td«i}t j«D]>\}}t|«}||||<td|d|d «tjd
«Œ@|jd «|jd «|jd
«|jd«|jd«|jd«|jd«|jd«|jd«|jd«|jd«dœ |dd<td«tj«D]—\}}i}|j«D]A\}}t|«}||||<td|d|d|d «tjd
«ŒC|sŒ_|jd«|jd«|jd«dœ|d|<Œ™td«tddd d!d"œ«}|j«D]\Š2} td‰2d| d#«Œ|djdi«}
|
jd$«|jd«r |dd#|
d$<|
jd%«|jd«r |dd#|
d%<|
2026-04-12 20:13:22 +00:00
jd&«|jd «r |d d#|
d&<|
jd'«|jd!«r |d!d#|
d'<|
jd(«€ûtd)« d*D]b} tj| d+d,¬-«} | j rŒ(| d.j#«}
t%|
«d/kDsŒJt'|
2026-04-12 20:35:22 +00:00
j(d0«}n|
jd(«€w|
jd$«}|
2026-04-12 20:13:22 +00:00
jd%«}|-|+t-|||z
d2zzd3«|
d(<td4|
d(d «n&|$t-|d5z
d3«|
d(<td6|
d(d «|
jd(« td7«|
|dd<||dd8<td9«t/t0j«Dcic] \}}||d:Œ
c}}«}i}td;t3|j5«««t0j«D\}}|d:Š2|d<}|j‰2«}|rC|jd=d>«|d=<|||<td‰2d?|d#d@|jdAdB«dC«Œft7|‰2«}|sŒu|jd=d>«|d=<|||<td‰2dD|d#d@|jdAdB«dC«Œ¸||dE<tdF«t/t8«}|j«D]-\Š2} td‰2d?| d#d@| jdAdB«dC«Œ/||dG<tdH«t/t:j«Dcic] \}}||d:Œ
c}}«}|j«D]V\Š2} t=ˆ2fdI„t:j«D«i«}|jdJd>«| dJ<|jdKd>«| dK<ŒX||dL<tdM«tt>«}|j«D]\Š2} td‰2d| d#«Œ||dN<tdO«t/t@«}|j«D]-\Š2} td‰2d| d#d@| jdAdB«dC«Œ/||dP<tdQ«tCdR«tCdS«z}tE«} || z}!tG«}"g}#|!D]1}$|$dTddU}||"vsŒ|"jI|«|#jK|$«Œ3|#ddV|dW<tdt%|#«dX«tdY«tM«}%tO«}&tdZt%|&««td[t%|%««|&r.|%Dcgc]}|jd\d«dk7sŒ|Œ}'}|&|'z|d]<nD|%r|%|d]<n<td^«tj«jd_«d`dadbdcdcdcddddeœ g|d]<tdft%|d]««tdg«tPrqtRj«D]z\}(}tU|(«})|)rS|dh|)dh<|dJ|)dJ<|)|di|d<<|)dj}|)jdk«}*|*d@|*dldmnd>}+td|dhd|d |+«tjdn«Œ|tdot%|di«dp«idqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“dd‚“dƒd„“d…d†“d‡dˆ“d‰dŠ“d‹dŒ“ddŽ“ddd‘d’“d“d”d•dd—d˜d™dšd›œ¥},|,j«D]f\}-\}}|dij|-«}.|.sŒ |.jdj«Œ2||dvri|d|<|d|j|«ŒY|.dj|d||<Œhtdœ«n td«tWtX«}/t[|/dž«5}0t]j^||0dŸt`¬ «ddd«|/jc«jdd¡z }1td¢d«td£tXd@|1d¤›«td¦t%|d««td¨t%|dE««tdªt%|dG««td¬t%|dP«d­«td®t%|dW««td°t%|d]««td²t%|di««td«y#t*$r}td1|«Yd}~Œd}~wwxYwcc}}wcc}}wcc}w#1swYŒLxYw)³Nz<============================================================uFX RADAR Data Generation — z%Y-%m-%d %H:%M:%S UTCÚZ)Ú generated_atÚyieldsÚ commoditiesÚetfsÚfxÚ
volatilityÚ bond_etfsÚnewsÚcalendarÚ policy_ratesÚmacroÚ sentimentÚ scenariosÚ gov_bondsz+
[1/8] Fetching US yield curve from FRED...z US z: r)gš™™™™™É?rrrrrrrrrrr) Úy1mÚy3mÚy6mÚy1Úy2Úy3Úy5Úy7Úy10Úy20Úy30rgrz*
[2/8] Fetching global yields from FRED...z ú )r|rxrzz0
[3/8] Fetching yield data from Yahoo Finance...ÚUS_3MÚUS_5YÚUS_10YÚUS_30Y)r
r r r
rurzr|r~rxz6 US 2Y missing from FRED, trying yfinance fallback...)zZT=FÚ5dF)rz US 2Y futures fallback error: g
×£p=
×?r/z! US 2Y interpolated from 3M/5Y: g333333Ã?z US 2Y estimated from 5Y: u= âš  US 2Y still null — carry/spread logic will be limitedÚUS_yfz
[4/8] Fetching commodities...r1z Commodity raw keys:r=r]rz: $r1ú?z%)z (fallback): $rhz
[5/8] Fetching ETFs...riz
[6/8] Fetching bond ETFs...c3ó:K|]\}}|dk(sŒ|Œy­w)r1)Ú.0Úvr1s €r¼ú <genexpr>zmain.<locals>.<genexpr>…s øèø€ÒJ™4˜1˜a¸¸&¹ ÀTÓ8I”QÑJùsƒr2r3rlz"
[7/8] Fetching volatility data...rkz
2026-04-12 20:35:22 +00:00
[8/8] Fetching FX rates...rjz