<essential_principles>
<principle name="transmission_verification">
**Transmission Verification Instead of Prediction**
This skill focuses on "verifying narratives with data":
- Input: Community/news claims that "Platinum trends may lead or drive the Brazilian stock market"
- Output: Results of transmission hypothesis testing on long-term time series
No price prediction, only answers: "Does the transmission structure from Platinum to the Brazilian stock market exist in the data?"
</principle>
<principle name="lead_lag_cross_correlation">
**Lead-Lag Judgment via Cross-Correlation**
Use Cross-Correlation to scan the range [-lead_lag_max, +lead_lag_max]:
corr(r_ewz, r_platinum.shift(lag))
- lag > 0: Platinum leads EWZ
- lag < 0: EWZ leads Platinum
- lag ≈ 0: Synchronous movement
Typical setting: Weekly frequency with lag max = 52 (one year), find the lag with the maximum |corr|.
</principle>
<principle name="regime_awareness">
**Regime-Dependent Correlation**
The correlation between Platinum and the Brazilian stock market has cyclical characteristics:
- linked_upcycle: Both trends move upward in the same direction, with a stable transmission structure
- decoupled: Correlation breaks, each moves independently
- brazil_idiosyncratic: Brazil-specific risks (politics/exchange rate/commodity structure) dominate
Long-term regime judgment uses trend consistency within the regime_window (default 104 weeks ≈ 2 years).
</principle>
<principle name="transmission_strength_score">
**Transmission Strength Score (0–100)**
Quantify transmission credibility by integrating three dimensions:
| Dimension | Weight | Description |
|---|
| best_lead_lag_corr | 30% | Best lead-lag correlation coefficient |
| rolling_corr_stability | 30% | Proportion and continuity of rolling corr > 0 |
| trend_agreement | 40% | Degree of long-term trend consistency |
Score interpretation: ≥70 Strong transmission, 50-69 Moderate, <50 Weak/unstable.
</principle>
<principle name="data_source">
**Data Sources**
Mainly use Yahoo Finance (free, no API key required):
- Platinum Futures:
- Brazilian Stock Market ETF:
Frequency recommendation: 1wk (weekly) for long-term analysis, avoid daily frequency noise interference.
Alignment method: inner join (only retain common trading days) to avoid false correlation caused by filling values.
</principle>
</essential_principles>
<objective>
Quantitatively verify the long-term transmission relationship between "Platinum → Brazilian Stock Market (EWZ)":
- Data Acquisition: Obtain historical prices of Platinum futures and EWZ from Yahoo Finance
- Dual-Axis Chart and Normalized Chart: Bloomberg-style original value dual-axis chart + normalized single-axis comparison
- Lead-Lag Analysis: Use cross-correlation to determine whether Platinum leads EWZ and the lag period
- Rolling Correlation: Observe the time-varying structure of the correlation via rolling correlation
- Regime Judgment: Determine the current transmission regime based on long-term trend consistency
- Transmission Strength Score: Comprehensive score (0-100) to quantify transmission credibility
Output: Transmission strength score, lead-lag determination, regime label, monitoring list, Bloomberg-style charts.
</objective>
<quick_start>
Step 1: Install Dependencies
bash
pip install yfinance pandas numpy matplotlib scipy
Step 2: Execute Complete Analysis
bash
cd scripts
python analyze.py --start 2003-01-01
Step 3: Generate Bloomberg-Style Visualization Charts
bash
python visualize.py --start 2003-01-01
# Output to: output/platinum_vs_ewz_YYYY-MM-DD.png
Output Example:
json
{
"signal": "transmission_moderate",
"confidence": "medium",
"transmission_strength_score": 74,
"best_lead_lag": {
"lag_weeks": 12,
"meaning": "Platinum leads EWZ by ~12 weeks",
"corr": 0.52
},
"rolling_corr": {
"window": 52,
"latest": 0.41,
"positive_share_5y": 0.68
},
"regime_label": "linked_upcycle",
"monitoring_notes": [
"If PL=F breaks through the long-term range, observe whether EWZ turns bullish within 8-16 weeks",
"Require 52-week rolling corr to remain positive for at least 26 weeks as confirmation",
"If Platinum surges but EWZ stays flat and corr turns negative, it is regarded as a regime break"
]
}
</quick_start>
<intake>
What analysis do you need?
- Quick Check - View the current transmission status between Platinum and the Brazilian stock market
- Complete Analysis - Execute full transmission verification and generate a report
- Visualization Charts - Generate Bloomberg-style dual-axis charts and related analysis charts
- Methodology Learning - Understand the principles of transmission analysis, cross-correlation, and regime judgment
Please choose or directly provide analysis parameters.
</intake>
<routing>
| Response | Action |
|------------------------------|----------------------------------------------|
| 1, "quick", "check" | Read `workflows/analyze.md` and execute with default parameters |
| 2, "full", "analyze" | Read `workflows/analyze.md` and execute |
| 3, "chart", "plot" | Read `workflows/visualize.md` and execute |
| 4, "learn", "methodology", "why" | Read `references/methodology.md` |
| Provide parameters (e.g., date/ticker) | Read `workflows/analyze.md` and execute with parameters |
After routing, read the corresponding document and execute.
</routing>
<directory_structure>
analyze-platinum-to-brazil-equities-transmission/
├── SKILL.md # This file (router)
├── skill.yaml # Frontend display metadata
├── manifest.json # Skill metadata
├── workflows/
│ ├── analyze.md # Full transmission analysis workflow
│ └── visualize.md # Visualization workflow
├── references/
│ ├── data-sources.md # Data sources and alternatives
│ ├── methodology.md # Transmission analysis methodology
│ └── input-schema.md # Complete input parameter definition
├── templates/
│ ├── output-json.md # JSON output template
│ └── output-markdown.md # Markdown report template
├── scripts/
│ ├── analyze.py # Main analysis script
│ ├── fetch_data.py # Data fetching tool (Yahoo Finance)
│ └── visualize.py # Bloomberg-style visualization
└── examples/
└── sample_output.json # Sample output
</directory_structure>
<reference_index>
Methodology: references/methodology.md
- Cross-correlation lead-lag analysis
- Rolling Correlation time-varying structure
- Regime judgment logic
- Transmission strength score calculation
Data Sources: references/data-sources.md
- Yahoo Finance (PL=F, EWZ)
- Frequency processing and alignment
- Backup data sources
Input Parameters: references/input-schema.md
- Complete parameter definitions and default values
- start_date, frequency, corr_window, lead_lag_max, etc.
</reference_index>
<workflows_index>
| Workflow | Purpose | Usage Scenario |
|---|
| analyze.md | Full transmission analysis | When verifying transmission narratives |
| visualize.md | Generate visualization charts | When needing Bloomberg-style charts |
| </workflows_index> | | |
<templates_index>
| Template | Purpose |
|---|
| output-json.md | JSON output structure definition |
| output-markdown.md | Markdown report template |
| </templates_index> | |
<scripts_index>
| Script | Command | Purpose |
|---|
| analyze.py | --start DATE [--end DATE] [--freq 1wk]
| Full transmission analysis |
| fetch_data.py | --start DATE [--end DATE] [--freq 1wk]
| Data fetching and caching |
| visualize.py | --start DATE [--end DATE]
| Bloomberg-style visualization |
| </scripts_index> | | |
<input_schema>
<parameter name="start_date" required="true">
**Type**: string (ISO YYYY-MM-DD)
**Description**: Analysis start date
**Example**: "2003-01-01"
**Note**: EWZ was listed in July 2000, it is recommended not to set earlier than 2000-07-01
</parameter>
<parameter name="end_date" required="false">
**Type**: string (ISO YYYY-MM-DD)
**Description**: Analysis end date (default: today)
**Example**: "2026-01-28"
</parameter>
<parameter name="frequency" required="false">
**Type**: string
**Default**: "1wk"
**Options**: "1d" / "1wk" / "1mo"
**Description**: Data frequency. 1wk or 1mo is recommended for long-term analysis
</parameter>
<parameter name="platinum_ticker" required="false">
**Type**: string
**Default**: "PL=F"
**Description**: Platinum price ticker
</parameter>
<parameter name="brazil_ticker" required="false">
**Type**: string
**Default**: "EWZ"
**Description**: Brazilian stock market proxy ticker
</parameter>
<parameter name="normalize_base" required="false">
**Type**: number
**Default**: 100
**Description**: Normalization base
</parameter>
<parameter name="corr_window" required="false">
**Type**: int
**Default**: 52
**Description**: Rolling correlation window (in frequency units)
</parameter>
<parameter name="lead_lag_max" required="false">
**Type**: int
**Default**: 52
**Description**: Maximum scan period for lead/lag
</parameter>
<parameter name="regime_window" required="false">
**Type**: int
**Default**: 104
**Description**: Long-term regime judgment window
</parameter>
<parameter name="output_mode" required="false">
**Type**: string
**Default**: "both"
**Options**: "markdown" / "json" / "both"
</parameter>
</input_schema>
<output_schema>
Refer to the complete structure definition in
.
Summary:
json
{
"signal": "transmission_strong | transmission_moderate | transmission_weak | inconclusive",
"confidence": "high | medium | low",
"transmission_strength_score": 74,
"best_lead_lag": {
"lag_weeks": 12,
"corr": 0.52,
"meaning": "Platinum leads EWZ by ~12 weeks"
},
"rolling_corr": {
"window": 52,
"latest": 0.41,
"positive_share_5y": 0.68
},
"regime_label": "linked_upcycle | decoupled | brazil_idiosyncratic",
"monitoring_notes": ["..."],
"artifacts": {
"charts": ["output/platinum_vs_ewz_YYYY-MM-DD.png"]
}
}
</output_schema>
<success_criteria>
When the analysis is successful, it should produce: