Problem
Iranian market data can vary by provider, availability, and historical coverage. A polished output is only useful if unsupported periods and incomplete data stay visible instead of being silently treated as complete.
An automated market-data and analytics pipeline for Iranian equities, combining daily market snapshots, historical analytics, validation, provider fallbacks, and a hosted interactive dashboard.
I designed and built a Python-based market intelligence pipeline for the Iranian stock market. The system collects and normalizes market data, validates coverage and data quality, calculates historical risk and performance metrics, and publishes a browser-based dashboard automatically.
The hosted pipeline starts its daily calculation cycle at 20:00 Tehran time. Historical periods from 1 to 10 years are displayed only when the underlying source data provides sufficient calendar coverage.
This is a data engineering, financial analytics, and automation project. It does not provide trading signals, guaranteed returns, portfolio recommendations, or investment advice.
Iranian market data can vary by provider, availability, and historical coverage. A polished output is only useful if unsupported periods and incomplete data stay visible instead of being silently treated as complete.
Research-oriented users need a broad daily market view plus repeatable historical descriptive analytics, while credentials and heavy calculation remain outside the browser.
Validate coverage before publishing labels, normalize providers into one analytics path, and separate hosted broad-market delivery from a more flexible local research workflow.
Heavy calculations, provider access, validation, and publish decisions happen before deployment. The browser receives generated, validated outputs rather than credentials or raw provider logic.
Broad-market symbol coverage, market breadth, gainers and decliners, plus volume and value rankings.
Selectable 1Y–10Y periods, period return, annualized volatility, maximum drawdown, and TEDPIX-relative analytics where overlapping data is sufficient.
Browser-side search, filtering and sorting, with CSV export for validated published outputs.
Historical-coverage checks, normalized provider outputs, and explicit publish rules that prevent unsupported periods from appearing complete.
Multi-provider market-data architecture with fallbacks, automated GitHub Actions processing, generated static data, and scheduled deployment.
Python CLI support for custom Persian ticker symbols, arbitrary Jalali date ranges, provider selection, caching, CSV exports, and TEDPIX-relative analysis.
Provider credentials and heavy calculations stay outside the browser. Historical analytics are precomputed during the scheduled pipeline, and the dashboard renders only the validated outputs produced by that run.
The local Python workflow supports Persian ticker symbols, arbitrary Jalali start and end dates, provider selection, caching, reusable CSV exports, and TEDPIX-relative analysis.
Upstream limitations stay visible instead of being hidden behind a polished interface. Validation determines what the user is allowed to see.
A 1Y–10Y label is published only when the source series has enough calendar coverage for that period.
Multiple providers reduce dependence on a single upstream source and feed a normalized analytics path.
Risk and performance metrics are produced before deployment so hosted interactions remain lightweight.
Provider keys and credentials remain in server-side environments or automation secrets and are never shipped with dashboard data.
Corporate actions may affect long-term price series. These metrics should be read within the project’s coverage, validation, and raw-price data boundaries.
The public demo is the read-only delivery layer of the pipeline. It renders the latest generated market snapshot and the historical windows that passed the project’s validation rules.