# dmtsource/daily-stock-forecast architecture

> Architecture diagram of the GitHub repository dmtsource/daily-stock-forecast, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dmtsource/daily-stock-forecast
- Repository: https://github.com/dmtsource/daily-stock-forecast

## Overview

Daily Stock Forecast generates next-trading-day market-direction forecasts by downloading historical market data, tuning and evaluating classifiers, then writing ranked forecast data for a Polymer website. The backend workflow and its data/model dependencies are supported by excerpts and the source index. Frontend rendering and App Engine wiring are not sampled, so their connections are shown only as unverified where appropriate.

Main entry points: [`backend/daily_stock_forecast.py`](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py) (Forecast runner), [`polymer-site/src/my-forecast-list.html`](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-forecast-list.html) (Forecast list), [`backend/Data.py`](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Data.py) (Equity universe), [`polymer-site/src/forecasts.json`](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/forecasts.json) (Forecast JSON)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Market data"]
  node_universe["Equity universe<br/>[Data.py]"]
  node_history["Price history<br/>[Data.py]"]
end

subgraph group_forecast["Forecast engine"]
  node_runner["Forecast runner"]
  node_features["Feature preparation"]
  node_classifier_catalog["Classifier catalog<br/>[Classifiers.py]"]
  node_model_search["Model tuning"]
  node_window_search["Lookback search"]
  node_evaluation["Model evaluation"]
  node_ranking["Model ranking"]
  node_inference["Direction forecast"]
  node_report["Forecast report"]
end

subgraph group_site["Forecast website"]
  node_forecast_data["Forecast JSON<br/>[forecasts.json]"]
  node_site_app["Website shell<br/>[my-app.html]"]
  node_forecast_list["Forecast list"]
  node_home_view["Home view<br/>[my-home.html]"]
  node_about_view["About view<br/>[my-about.html]"]
  node_terms_view["Terms view<br/>[my-terms.html]"]
end

node_operator(("Scheduled operator"))
node_nasdaq["Nasdaq listings"]
node_yahoo["Yahoo Finance"]

node_operator -->|"runs"| node_runner
node_runner -.->|"downloads universe"| node_universe
node_universe -->|"reads listings"| node_nasdaq
node_runner -.->|"loads prices"| node_history
node_history -->|"requests prices"| node_yahoo
node_runner -->|"prepares samples"| node_features
node_runner -->|"uses classifiers"| node_classifier_catalog
node_runner -->|"scans windows"| node_window_search
node_window_search -->|"tunes candidates"| node_model_search
node_runner -->|"evaluates models"| node_evaluation
node_runner -->|"refits and predicts"| node_inference
node_runner -->|"ranks results"| node_ranking
node_runner -->|"builds report"| node_report
node_ranking -->|"selects top model"| node_report
node_inference -->|"sets direction"| node_report
node_runner -->|"writes JSON"| node_forecast_data
node_site_app -.->|"renders"| node_forecast_list
node_home_view -.->|"shows forecasts"| node_forecast_list
node_forecast_data -.->|"loads data"| node_forecast_list

click node_universe "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Data.py"
click node_history "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Data.py"
click node_runner "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_features "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_classifier_catalog "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Classifiers.py"
click node_model_search "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_window_search "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_evaluation "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_ranking "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_inference "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_report "https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py"
click node_forecast_data "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/forecasts.json"
click node_site_app "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-app.html"
click node_forecast_list "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-forecast-list.html"
click node_home_view "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-home.html"
click node_about_view "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-about.html"
click node_terms_view "https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-terms.html"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_universe,node_history toneBlue
class node_runner,node_features,node_classifier_catalog,node_model_search,node_window_search,node_evaluation,node_ranking,node_inference,node_report toneAmber
class node_forecast_data,node_site_app,node_forecast_list,node_home_view,node_about_view,node_terms_view toneMint
class node_operator,node_nasdaq,node_yahoo toneIndigo
```

## Components

### Market data

- [Equity universe](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Data.py): `backend/Data.py`
- [Price history](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Data.py): `backend/Data.py`

### Forecast engine

- [Forecast runner](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Feature preparation](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Classifier catalog](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/Classifiers.py): `backend/Classifiers.py`
- [Model tuning](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Lookback search](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Model evaluation](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Model ranking](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Direction forecast](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`
- [Forecast report](https://github.com/dmtsource/daily-stock-forecast/blob/master/backend/daily_stock_forecast.py): `backend/daily_stock_forecast.py`

### Forecast website

- [Forecast JSON](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/forecasts.json): `polymer-site/src/forecasts.json`
- [Website shell](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-app.html): `polymer-site/src/my-app.html`
- [Forecast list](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-forecast-list.html): `polymer-site/src/my-forecast-list.html`
- [Home view](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-home.html): `polymer-site/src/my-home.html`
- [About view](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-about.html): `polymer-site/src/my-about.html`
- [Terms view](https://github.com/dmtsource/daily-stock-forecast/blob/master/polymer-site/src/my-terms.html): `polymer-site/src/my-terms.html`

### Other components

- **Scheduled operator**
- **Nasdaq listings**
- **Yahoo Finance**

## Connections

- Scheduled operator → Forecast runner: runs (evidence: `README.md`)
- Forecast runner → Equity universe: downloads universe (evidence: `backend/daily_stock_forecast.py`)
- Equity universe → Nasdaq listings: reads listings (evidence: `backend/Data.py`)
- Forecast runner → Price history: loads prices (evidence: `backend/daily_stock_forecast.py`)
- Price history → Yahoo Finance: requests prices (evidence: `backend/Data.py`)
- Forecast runner → Feature preparation: prepares samples (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Classifier catalog: uses classifiers (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Lookback search: scans windows (evidence: `backend/daily_stock_forecast.py`)
- Lookback search → Model tuning: tunes candidates (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Model evaluation: evaluates models (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Direction forecast: refits and predicts (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Model ranking: ranks results (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Forecast report: builds report (evidence: `backend/daily_stock_forecast.py`)
- Model ranking → Forecast report: selects top model (evidence: `backend/daily_stock_forecast.py`)
- Direction forecast → Forecast report: sets direction (evidence: `backend/daily_stock_forecast.py`)
- Forecast runner → Forecast JSON: writes JSON (evidence: `backend/daily_stock_forecast.py`)
- Website shell → Forecast list: renders
- Home view → Forecast list: shows forecasts
- Forecast JSON → Forecast list: loads data
