track-equity-cumulative-return

Track cumulative return of stocks/indices with multi-ticker comparison, index Top N ranking, and visualization. All comparisons use S&P 500 as the fixed benchmark.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "track-equity-cumulative-return" with this command: npx skills add fatfingererr/macro-skills/fatfingererr-macro-skills-track-equity-cumulative-return

<essential_principles>

<principle name="sp500_benchmark"> **S&P 500 Fixed Benchmark (Core Methodology)**

All cumulative return analyses use S&P 500 (^GSPC) as the fixed benchmark. This is a core methodology decision:

  • S&P 500 represents the broad US equity market
  • Provides consistent, comparable baseline across all analyses
  • "vs Benchmark" = Stock Return - S&P 500 Return
  • Positive vs Benchmark indicates outperformance (Alpha)

This is hardcoded and cannot be changed. </principle>

<principle name="base_date_methodology"> **Base Date Methodology**

For cumulative return calculation, the base date is the last trading day of the previous year:

Cumulative Return = ((Final Price / Base Price) - 1) × 100%

Key methodology:

  • Analyzing 2024 → Base date is 2023-12-29 (last trading day of 2023)
  • This captures the true return from year-end investment to period end

All tickers are aligned to common trading days with data. </principle>

<principle name="four_scenarios"> **Four Analysis Scenarios**

This skill supports 4 distinct scenarios:

ScenarioModeDescriptionExample
1.aStock(s), Year OnlyAnalyze specific tickers for a single full yearNVDA, AMD in 2024 only
1.bStock(s), Year to TodayAnalyze specific tickers from a year to todayNVDA, AMD from 2022 to today
2.aIndex Top N, Year OnlyRank index components for a single full yearNasdaq 100 Top N in 2024 only
2.bIndex Top N, Year to TodayRank index components from a year to todayNasdaq 100 Top N from 2022 to today

Use --year-only flag to switch between "Year Only" (a) and "Year to Today" (b) modes. </principle>

<principle name="supported_indices"> **Supported Index Components**
Index CodeNameComponents
nasdaq100Nasdaq 100 Index~100
sp100S&P 100 Index100
dow30Dow Jones 30 Index30
soxPhiladelphia Semiconductor Index30

Top N analysis fetches all component stocks and ranks by return. </principle>

</essential_principles>

<objective> Track cumulative return performance of stocks and indices:
  1. Fetch Data: Get historical prices from Yahoo Finance (with caching)
  2. Calculate Returns: Cumulative return
  3. Benchmark Comparison: Compare against S&P 500 (fixed)
  4. Rank Analysis: Index component Top N performance ranking
  5. Visualization: dark theme PNG charts

Output: Cumulative return time series chart, performance ranking table, JSON data, Markdown report. </objective>

<quick_start>

Quick Start: Analyze Stock Cumulative Returns

cd skills/track-equity-cumulative-return/scripts
pip install pandas numpy yfinance matplotlib  # First time only

# Scenario 1.a: Stock(s), 2024 Year Only
python cumulative_return_analyzer.py --ticker NVDA AMD --year 2024 --year-only

# Scenario 1.b: Stock(s), 2022 to Today
python cumulative_return_analyzer.py --ticker NVDA AMD GOOGL --year 2022

# Scenario 2.a: Nasdaq 100 Top 10, 2024 Year Only
python index_component_analyzer.py --index nasdaq100 --year 2024 --year-only --top 10

# Scenario 2.b: Nasdaq 100 Top 20, 2022 to Today
python index_component_analyzer.py --index nasdaq100 --year 2022 --top 20

# Visualization (with charts)
python visualize_cumulative.py --ticker NVDA AMD --year 2024 --year-only
python visualize_cumulative.py --mode top20 --index nasdaq100 --year 2022 --top 20

Sample output:

{
  "skill": "track-equity-cumulative-return",
  "as_of": "2026-01-28",
  "mode": "year_to_today",
  "parameters": {
    "tickers": ["NVDA", "AMD"],
    "start_year": 2022,
    "year_only": false
  },
  "benchmark": {
    "ticker": "^GSPC",
    "name": "S&P 500",
    "cumulative_return_pct": 45.2
  },
  "summary": {
    "best_performer": "NVDA",
    "best_return": 542.2,
    "beat_benchmark_count": 2
  }
}

</quick_start>

<intake> What analysis do you need?

Scenario Selection:

  1. Scenario 1.a - Analyze stock(s) for a specific year only (e.g., "NVDA in 2024 full year")
  2. Scenario 1.b - Analyze stock(s) from a year to today (e.g., "NVDA from 2022 to today")
  3. Scenario 2.a - Index Top N for a specific year only (e.g., "Nasdaq 100 Top N in 2024")
  4. Scenario 2.b - Index Top N from a year to today (e.g., "Nasdaq 100 Top N since 2022")
  5. Methodology - Learn about cumulative return calculation

