# mohdhamzakhan/csbot architecture

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

- Interactive diagram: https://gitdiagram.com/mohdhamzakhan/csbot
- Repository: https://github.com/mohdhamzakhan/csbot

## Overview

CsBot is a CoinSwitch PRO spot/futures trading workbench: users configure a market and strategy in the UI, inspect history and live prices, backtest or optimize, then run a paper or guarded live trader. The backend also exposes a CLI for fetching candles and comparing strategies. The graph includes the documented scripting, rules, options, wallet, and portfolio capabilities; several of these implementation details are not sampled, so their links are omitted where evidence is insufficient.

Main entry points: [`CsBot/Api.cs`](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Api.cs) (HTTP API), [`CsBotUi/src/App.tsx`](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/App.tsx) (Workbench), [`CsBot/Trader.cs`](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Trader.cs) (Paper/live trader), [`CsBot/Backtester.cs`](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Backtester.cs) (Backtester)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Workbench UI"]
  node_ui["Workbench<br/>[App.tsx]"]
  node_ui_api["API client<br/>[api.ts]"]
  node_chart["Chart panel<br/>[ChartPanel.tsx]"]
  node_strategy_ui["Strategy editors<br/>[ScriptEditor.tsx]"]
  node_trade_ui["Trader controls<br/>[TraderPanel.tsx]"]
  node_research_ui["Research panels<br/>[OptimizePanel.tsx]"]
  node_options_ui["Options lab<br/>[OptionsLab.tsx]"]
end

subgraph group_marketdata["Market Data"]
  node_candles[("Candle history<br/>[CandleStore.cs]")]
  node_livefeed["Live prices<br/>[LiveFeed.cs]"]
  node_exchange["CoinSwitch client"]
  node_cli["CLI tools<br/>[Cli.cs]"]
end

subgraph group_strategy["Strategy Research"]
  node_registry["Strategy registry"]
  node_strategies["Built-in strategies"]
  node_rules["Custom rules<br/>[RuleStrategy.cs]"]
  node_script["Script strategy<br/>[ScriptStrategy.cs]"]
  node_parser["Script parser<br/>[Parser.cs]"]
  node_lexer["Script lexer<br/>[Lexer.cs]"]
  node_templates["Script templates<br/>[Templates.cs]"]
  node_backtest["Backtester<br/>[Backtester.cs]"]
  node_optimizer["Optimizer<br/>[Optimizer.cs]"]
end

subgraph group_execution["Trading Execution"]
  node_costs["Cost model<br/>[CostConfig.cs]"]
  node_simportfolio["Simulation portfolio<br/>[SimPortfolio.cs]"]
  node_factory["Trader factory<br/>[TraderFactory.cs]"]
  node_trader["Paper/live trader<br/>[Trader.cs]"]
end

subgraph group_platform["API and Persistence"]
  node_api["HTTP API<br/>[Api.cs]"]
  node_sessions[("Session state<br/>[SessionStore.cs]")]
  node_keys[("Key store<br/>[KeyStore.cs]")]
end

node_user(("Trader"))
node_coin_switch{{"CoinSwitch PRO"}}

node_user -->|"configures"| node_ui
node_ui -->|"requests"| node_ui_api
node_ui -->|"renders"| node_chart
node_ui -->|"renders"| node_strategy_ui
node_ui -->|"renders"| node_trade_ui
node_ui -->|"renders"| node_research_ui
node_ui -->|"renders"| node_options_ui
node_ui_api -->|"calls"| node_api
node_api -->|"loads candles"| node_candles
node_api -->|"serves live data"| node_livefeed
node_candles -->|"fetches history"| node_exchange
node_livefeed -->|"fetches prices"| node_exchange
node_cli -->|"fetches history"| node_candles
node_cli -->|"runs comparisons"| node_backtest
node_cli -->|"requests market data"| node_exchange
node_api -->|"selects strategy"| node_registry
node_registry -->|"creates strategy"| node_strategies
node_registry -->|"creates strategy"| node_rules
node_registry -->|"creates strategy"| node_script
node_script -->|"compiles script"| node_parser
node_parser -->|"tokenizes with"| node_lexer
node_api -->|"serves templates"| node_templates
node_api -->|"runs backtests"| node_backtest
node_api -->|"runs optimization"| node_optimizer
node_optimizer -->|"evaluates candidates"| node_backtest
node_backtest -->|"applies costs"| node_costs
node_backtest -->|"simulates portfolio"| node_simportfolio
node_api -->|"builds trader"| node_factory
node_factory -->|"constructs trader"| node_trader
node_trader -->|"places orders"| node_exchange
node_trader -->|"reads prices"| node_livefeed
node_trader -->|"uses cost model"| node_costs
node_trader -->|"tracks portfolio"| node_simportfolio
node_trader -->|"persists state"| node_sessions
node_keys -.->|"validates keys"| node_coin_switch
node_exchange -->|"requests market and orders"| node_coin_switch
node_api -->|"manages credentials"| node_keys

