# santoshkrsah/algo architecture

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

- Interactive diagram: https://gitdiagram.com/santoshkrsah/algo
- Repository: https://github.com/santoshkrsah/algo

## Overview

This repository combines historical market-data acquisition, strategy research/backtesting, and a Firstock live-trading utility. The main research workflow is to load prepared market data, execute a strategy simulation, evaluate variants and risk, produce reports, and optionally notify users. The tree and source index reveal many additional strategy families and data/reporting subsystems; unsampled components are represented at their existing package paths, with relationships omitted where the available evidence does not establish calls.

Main entry points: [`Algo_Backtesting/tools/run_backtest.py`](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/tools/run_backtest.py) (Backtest runners), [`Algo_Historical_Data/src/fyers_data/auth.py`](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/auth.py) (Fyers authentication), [`Algo_Backtesting/src/backtest/podcast/runner.py`](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/runner.py) (Podcast runner), [`Algo_Backtesting/src/backtest/fast.py`](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/fast.py) (Fast data access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_history["Historical data"]
  node_auth["Fyers authentication<br/>[auth.py]"]
  node_download["Market data downloads<br/>[download_bars.py]"]
  node_fno["F&amp;O downloads<br/>[download_fno.py]"]
  node_calendar["Calendar and reference"]
  node_equity["Equity data updates<br/>[update_equity.py]"]
  node_store[("Data store<br/>[store.py]")]
  node_data_paths["Data locations<br/>[paths.py]"]
  node_data_notify["Data notifications<br/>[notify.py]"]
  node_data_reports["Market reports"]
end

subgraph group_research["Backtest research"]
  node_backtest_runner["Backtest runners<br/>[run_backtest.py]"]
  node_strategy_families["Strategy backtests"]
  node_bvs_engine["BVS simulation<br/>[bvs.py]"]
  node_bvs_data["BVS data preparation<br/>[bvs_data.py]"]
  node_breakout["Breakout simulation<br/>[breakout2.py]"]
  node_pdh["PDH strategy<br/>[pdh.py]"]
  node_rulebook["Strategy rulebook<br/>[rulebook.py]"]
  node_day_engine["Daily backtest engine<br/>[engine.py]"]
  node_fast["Fast data access<br/>[fast.py]"]
  node_backtest_config["Backtest configuration<br/>[config.py]"]
  node_reports["Strategy reports"]
  node_backtest_notify["Research notifications<br/>[notify.py]"]
end

subgraph group_podcast["Podcast framework"]
  node_podcast_runner["Podcast runner<br/>[runner.py]"]
  node_podcast_data["Podcast bars<br/>[data.py]"]
  node_podcast_config["Podcast settings<br/>[config.py]"]
  node_podcast_engine["Order simulation<br/>[engine.py]"]
  node_podcast_indicators["Indicators<br/>[indicators.py]"]
  node_podcast_modules["Podcast strategies"]
  node_podcast_evaluation["Portfolio evaluation<br/>[evaluate.py]"]
  node_podcast_report["Podcast reports<br/>[report.py]"]
end

subgraph group_stma["STMA research"]
  node_stma_runner["STMA runner<br/>[run.py]"]
  node_stma_engine["STMA engine<br/>[engine.py]"]
end

subgraph group_live["Live trading"]
end

node_operator(("Research operator"))
node_fyers{{"Fyers API"}}
node_telegram{{"Telegram"}}

node_operator -->|"runs studies"| node_backtest_runner
node_backtest_runner -->|"runs simulation"| node_breakout
node_backtest_runner -->|"loads days"| node_bvs_data
node_backtest_runner -->|"runs variants"| node_bvs_engine
node_backtest_runner -->|"uses rules"| node_rulebook
node_backtest_runner -->|"sends updates"| node_backtest_notify
node_backtest_runner -->|"writes reports"| node_reports
node_backtest_runner -->|"runs strategy"| node_pdh
node_day_engine -->|"reads settings"| node_backtest_config
node_day_engine -->|"reads bars"| node_fast
node_fast -->|"uses locations"| node_backtest_config
node_fast -->|"reads Parquet"| node_store
node_fast -.->|"falls back to CSV"| node_store
node_operator -->|"authenticates"| node_auth
node_auth -->|"requests token"| node_fyers
node_auth -->|"uses token cache"| node_data_paths
node_download -->|"gets credentials"| node_auth
node_download -->|"uses contracts"| node_fno
node_download -->|"uses paths"| node_data_paths
node_fno -->|"gets credentials"| node_auth
node_fno -->|"uses paths"| node_data_paths
node_operator -.->|"downloads references"| node_calendar
node_operator -.->|"updates equities"| node_equity
node_store -->|"uses locations"| node_data_paths
node_operator -.->|"generates reports"| node_data_reports
node_data_notify -->|"sends messages"| node_telegram
node_podcast_runner -->|"loads bars"| node_podcast_data
node_podcast_runner -.->|"runs strategies"| node_podcast_modules
node_podcast_modules -->|"simulates orders"| node_podcast_engine
node_podcast_modules -->|"uses indicators"| node_podcast_indicators
node_podcast_engine -->|"consumes bars"| node_podcast_data
node_podcast_engine -->|"reads settings"| node_podcast_config
node_podcast_runner -.->|"evaluates results"| node_podcast_evaluation
node_podcast_runner -.->|"produces reports"| node_podcast_report
node_stma_runner -->|"loads bars"| node_podcast_data
node_stma_runner -->|"runs simulation"| node_stma_engine
node_stma_runner -.->|"evaluates results"| node_stma_runner
node_stma_engine -->|"uses indicators"| node_podcast_indicators
node_operator -.->|"requests updates"| node_backtest_notify
node_backtest_notify -->|"sends messages"| node_telegram

click node_auth "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/auth.py"
click node_download "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_bars.py"
click node_fno "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_fno.py"
click node_calendar "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_calendar.py"
click node_equity "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/update_equity.py"
click node_store "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/store.py"
click node_data_paths "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/paths.py"
click node_data_notify "https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/notify.py"
click node_data_reports "https://github.com/santoshkrsah/algo/tree/master/Algo_Historical_Data/src/fyers_data/reports"
click node_backtest_runner "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/tools/run_backtest.py"
click node_strategy_families "https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest"
click node_bvs_engine "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/bvs.py"
click node_bvs_data "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/bvs_data.py"
click node_breakout "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/breakout2.py"
click node_pdh "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/pdh.py"
click node_rulebook "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/rulebook.py"
click node_day_engine "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/engine.py"
click node_fast "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/fast.py"
click node_backtest_config "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/config.py"
click node_reports "https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest"
click node_backtest_notify "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/notify.py"
click node_podcast_runner "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/runner.py"
click node_podcast_data "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/data.py"
click node_podcast_config "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/config.py"
click node_podcast_engine "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/engine.py"
click node_podcast_indicators "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/indicators.py"
click node_podcast_modules "https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest/podcast"
click node_podcast_evaluation "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/evaluate.py"
click node_podcast_report "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/report.py"
click node_stma_runner "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/stma/run.py"
click node_stma_engine "https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/stma/engine.py"

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_auth,node_download,node_fno,node_calendar,node_equity,node_store,node_data_paths,node_data_notify,node_data_reports toneBlue
class node_backtest_runner,node_strategy_families,node_bvs_engine,node_bvs_data,node_breakout,node_pdh,node_rulebook,node_day_engine,node_fast,node_backtest_config,node_reports,node_backtest_notify toneAmber
class node_podcast_runner,node_podcast_data,node_podcast_config,node_podcast_engine,node_podcast_indicators,node_podcast_modules,node_podcast_evaluation,node_podcast_report,node_fyers toneMint
class node_stma_runner,node_stma_engine toneRose
class node_operator,node_telegram toneIndigo
```

## Components

### Historical data

- [Fyers authentication](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/auth.py): `Algo_Historical_Data/src/fyers_data/auth.py`
- [Market data downloads](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_bars.py): `Algo_Historical_Data/src/fyers_data/download_bars.py`
- [F&O downloads](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_fno.py): `Algo_Historical_Data/src/fyers_data/download_fno.py`
- [Calendar and reference](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/download_calendar.py): `Algo_Historical_Data/src/fyers_data/download_calendar.py`
- [Equity data updates](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/update_equity.py): `Algo_Historical_Data/src/fyers_data/update_equity.py`
- [Data store](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/store.py): `Algo_Historical_Data/src/fyers_data/store.py`
- [Data locations](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/paths.py): `Algo_Historical_Data/src/fyers_data/paths.py`
- [Data notifications](https://github.com/santoshkrsah/algo/blob/master/Algo_Historical_Data/src/fyers_data/notify.py): `Algo_Historical_Data/src/fyers_data/notify.py`
- [Market reports](https://github.com/santoshkrsah/algo/tree/master/Algo_Historical_Data/src/fyers_data/reports): `Algo_Historical_Data/src/fyers_data/reports`

### Backtest research

- [Backtest runners](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/tools/run_backtest.py): `Algo_Backtesting/tools/run_backtest.py`
- [Strategy backtests](https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest): `Algo_Backtesting/src/backtest`
- [BVS simulation](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/bvs.py): `Algo_Backtesting/src/backtest/bvs.py`
- [BVS data preparation](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/bvs_data.py): `Algo_Backtesting/src/backtest/bvs_data.py`
- [Breakout simulation](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/breakout2.py): `Algo_Backtesting/src/backtest/breakout2.py`
- [PDH strategy](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/pdh.py): `Algo_Backtesting/src/backtest/pdh.py`
- [Strategy rulebook](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/rulebook.py): `Algo_Backtesting/src/backtest/rulebook.py`
- [Daily backtest engine](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/engine.py): `Algo_Backtesting/src/backtest/engine.py`
- [Fast data access](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/fast.py): `Algo_Backtesting/src/backtest/fast.py`
- [Backtest configuration](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/config.py): `Algo_Backtesting/src/backtest/config.py`
- [Strategy reports](https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest): `Algo_Backtesting/src/backtest`
- [Research notifications](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/notify.py): `Algo_Backtesting/src/backtest/notify.py`

### Podcast framework

- [Podcast runner](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/runner.py): `Algo_Backtesting/src/backtest/podcast/runner.py`
- [Podcast bars](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/data.py): `Algo_Backtesting/src/backtest/podcast/data.py`
- [Podcast settings](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/config.py): `Algo_Backtesting/src/backtest/podcast/config.py`
- [Order simulation](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/engine.py): `Algo_Backtesting/src/backtest/podcast/engine.py`
- [Indicators](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/indicators.py): `Algo_Backtesting/src/backtest/podcast/indicators.py`
- [Podcast strategies](https://github.com/santoshkrsah/algo/tree/master/Algo_Backtesting/src/backtest/podcast): `Algo_Backtesting/src/backtest/podcast`
- [Portfolio evaluation](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/evaluate.py): `Algo_Backtesting/src/backtest/podcast/evaluate.py`
- [Podcast reports](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/podcast/report.py): `Algo_Backtesting/src/backtest/podcast/report.py`

### STMA research

- [STMA runner](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/stma/run.py): `Algo_Backtesting/src/backtest/stma/run.py`
- [STMA engine](https://github.com/santoshkrsah/algo/blob/master/Algo_Backtesting/src/backtest/stma/engine.py): `Algo_Backtesting/src/backtest/stma/engine.py`

### Other components

- **Research operator**
- **Fyers API**
- **Telegram**

## Connections

- Research operator → Backtest runners: runs studies
- Backtest runners → Breakout simulation: runs simulation
- Backtest runners → BVS data preparation: loads days
- Backtest runners → BVS simulation: runs variants
- Backtest runners → Strategy rulebook: uses rules
- Backtest runners → Research notifications: sends updates
- Backtest runners → Strategy reports: writes reports
- Backtest runners → PDH strategy: runs strategy
- Daily backtest engine → Backtest configuration: reads settings (evidence: `Algo_Backtesting/src/backtest/engine.py`)
- Daily backtest engine → Fast data access: reads bars (evidence: `Algo_Backtesting/src/backtest/engine.py`)
- Fast data access → Backtest configuration: uses locations (evidence: `Algo_Backtesting/src/backtest/fast.py`)
- Fast data access → Data store: reads Parquet (evidence: `Algo_Backtesting/src/backtest/fast.py`)
- Fast data access → Data store: falls back to CSV (evidence: `Algo_Backtesting/src/backtest/fast.py`)
- Research operator → Fyers authentication: authenticates (evidence: `Algo_Historical_Data/src/fyers_data/auth.py`)
- Fyers authentication → Fyers API: requests token (evidence: `Algo_Historical_Data/src/fyers_data/auth.py`)
- Fyers authentication → Data locations: uses token cache (evidence: `Algo_Historical_Data/src/fyers_data/auth.py`)
- Market data downloads → Fyers authentication: gets credentials (evidence: `Algo_Historical_Data/src/fyers_data/download_bars.py`)
- Market data downloads → F&O downloads: uses contracts (evidence: `Algo_Historical_Data/src/fyers_data/download_bars.py`)
- Market data downloads → Data locations: uses paths (evidence: `Algo_Historical_Data/src/fyers_data/download_bars.py`)
- F&O downloads → Fyers authentication: gets credentials (evidence: `Algo_Historical_Data/src/fyers_data/download_fno.py`)
- F&O downloads → Data locations: uses paths (evidence: `Algo_Historical_Data/src/fyers_data/download_fno.py`)
- Research operator → Calendar and reference: downloads references
- Research operator → Equity data updates: updates equities
- Data store → Data locations: uses locations (evidence: `Algo_Historical_Data/src/fyers_data/store.py`)
- Research operator → Market reports: generates reports
- Data notifications → Telegram: sends messages (evidence: `Algo_Historical_Data/src/fyers_data/notify.py`)
- Podcast runner → Podcast bars: loads bars
- Podcast runner → Podcast strategies: runs strategies
- Podcast strategies → Order simulation: simulates orders (evidence: `Algo_Backtesting/src/backtest/podcast/module_c.py`)
- Podcast strategies → Indicators: uses indicators (evidence: `Algo_Backtesting/src/backtest/podcast/module_c.py`)
- Order simulation → Podcast bars: consumes bars (evidence: `Algo_Backtesting/src/backtest/podcast/engine.py`)
- Order simulation → Podcast settings: reads settings (evidence: `Algo_Backtesting/src/backtest/podcast/engine.py`)
- Podcast runner → Portfolio evaluation: evaluates results
- Podcast runner → Podcast reports: produces reports
- STMA runner → Podcast bars: loads bars (evidence: `Algo_Backtesting/src/backtest/stma/run.py`)
- STMA runner → STMA engine: runs simulation (evidence: `Algo_Backtesting/src/backtest/stma/run.py`)
- STMA runner → STMA runner: evaluates results (evidence: `Algo_Backtesting/src/backtest/stma/run.py`)
- STMA engine → Indicators: uses indicators (evidence: `Algo_Backtesting/src/backtest/stma/engine.py`)
- Research operator → Research notifications: requests updates
- Research notifications → Telegram: sends messages (evidence: `Algo_Backtesting/src/backtest/notify.py`)