Provide your analysis parameters or select a scenario. </intake>

<routing> | User Input | Scenario | Command | |------------------------------------|----------|-----------------------------------------------------------------------------------------| | "NVDA 2024 full year", "2024 only" | **1.a** | `python cumulative_return_analyzer.py --ticker NVDA --year 2024 --year-only` | | "NVDA from 2022", "since 2022" | **1.b** | `python cumulative_return_analyzer.py --ticker NVDA --year 2022` | | "Nasdaq 100 top 10 2024 only" | **2.a** | `python index_component_analyzer.py --index nasdaq100 --year 2024 --year-only --top 10` | | "Nasdaq 100 top 20 since 2022" | **2.b** | `python index_component_analyzer.py --index nasdaq100 --year 2022 --top 20` | | "chart", "visualization" | Add | `python visualize_cumulative.py` with same parameters | | "methodology", "how" | Info | Read `references/methodology.md` |

Key flags:

  • --year-only: Analyze only the specified year (scenarios a)
  • Without --year-only: Analyze from year to today (scenarios b)
  • --top N: Select Top N for index analysis

All scripts use Yahoo Finance real data with caching. Benchmark is always S&P 500. </routing>

<reference_index> Reference Documents (references/)

FileContent
methodology.mdCumulative return calculation methodology
data-sources.mdYahoo Finance data source documentation
input-schema.mdComplete input parameter definitions
index-components.mdSupported index component lists
</reference_index>

<workflows_index>

WorkflowScenarioUse Case
quick-check.md1.a/1.bQuick check single ticker
compare.md1.a/1.bCompare multiple tickers
top20.md2.a/2.bIndex Top N analysis
</workflows_index>

<templates_index>

TemplatePurpose
output-json.mdJSON output structure definition
output-markdown.mdMarkdown report template
</templates_index>

<scripts_index>

ScriptCommand ExamplePurpose
fetch_price_data.py--ticker NVDA --start 2022-01-01Yahoo Finance data fetching
cumulative_return_analyzer.py--ticker NVDA AMD --year 2022Cumulative return calculation (1.a/1.b)
index_component_analyzer.py--index nasdaq100 --year 2022Index component analysis (2.a/2.b)
visualize_cumulative.py--ticker NVDA AMD --year 2022visualization
</scripts_index>

<input_schema_summary>

Required Parameters

ParameterTypeDescription
tickerstringStock ticker(s) - can be multiple
yearintStart year

Optional Parameters

ParameterTypeDefaultDescription
year-onlyflagfalseIf set, analyze only the specified year
indexstringnasdaq100Index type (for Top N mode)
topint20Top N to select
outputstringautoOutput file path
modestringcompareMode (compare/top20)

Note: Benchmark is hardcoded to S&P 500 (^GSPC) and cannot be changed.

See references/input-schema.md for complete parameter definitions.

</input_schema_summary>

<visualization>

Chart Specifications

Charts follow thoughts/shared/guide/bloomberg-style-chart-guide.md:

  • Background: #1a1a2e (dark blue-black)
  • Grid: #2d2d44 (dark gray-purple)
  • Primary lines: #ff6b35 (orange-red), #ffaa00 (orange-yellow)
  • Benchmark line: #004E89 (deep blue dashed)
  • Zero line: #666666 (gray dotted)

X-axis format:

  • January: Show year (e.g., "2024")
  • February-December: Show month number (e.g., "2", "3", ... "12")

Output specs:

  • Size: 14×8 inches (compare) / 16×10 inches (top20)
  • Resolution: 150 dpi
  • Format: PNG
</visualization>

<output_schema_summary>

{
  "skill": "track-equity-cumulative-return",
  "as_of": "2026-01-28",
  "mode": "year_to_today",
  "parameters": {
    "tickers": ["NVDA", "AMD"],
    "start_year": 2022,
    "year_only": false
  },
  "period": {
    "start_date": "2021-12-31",
    "end_date": "2026-01-28",
    "years_held": 4.08
  },
  "benchmark": {
    "ticker": "^GSPC",
    "name": "S&P 500",
    "cumulative_return_pct": 45.2
  },
  "summary": {
    "best_performer": "NVDA",
    "best_return": 542.2,
    "benchmark_return": 45.2,
    "beat_benchmark_count": 2
  },
  "results": [
    {
      "ticker": "NVDA",
      "name": "NVIDIA (NVDA)",
      "cumulative_return_pct": 542.2,
      "vs_benchmark": 497.0
    }
  ],
  "chart_path": "output/cumulative_return_2026-01-28.png"
}

