Files
AlphaPulse/backend/src/alphapulse/calendar/catalog.py
T

106 lines
5.4 KiB
Python

from dataclasses import dataclass
from typing import Literal
@dataclass(frozen=True)
class Indicator:
name: str
importance: int
unit: str = "%"
rate_channel: Literal["inverse", "ambiguous"] = "ambiguous"
@dataclass(frozen=True)
class Family:
country_code: str
source: str
indicators: tuple[str, ...]
COUNTRIES = {"US": "美国", "EA": "欧元区", "GB": "英国", "DE": "德国", "FR": "法国"}
INDICATORS = {
# 项目分级,不冒充第三方星级;rate_channel 仅描述利率传导下的参考方向。
"cpi_mom": Indicator("CPI 月率", 4, rate_channel="inverse"),
"cpi_yoy": Indicator("CPI 年率", 5, rate_channel="inverse"),
"core_cpi_mom": Indicator("核心 CPI 月率", 5, rate_channel="inverse"),
"core_cpi_yoy": Indicator("核心 CPI 年率", 5, rate_channel="inverse"),
"ppi_mom": Indicator("PPI 最终需求月率", 3, rate_channel="inverse"),
"ppi_yoy": Indicator("PPI 最终需求年率", 3, rate_channel="inverse"),
"payrolls": Indicator("非农就业新增", 5, "万人"),
"unemployment": Indicator("失业率", 4),
"pce_mom": Indicator("PCE 物价月率", 3, rate_channel="inverse"),
"core_pce_mom": Indicator("核心 PCE 物价月率", 4, rate_channel="inverse"),
"pce_yoy": Indicator("PCE 物价年率", 4, rate_channel="inverse"),
"core_pce_yoy": Indicator("核心 PCE 物价年率", 5, rate_channel="inverse"),
"gdp": Indicator("实际 GDP 年化季率", 4),
"fed_rate": Indicator("联邦基金利率目标上限", 5, rate_channel="inverse"),
"umich_sentiment": Indicator("密歇根大学消费者信心指数", 3, "点"),
"initial_claims": Indicator("初请失业金人数(季调)", 4, "万人"),
"continued_claims": Indicator("续请失业金人数(季调)", 3, "万人"),
"adp_jobs": Indicator("ADP 私营部门就业净变动(月度)", 4, "万人"),
"eia_crude": Indicator("EIA 商业原油库存变动(不含战略储备)", 4, "万桶"),
"eia_gasoline": Indicator("EIA 汽油库存变动", 3, "万桶"),
"eia_distillate": Indicator("EIA 精炼油库存变动", 3, "万桶"),
}
FAMILIES = {
"cpi": Family("US", "bls", ("cpi_mom", "cpi_yoy", "core_cpi_mom", "core_cpi_yoy")),
"ppi": Family("US", "bls", ("ppi_mom", "ppi_yoy")),
"jobs": Family("US", "bls", ("payrolls", "unemployment")),
"pce": Family("US", "bea", ("pce_mom", "pce_yoy", "core_pce_mom", "core_pce_yoy")),
"gdp": Family("US", "bea", ("gdp",)),
"fomc": Family("US", "fed", ("fed_rate",)),
"umich": Family("US", "umich", ("umich_sentiment",)),
"initial_claims": Family("US", "dol", ("initial_claims",)),
"continued_claims": Family("US", "dol", ("continued_claims",)),
"adp_jobs": Family("US", "adp", ("adp_jobs",)),
"eia_stocks": Family("US", "eia", ("eia_crude", "eia_gasoline", "eia_distillate")),
}
STAGES = {"preliminary": "初值", "final": "终值", "initial": "首发值", "updated": "更新估计", "advance": "初值", "second": "二次估计", "third": "终值"}
STAGES["flash"] = "快报值"
# 欧洲指标保留自己的口径,不复用美国年化 GDP 或美国通胀的方向标签。
INDICATORS.update({
"eu_cpi_mom": Indicator("CPI 月率", 4),
"eu_cpi_yoy": Indicator("CPI 年率", 4),
"eu_core_cpi_yoy": Indicator("核心 CPI 年率", 4),
"hicp_mom": Indicator("HICP 月率", 4),
"hicp_yoy": Indicator("HICP 年率", 4),
"core_hicp_yoy": Indicator("核心 HICP 年率", 4),
"gdp_qoq": Indicator("实际 GDP 季率", 4),
"gdp_yoy": Indicator("实际 GDP 年率", 4),
"ilo_unemployment": Indicator("ILO 失业率", 3),
"uk_unemployment": Indicator("ILO 失业率(三个月)", 3),
"ecb_deposit": Indicator("存款便利利率", 5),
"ecb_main": Indicator("主要再融资利率", 5),
"ecb_marginal": Indicator("边际贷款利率", 5),
"bank_rate": Indicator("英国央行基准利率", 5),
})
FAMILIES.update({
"ecb_rate": Family("EA", "ecb", ("ecb_deposit", "ecb_main", "ecb_marginal")),
"ea_hicp": Family("EA", "eurostat", ("hicp_yoy", "hicp_mom", "core_hicp_yoy")),
"ea_gdp": Family("EA", "eurostat", ("gdp_qoq", "gdp_yoy")),
"ea_jobs": Family("EA", "eurostat", ("ilo_unemployment",)),
"boe_rate": Family("GB", "boe", ("bank_rate",)),
"uk_cpi": Family("GB", "ons", ("eu_cpi_yoy", "eu_cpi_mom", "eu_core_cpi_yoy")),
"uk_gdp": Family("GB", "ons", ("gdp_qoq", "gdp_yoy")),
"uk_jobs": Family("GB", "ons", ("uk_unemployment",)),
"de_cpi": Family("DE", "destatis", ("eu_cpi_yoy", "eu_cpi_mom", "hicp_yoy", "hicp_mom")),
"de_gdp": Family("DE", "destatis", ("gdp_qoq", "gdp_yoy")),
"de_jobs": Family("DE", "destatis", ("ilo_unemployment",)),
"fr_cpi": Family("FR", "insee", ("eu_cpi_yoy", "eu_cpi_mom", "hicp_yoy", "hicp_mom")),
"fr_gdp": Family("FR", "insee", ("gdp_qoq", "gdp_yoy")),
"fr_jobs": Family("FR", "insee", ("ilo_unemployment",)),
})
UMICH_HOME = "https://www.sca.isr.umich.edu/"
UMICH_HISTORY = "https://data.sca.isr.umich.edu/technical-docs.php"
UMICH_INFO = "https://data.sca.isr.umich.edu/survey-info.php"
UMICH_CSV = "https://www.sca.isr.umich.edu/files/tbmics.csv"
UMICH_REPORTS = "https://data.sca.isr.umich.edu/reports.php"
SCHEDULE_URLS = {
"bls": "https://www.bls.gov/schedule/news_release/bls.ics",
"bea": "https://www.bea.gov/news/schedule/ics/online-calendar-subscription.ics",
"fed": "https://www.federalreserve.gov/newsevents/calendar.htm",
}