Gazdasági naptár
A cMind a saját gazdasági naptárát szállítja — közzétételi ütemterv, tényadatok, előrejelzések, revíziók és egy adatvezérelt hatásmodell — elsődleges hatóságokból (központi bankok és nemzeti statisztikai ügynökségek) forrásolva, nulla függőséggel a ForexFactory, FXStreet, Investing.com vagy bármely aggregator felé. Pont-időben helyes, ≥10 év történetet tart, és csatlakoztatva van a kereskedéshez, a nyilvános API-hoz, MCP-hez, cBot-okhoz, AI-hoz, riasztásokhoz és backtesztekhez. Decentralizált modul: letiltható nulla hatással a kereskedési magra.
Állapot. P0–P4 implementálva és szállítva. A domain mag, a perzisztencia (EF
calendarséma, append-only olvasás/írás, FRED + BLS + központi bank-menetrend források, config-kapuzott ingestion worker forrás szerinti frissesség-követéssel), a verziózott JWT REST API, a mobilközpontú/economic-calendarUI, az MCP eszközök, a cBot JWT API, a nagy hatású esemény riasztások, a copy-trade news-blackout szünet, a backteszt esemény overlay, az SSE stream, a HMAC-aláírt webhookok és a típusosCmindCalendarClientmind implementálva és integrációs tesztekkel ellenőrizve. A P5 extrák (meglepetés-elemzés, iCal/CSV export, kulcsszavas keresés, pluggable konszenzus) a maradék elemek — lásd az alábbi rollout fázisokat.
Mi különbözteti meg
A vezető naptárak elleni visszatérő panaszok lettek a tervezési kényszereink:
- Nincs csendes hatás-értékelés változás. A mi hatás értékelésünk determinisztikus, verziózott és auditálható. Minden változtatás egy rögzített revízió, timestamp-pel — soha nem csendes felülírás. A felhasználó pontosan láthatja, miért High egy esemény.
- Egy UTC anchor per esemény. Minden esemény egyetlen UTC pillanathoz van kötve az elsődleges forrás hivatalos ütemtervéből; a forrás saját időzónája tárolva van, és a per-felhasználó renderelés egy explicit IANA időzónát használ DST-vel a zone adatbázis által kezelt — soha nem manuális ±1h toggle.
- Teljes revíziós láncok, mindenhol. Az eredeti érték és minden revízió első osztályú, az API-n, MCP-n és cBot felületeken azonosan kitett.
- ≥10 év történet, nincs fal. Korlátozás nélküli böngészési tartomány; nincs 60 napos sapka, nincs regisztrációs kapu.
- Point-in-time építés szerint. Minden tény
KnownAt-ot hordoz (amikor mi megtudtuk) ésEffectiveAt-ot (az esemény pillanata). "Ahogy a naptár T időpontban nézett ki" egy első osztályú lekérdezés, így egy backtesztelt news szabály pontosan úgy viselkedik, mint élőben — nincs look-ahead a revizált értékek használatával a történetben.
A hatásmodell
A hatás pontszám egy tiszta, determinisztikus függvény [0, 100] intervallumban, Low / Medium / High / Critical sávokra osztva. A bemenetei csak a pontozási időpontban ismert adatok (nincs jövő szivárgás):
- Sorrend prior — egy baseline súly per indikátor osztály (a kamat döntés felülmúlja a CPI-t, ami felülmúlja egy kisebb felmérést).
- Realizált-volatility footprint — az elsődleges érintett szimbólumok median abszolút hozama az ablakban az adott sorozat múltbeli közzétételei után: "ez a közzététel történetesen eddig mozgatta az árat."
- Meglepetés érzékenység — mennyire erősen korrelált historikusan az abszolút meglepetés (egy z-score) az utána következő mozgással.
A pontszám ezeket fix súlyokkal keveri és bélyegzi egy ImpactModelVersion-nel. Az újraszámítás egy explicit, naplózott művelet, amely egy új revíziót termel — soha nem mutációt — így a pontszám mindig reprodukálható a bemeneteiből.
Country → currency → symbol mapping
A leggyakrabban idézett algo integrációs papírvágás megoldva egyszer, tiszta függvényként: egy country mapolja a saját devizáját (minden euro-területi tag belefolyik az EUR-ba), és egy deviza mapolja a jegyzési szimbólumokat, amelyek egyik lábon vagy másikon idézik. Tehát az EURUSD-t az EU és US események egyaránt érintik; az XAUUSD USD-kitettségű; az US500 USD-ra mapol. Ez vezeti a news szűrőt, az érintett-szimbólumok feloldását és a blackout matekot.
News-window politika
Egy NewsWindowRule = { minImpact, beforeMinutes, afterMinutes, currencies?, series? }. Egyetlen, megosztott, tiszta implementáció válaszol "az instant T bent van-e egy S szimbólum blackout-jában?" — használva a cBot news szűrő, a copy-trade pause és az AI risk guard által, így soha nem divergálhatnak. Bizonytalanság esetén a blackout válasz a konfigurált konzervatív értékre áll (default fail-closed), így egy adat rés nem csendben zöldlámpáz a kereskedésnek egy magas hatású közzétételen.
Point-in-time & revíziók
A tényadatok, előrejelzések és hatás pontszámok append-only-k. Minden esemény birtokol egy rendezett revíziós láncot, monoton KnownAt-ban:
Scheduled— az eseményt először ütemezték (prior hatás, nincs tény).Released— az első nyomtatott tény megérkezett.Revised— egy későbbi revideált érték megérkezett.Rescheduled— a forrás mozgatta a közzétételi pillanatot (auditálható, riasztható).Rescored— a hatás pontszám újra lett számolva egy új modell verzió alatt.
as of egy múltbeli pillanatot kérdezve pontosan a revíziót adja vissza, amit akkor ismertünk — ez a garancia, ami megöli a look-ahead-et a backtesztelt news szabályokban.
Előrejelzés / konszenzus
A közgazdászok felmérési mediánja nem szabadon publikált az elsődleges források által — ez az aggregatorok proprietary érték-hozzáadása, és mi nem gyártjuk. Az esemény séma hordoz egy nullable Forecast-ot; egy telepítés egy opcionális IForecastProvider port-on keresztül vezethet egy licencelt konszenzus feedet (bring-your-own-key, alapértelmezés szerint ki). Az előző értékek és revíziók mindig az hivatalos forrásból jönnek.
Adatforrások
Két decuplikált réteg, minden elsődleges — soha aggregator:
- Ütemterv / időzítés: FRED release calendar; nemzeti statisztikai ügynökségek (BLS, BEA, Census, Eurostat, ONS, Destatis, INSEE, e-Stat, ABS, StatCan); központi banki találkozó naptárak (Fed, ECB, BoE, BoJ, RBA, BoC, SNB, RBNZ).
- Tényértékek: FRED (vintage dátumokkal revíziókhoz és point-in-time-hoz), plusz BLS, BEA, Census, ECB SDW, Eurostat és OECD SDMX API-k.
Egy halott forrás csak annak a forrásnak a lefedettségét degradálja; a naptár tovább szolgál mindent mást és a rést frissességi metrikaként tünteti fel.
Rate limiting & a tartalék terv
A külső szolgáltatók publikálják a rate limitjeiket (FRED ~120 kérés/percek enged). A naptár úgy van építve, hogy soha nem üti meg egy szolgáltató limitjét, és hogy a throttling vagy lekapcsolás soha ne degradálja az olvasásokat:
- Proaktív throttling. Minden forrás HTTP kliense egy megosztott, thread-safe rate kapun megy keresztül, amely a kimenő kéréseket egy konfigurált költségvetésre térképezi (
App:Calendar:FredRequestsPerMinute, alapértelmezés 100 — szándékosan a szolgáltató Plafond alatt). A kérések sorba állnak és tempóznak, soha nem burst-elve. 429 Retry-Aftertiszteletben tartása. Ha egy szolgáltató valaha429 Too Many Requests-et ad vissza, a kapu a teljes forrást a szerver által kért cooldown-ra (vagyApp:Calendar:RateLimitBackoff, alapértelmezés 60s) visszaveszi a következő hívás előtt — nincs szoros újrapróbálkozási hurok.- Standard rugalmasság. Minden forrás kliens örökli az alkalmazás-szintű rugalmassági handlert (retry backoff + jitter, circuit breaker, timeouts), így az átmeneti hibák elnyelődnek és egy tartósan sikertelen forrás parkol (a lefedettsége avult lesz) anélkül, hogy a többire hatással lenne.
- A tartalék terv — a tartós olvasás-through cache. Az olvasások soha nem a szolgáltató hívásával szolgáltatódnak. Amint egy tartomány fetch-elve van, az append-only módon perzisztálódik Postgresbe és onnan szolgáltatódik örökre (lásd §"On-demand load"). Tehát még ha egy forrás rate-limited vagy le van kapcsolva, a naptár a cached, point-in-time-correct adatokból válaszol; a hiányzó span egyszerűen fedetlen marad és a következő ingestion ciklusban újrapróbálkozik. A blackout válaszok továbbá a konzervatív default-hoz fail-colnak bizonytalanság alatt, így egy adat rés soha nem zöldlámpáz a kereskedést egy közzétételen.
- Olcsó polling. Conditional fetch (ETag / If-Modified-Since / source vintage cursors) és a "fetch egy span egyszer, soha többé" cache az aktuális kérés volumenét messze bármely limit alatt tartják normál működésben — a rate kapu egy biztonsági háló, nem a közös út.
Bekapcsolás / kikapcsolás
Két független szint, pontosan mint más cMind funkciók:
- 1. szint — runtime feature toggle (
Feature.EconomicCalendar) a Features admin UI-ból kapcsolva; nincs újradeploy, élőben érvényesül. - 2. szint — white-label hard gate (
App:Branding:EnableEconomicCalendar, alapértelmezéstrue). Egy viszonteladófalse-ra állítja a funkció teljes eltávolításához; egy operátor aztán nem tudja újra engedélyezni.
Az effektív állapot Branding.EnableEconomicCalendar && FeatureToggle.EconomicCalendar. Amikor le van tiltva, a nav bejegyzés rejtett és /economic-calendar, /api/calendar/** és az MCP naptár eszközök tiszta feature-disabled 404-et adnak vissza — soha nem 500-t. A perzisztált történet megmarad runtime toggle-off-on, így az újra-engedélyezés instant.
Rollout fázisok
- P0 — domain mag (implementálva): aggregátumok, value object-ek, portok, hatásmodell, country→symbol mapping, news-window politika, két-szintű gating, teljes egység suite.
- P1 — perzisztencia + egy forrás (implementálva): EF
calendarséma (saját táblák, append-only, hot indexek), az olvasás-throughIEconomicCalendarreader point-in-timeasOf-fal, az idempotens append-only write szolgáltatás, a FRED connector egy rugalmas típusos kliens mögött, és a config-kapuzott ingestion worker; Testcontainers integrációs tesztek (perzisztencia, PIT, idempotencia, blackout). - P2 — nyilvános JWT REST API + Web UI (implementálva): a verziózott, JWT-biztosított
/api/calendar/v1API — kliens kibocsátás, token csere és a core olvasási végpontok (events, history, series, surprises, next, blackout, affected-symbols, health) scope kényszerítéssel és két-szintű gating-gel, integráció-tesztelt. Plusz a mobil-először/economic-calendaroldal — egy kapuzott, teljesen lokalizált (23 nyelv) az upcoming közzétételek agendája telefonos-barát kártyákkal, szín-sávval ellátott hatás chip-ekkel és egy MudBlazor szűrő dialog-gal (devizák + minimális hatás + egy From-date választó, hogy bármely múltbeli dátumra ugorj a teljes történeten át — nincs 60 napos sapka, nincs fal); nav bejegyzés, smoke/mobile/a11y/E2E tesztelve. Egy per-indikátor series history oldal (/economic-calendar/series/{code}, minden eseményből linkelve) listáz egy series teljes print történetét. A surprise chartok + infinite-scroll böngésző következik. - P3 — több forrás & warm-up (indított): egy core-series katalógus (CPI, Core CPI, NFP, munkanélküliség, GDP, PCE, Fed funds, kiskereskedelmi értékesítés → ezek FRED azonosítói) automatikusan seed-elve van indításkor, és egy egyszeri, idempotens, év-chunkolt proaktív backfill lehozza a ≥10 éves történetüket, így a gyakori eset warm anélkül, hogy egy felhasználó miss-re várna. Az ingestion alapértelmezés szerint be van kapcsolva (
App:Calendar:IngestionEnabled, alapértelmezéstrue): a központi banki ütemterv forrásnak nincs szüksége API kulcsra, így a FOMC / ECB / BoE döntési naptár kitöltődik a dobozból — a backfill ezeket a találkozói dátumokat tölti fel mind a közelmúlt történetében, mind a forward horizonton, így a legutóbbi hónap böngészése (vagy bármely múltbeli ablak) mutatja a találkozókat, még mielőtt bármely FRED/BLS kulcs konfigurálva lenne; az értéksorozatok kitöltődnek, amint a kulcsok be vannak állítva. A workerek tiszteletben tartják a naptár két-szintű gate-jét — egy white-label telepítés vagy a tulajdonos, aki letiltja az economic-calendar funkciót, leállítja az ingestiót, és azApp:Calendar:IngestionEnabled=falsekifejezetten kikapcsolja. Per-forrás frissesség is valósá vált: a worker rögzíti minden forrás utolsó sikeres poll-ját, egymást követő-hiba count-ot és egy tripped-circuit flag-et (perzisztálva az alkalmazás beállításaiban, cross-process), és a/healthvégpont +calendar_healthMCP eszköz egy őszintestaleverdiktet jelent per forrás. A BLS (egy 2. érték forrás) és a központi banki ütemterv forrás (FOMC / ECB / BoE döntési dátumok, backfill-elt a történeten át és szinkronizálva forward egy horizonton ablakba a worker által) kész. Még hátravan: BEA/Census/ECB-SDW/Eurostat/OECD érték források és az egyeztetési átmenet. - P4 — mély integráció: MCP eszközök (implementálva — teljes olvasási-API paritás:
calendar_events,calendar_event,calendar_history,calendar_series,calendar_surprises,calendar_next,calendar_blackout,calendar_affected_symbols,calendar_health, a funkcióra kapuzva) és a alertsEconomicEventtrigger (implementálva — egyAlertRule, amely N perccel egy upcoming közzététel előtt tüzel a választott hatáson vagy afelett, opcionálisan devizákra szűkítve; az existing alert worker által értékelve AI nélkül, deduplikálva per közzététel; létrehozvaPOST /api/alerts/rules/economic-event-en). A prop-guard news-blackout gate és a copy-trade blackout pause bent van (§5.1 — egy opcionálisApp:Copy:NewsPauseEnabled, alapértelmezés ki: egy forrás nyitás, amelynek szimbóluma Critical-hatás blackout-ban van, ki van hagyva, byte-azonos hot path ki kapcsolva). A backtest event overlay bent van —GET /api/calendar/v1/for-symbolés acalendar_events_for_symbolMCP eszköz visszaadják a point-in-time-correct eseményeket, amelyek egy szimbólumot érintenek egy ablakban, és az instance/backtest report oldal rendereli a magas hatású közzétételeket, amelyek a backtest ablakon belül estek az equity görbe alatt (így egy szerző látja, mely kereskedések landoltak NFP-n), kapuzva és lokalizálva. A teljes terv most implementálva van. - P5 — extrák: surprise analytics, iCal/CSV export, kulcsszó keresés, pluggable konszenzus.
Lásd a cBot & REST API referenciát az integrációs felületért.
Adatforrás szükséges (a funkció rejtett nélküle)
A naptár a tény/előrejelzés/előző értékeket csak egy konfigurált érték forrásból mutatja (FRED vagy BLS). App:Calendar:FredApiKey vagy App:Calendar:BlsApiKey nélkül a funkció rejtett a navigációból; ha erőltetve van engedélyezve (white-label/tulajdonos) kulcs nélkül, az oldal egy cselekvőképes "konfigurálj egy adatforrást" üzenetet mutat az üres értékek helyett, és a szűrő akció rejtett marad, amíg egy forrás be nem állítva. Az esemény sorok a series nevét mutatják (a katalógusból), nem a nyers series kódot.