click node_ui "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/App.tsx"
click node_ui_api "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/api.ts"
click node_chart "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/ChartPanel.tsx"
click node_strategy_ui "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/ScriptEditor.tsx"
click node_trade_ui "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/TraderPanel.tsx"
click node_research_ui "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/OptimizePanel.tsx"
click node_options_ui "https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/OptionsLab.tsx"
click node_api "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Api.cs"
click node_candles "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CandleStore.cs"
click node_livefeed "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/LiveFeed.cs"
click node_exchange "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CoinSwitchClient.cs"
click node_cli "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Cli.cs"
click node_registry "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/StrategyRegistry.cs"
click node_strategies "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/TrendFollowingStrategy.cs"
click node_rules "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/RuleStrategy.cs"
click node_script "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/ScriptStrategy.cs"
click node_parser "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Parser.cs"
click node_lexer "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Lexer.cs"
click node_templates "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Templates.cs"
click node_backtest "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Backtester.cs"
click node_optimizer "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Optimizer.cs"
click node_costs "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CostConfig.cs"
click node_simportfolio "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/SimPortfolio.cs"
click node_factory "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/TraderFactory.cs"
click node_trader "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Trader.cs"
click node_sessions "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/SessionStore.cs"
click node_keys "https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/KeyStore.cs"

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_ui,node_ui_api,node_chart,node_strategy_ui,node_trade_ui,node_research_ui,node_options_ui toneBlue
class node_candles,node_livefeed,node_exchange,node_cli toneAmber
class node_registry,node_strategies,node_rules,node_script,node_parser,node_lexer,node_templates,node_backtest,node_optimizer toneMint
class node_costs,node_simportfolio,node_factory,node_trader toneRose
class node_api,node_sessions,node_keys,node_user,node_coin_switch toneIndigo
```

## Components

### Workbench UI

- [Workbench](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/App.tsx): `CsBotUi/src/App.tsx`
- [API client](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/api.ts): `CsBotUi/src/api.ts`
- [Chart panel](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/ChartPanel.tsx): `CsBotUi/src/ChartPanel.tsx`
- [Strategy editors](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/ScriptEditor.tsx): `CsBotUi/src/ScriptEditor.tsx`
- [Trader controls](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/TraderPanel.tsx): `CsBotUi/src/TraderPanel.tsx`
- [Research panels](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/OptimizePanel.tsx): `CsBotUi/src/OptimizePanel.tsx`
- [Options lab](https://github.com/mohdhamzakhan/csbot/blob/master/CsBotUi/src/OptionsLab.tsx): `CsBotUi/src/OptionsLab.tsx`

### Market Data

- [Candle history](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CandleStore.cs): `CsBot/CandleStore.cs`
- [Live prices](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/LiveFeed.cs): `CsBot/LiveFeed.cs`
- [CoinSwitch client](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CoinSwitchClient.cs): `CsBot/CoinSwitchClient.cs`
- [CLI tools](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Cli.cs): `CsBot/Cli.cs`

### Strategy Research

- [Strategy registry](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/StrategyRegistry.cs): `CsBot/StrategyRegistry.cs`
- [Built-in strategies](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/TrendFollowingStrategy.cs): `CsBot/TrendFollowingStrategy.cs`
- [Custom rules](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/RuleStrategy.cs): `CsBot/RuleStrategy.cs`
- [Script strategy](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/ScriptStrategy.cs): `CsBot/Scripting/ScriptStrategy.cs`
- [Script parser](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Parser.cs): `CsBot/Scripting/Parser.cs`
- [Script lexer](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Lexer.cs): `CsBot/Scripting/Lexer.cs`
- [Script templates](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Scripting/Templates.cs): `CsBot/Scripting/Templates.cs`
- [Backtester](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Backtester.cs): `CsBot/Backtester.cs`
- [Optimizer](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Optimizer.cs): `CsBot/Optimizer.cs`

### Trading Execution

- [Cost model](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/CostConfig.cs): `CsBot/CostConfig.cs`
- [Simulation portfolio](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/SimPortfolio.cs): `CsBot/SimPortfolio.cs`
- [Trader factory](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/TraderFactory.cs): `CsBot/TraderFactory.cs`
- [Paper/live trader](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Trader.cs): `CsBot/Trader.cs`

### API and Persistence

- [HTTP API](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/Api.cs): `CsBot/Api.cs`
- [Session state](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/SessionStore.cs): `CsBot/SessionStore.cs`
- [Key store](https://github.com/mohdhamzakhan/csbot/blob/master/CsBot/KeyStore.cs): `CsBot/KeyStore.cs`

### Other components

- **Trader**
- **CoinSwitch PRO**

## Connections

- Trader → Workbench: configures
- Workbench → API client: requests (evidence: `CsBotUi/src/App.tsx`)
- Workbench → Chart panel: renders (evidence: `CsBotUi/src/App.tsx`)
- Workbench → Strategy editors: renders (evidence: `CsBotUi/src/App.tsx`)
- Workbench → Trader controls: renders (evidence: `CsBotUi/src/App.tsx`)
- Workbench → Research panels: renders (evidence: `CsBotUi/src/App.tsx`)
- Workbench → Options lab: renders (evidence: `CsBotUi/src/App.tsx`)
- API client → HTTP API: calls (evidence: `CsBotUi/src/api.ts`)
- HTTP API → Candle history: loads candles (evidence: `CsBot/Api.cs`)
- HTTP API → Live prices: serves live data (evidence: `CsBot/Api.cs`)
- Candle history → CoinSwitch client: fetches history (evidence: `CsBot/CandleStore.cs`)
- Live prices → CoinSwitch client: fetches prices (evidence: `CsBot/LiveFeed.cs`)
- CLI tools → Candle history: fetches history (evidence: `CsBot/Cli.cs`)
- CLI tools → Backtester: runs comparisons (evidence: `CsBot/Cli.cs`)
- CLI tools → CoinSwitch client: requests market data (evidence: `CsBot/Cli.cs`)
- HTTP API → Strategy registry: selects strategy (evidence: `CsBot/Api.cs`)
- Strategy registry → Built-in strategies: creates strategy (evidence: `CsBot/StrategyRegistry.cs`)
- Strategy registry → Custom rules: creates strategy (evidence: `CsBot/StrategyRegistry.cs`)
- Strategy registry → Script strategy: creates strategy (evidence: `CsBot/StrategyRegistry.cs`)
- Script strategy → Script parser: compiles script (evidence: `CsBot/Scripting/ScriptStrategy.cs`)
- Script parser → Script lexer: tokenizes with (evidence: `CsBot/Scripting/Parser.cs`)
- HTTP API → Script templates: serves templates (evidence: `CsBot/Api.cs`)
- HTTP API → Backtester: runs backtests (evidence: `CsBot/Api.cs`)
- HTTP API → Optimizer: runs optimization (evidence: `CsBot/Api.cs`)
- Optimizer → Backtester: evaluates candidates (evidence: `CsBot/Optimizer.cs`)
- Backtester → Cost model: applies costs (evidence: `CsBot/Backtester.cs`)
- Backtester → Simulation portfolio: simulates portfolio (evidence: `CsBot/Backtester.cs`)
- HTTP API → Trader factory: builds trader (evidence: `CsBot/Api.cs`)
- Trader factory → Paper/live trader: constructs trader (evidence: `CsBot/TraderFactory.cs`)
- Paper/live trader → CoinSwitch client: places orders (evidence: `CsBot/Trader.cs`)
- Paper/live trader → Live prices: reads prices (evidence: `CsBot/Trader.cs`)
- Paper/live trader → Cost model: uses cost model (evidence: `CsBot/Trader.cs`)
- Paper/live trader → Simulation portfolio: tracks portfolio (evidence: `CsBot/Trader.cs`)
- Paper/live trader → Session state: persists state (evidence: `CsBot/Trader.cs`)
- Key store → CoinSwitch PRO: validates keys (evidence: `CsBot/KeyStore.cs`)
- CoinSwitch client → CoinSwitch PRO: requests market and orders
- HTTP API → Key store: manages credentials (evidence: `CsBot/Api.cs`)