See templates/output-json.md for complete output structure. </output_schema_summary>

<success_criteria> Successful execution should produce:

  • Cumulative return time series data
  • Cumulative return for each ticker
  • Comparison against S&P 500 benchmark (vs benchmark)
  • Performance ranking (sorted by return descending)
  • Beat benchmark statistics
  • visualization chart (output/*.png)
  • JSON result output (optional)

Chart X-axis: Year shown in January, month numbers (2-12) for other months. </success_criteria>

<extended_examples>

Example 1: Single Stock Full Year Analysis (Scenario 1.a)

Analyze NVIDIA's performance in 2024:

cd skills/track-equity-cumulative-return/scripts
python cumulative_return_analyzer.py --ticker NVDA --year 2024 --year-only

Expected output:

==========================================================================================
Cumulative Return Analysis Report
==========================================================================================
Period: 2024 Full Year (2023-12-29 ~ 2024-12-31)
Benchmark: S&P 500
==========================================================================================

Rank  Ticker  Name                 Cum. Return   vs Bench
----------------------------------------------------------------------
1     NVDA    NVIDIA (NVDA)          +185.52%  +160.97% ✓
----------------------------------------------------------------------
Bench ^GSPC   S&P 500                 +24.54%
==========================================================================================

Statistics:
  - Best performer: NVDA (+185.52%)
  - Beat benchmark: 1 / 1

Example 2: Multi-Stock Long-Term Comparison (Scenario 1.b)

Compare FAANG stocks from 2020 to today:

python cumulative_return_analyzer.py --ticker META AAPL AMZN NFLX GOOGL --year 2020
python visualize_cumulative.py --ticker META AAPL AMZN NFLX GOOGL --year 2020

Example 3: Semiconductor Index Top 10 (Scenario 2.a)

Find top 10 semiconductor performers in 2024:

python index_component_analyzer.py --index sox --year 2024 --year-only --top 10
python visualize_cumulative.py --mode top20 --index sox --year 2024 --year-only --top 10

Example 4: Dow 30 Long-Term Analysis (Scenario 2.b)

Analyze Dow 30 components from 2020:

python index_component_analyzer.py --index dow30 --year 2020 --top 30

</extended_examples>

<error_handling>

Input Validation

The skill includes comprehensive input validation:

  • Ticker validation: Checks format, applies corrections (e.g., BRK.BBRK-B, FBMETA)
  • Year validation: Must be between 1970 and current year
  • Index validation: Must be one of: nasdaq100, sp100, dow30, sox
  • Top N validation: Must be positive integer ≤ 100

Network Retry Logic

Yahoo Finance API calls include automatic retry:

  • Up to 3 retry attempts
  • Exponential backoff (2s, 3s, 4.5s delays)
  • Clear error messages on failure

Data Quality Checks

  • Minimum data points required (5 rows)
  • NaN percentage threshold (max 10%)
  • Invalid price detection (non-positive values)
  • Automatic data cleaning with warnings

</error_handling>

<testing>

Running Tests

cd skills/track-equity-cumulative-return/scripts/tests
python test_calculations.py

Test Coverage:

  1. Cumulative return formula - Validates calculation accuracy
  2. Cumulative return series - Validates time series generation
  3. Validators - Tests all input validation functions
  4. Golden cases - Structure validation of expected results

Golden Cases

Located in scripts/tests/golden_cases.json:

  • NVDA 2024 full year (expected: 170-190% return)
  • AMD 2024 full year (expected: -20% to -10% return)
  • S&P 500 2024 benchmark (expected: 20-28% return)
</testing>

<data_governance>

Data Sources

SourceTypeCachingNotes
Yahoo FinancePrimary12-hour cacheFree, public API

Caching

  • Cache directory: scripts/cache/
  • Cache format: Parquet (efficient storage)
  • Cache validity: 12 hours
  • Clear cache: python fetch_price_data.py --clear-cache

Known Limitations

  1. Survivorship bias: Index components are current, not historical
  2. Price-only returns: Does not include dividends
  3. Yahoo Finance rate limits: Heavy usage may be throttled

</data_governance>

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

list-china-today-macro-news

No summary provided by upstream source.

Repository SourceNeeds Review
General

monitor-etf-holdings-drawdown-risk

No summary provided by upstream source.

Repository SourceNeeds Review
General

usd-reserve-loss-gold-revaluation

No summary provided by upstream source.

Repository SourceNeeds Review
General

compute-precious-miner-gross-margin

No summary provided by upstream source.

Repository SourceNeeds Review