Monarch Castle Technologies← Live warning

VERSION 2.0 · REPRODUCIBLE SPECIFICATION

Methodology

Deterministic, keyless economic-strain screening for Türkiye. Every displayed score is produced by the public Python pipeline and stored in the downloadable JSON snapshot.

01

Estimand and horizon

The index estimates current economic-strain pressure over the next 0–30 days. It is a screening statistic, not probability of recession, devaluation, market fall, or policy decision. “Early warning” means detecting abnormal co-movement before slow aggregate releases fully reflect it.

02

Public inputs

ChannelSource / seriesFrequencyWeight
Lira dislocationTCMB official USD/TRY XMLBusiness day30%
Imported energyTCMB USD/TRY × FRED/EIA DCOILBRENTEUBusiness day25%
Reserve bufferFRED/IMF TRESEGTRM052NMonthly20%
Consumer confidenceFRED/OECD CSCICP02TRM460SMonthly15%
Narrative strainGoogle News RSS; three fixed Turkish queriesSeven-day sample10%

No account, paid API, language model, or manually entered value is required.

03

Robust normalization

For current feature x and historical baseline B:

z = (x − median(B)) / (1.4826 × median(|B − median(B)|))

If median absolute deviation is zero, population standard deviation is used. Directional pressure:

A(z) = clamp(100 × (max(0,z) − 0.5) / 2.5, 0, 100)

Normal or favorable movement scores zero; a +3 robust-z adverse movement reaches 100.

04

Channel equations

Lira dislocation

L = 0.65 A(z[5-session TRY depreciation]) + 0.35 A(z[20-session volatility])

Both baselines use the preceding 60 observations, excluding current value.

Imported energy burden

Pₜ = BrentUSDₜ × USDTRYₜ
E = A(z[5-observation return of P])

Dates are inner-joined; market values are not forward-filled.

Reserve buffer and consumer confidence

M = 0.70 A(z[adverse 1-month change]) + 0.30 clamp(100 × (adverse 3-month % − 2) / 10, 0, 100)

Declines increase pressure. Robust monthly baseline uses up to 36 prior changes.

Narrative strain

D = Σ term weights / unique articles
N = clamp(100 × (D − 0.12) / 0.88, 0, 100)

Queries and Turkish stress lexicon are fixed in source code. URLs are deduplicated; no generative interpretation is used.

05

Aggregation and warning bands

Raw = Σ(wᵢsᵢ) / Σ(wᵢ), over available channels

Five-point concurrence bonus applies only when at least one market channel (lira or energy) and one independent macro channel (reserves or confidence) each score 45 or higher. Final score is clamped 0–100.

ScoreBand
0–24.9Baseline
25–44.9Watch
45–64.9Elevated
65–79.9High
80–100Severe

06

Missing data and confidence

Failed channels may retain last validated component for at most 72 hours and are visibly marked. Older failures become unavailable. Available weights are renormalized. Confidence is High only at 5/5 live channels, Medium at 4/5, otherwise Low. Source dates and retention state are serialized in output.json.

07

Reproduction

  1. Clone repository.
  2. Install requirements.txt.
  3. Run python pipeline/tr_economic_sentiment_pipeline.py.
  4. Run python -m unittest discover -s tests -v.
  5. Inspect data/output.json. GitHub Actions runs same commands every six hours.

Generated timestamp, input identifiers, evidence, weights, intermediate statistics, and final score are recorded. Historical revisions can change later reproduction; archive JSON for exact as-of comparison.

08

Limitations

Not a causal model. Monthly series arrive with lags and may be revised. TCMB rates are references, not executable quotes. News coverage can be editorially skewed despite deduplication. Thresholds are transparent engineering priors, not fitted recession probabilities. Validate archived outputs against preregistered outcomes before operational use.