# marketcalls/openalgoplugin architecture

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

- Interactive diagram: https://gitdiagram.com/marketcalls/openalgoplugin
- Repository: https://github.com/marketcalls/openalgoplugin

## Overview

OpenAlgo AmiBroker Data Plugin supplies AmiBroker with historical and realtime market data from an OpenAlgo server. The main workflow is AmiBroker requesting chart history through the plugin, which fetches and caches REST history; asynchronous refreshes update the chart when backfill completes. Separately, the plugin authenticates to WebSocket streams, builds candles from ticks, and exposes quote/depth state to AmiBroker. Configuration and status controls support connection testing and manual backfill. Module-level wiring is inferred only where the README and sampled source establish it; unsampled implementation details are not expanded.

Main entry points: [`OpenAlgoWebSocket.inc`](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoWebSocket.inc) (WebSocket Client), [`OpenAlgoAmiBroker.inc`](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc) (Chart History), [`OpenAlgoConfigDlg.cpp`](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoConfigDlg.cpp) (Settings Dialog), [`Plugin.cpp`](https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp) (Plugin API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["AmiBroker Integration"]
  node_plugin_api["Plugin API<br/>[Plugin.cpp]"]
  node_ab_history["Chart History"]
  node_ab_quotes["Quote Window"]
  node_ab_notifications["Chart Updates"]
end

subgraph group_history["Historical Data"]
  node_history_fetch["History Fetch"]
  node_http_workers["HTTP Workers"]
  node_history_cache["History Cache<br/>[Plugin.cpp]"]
end

subgraph group_streaming["Realtime Streaming"]
  node_bar_builder["Candle Builder"]
  node_ws_client["WebSocket Client"]
  node_quote_state["Quote State<br/>[Plugin.cpp]"]
end

subgraph group_configuration["Configuration"]
  node_config_dialog["Settings Dialog"]
  node_settings["Connection Settings<br/>[OpenAlgoGlobals.h]"]
  node_status_controls["Status Controls"]
end

node_amibroker(("AmiBroker"))
node_openalgo_rest{{"OpenAlgo REST API"}}
node_openalgo_ws{{"OpenAlgo WebSocket"}}

node_amibroker -->|"calls exports"| node_plugin_api
node_plugin_api -->|"dispatches requests"| node_ab_history
node_ab_history -->|"reads bars"| node_history_cache
node_ab_history -->|"queues refresh"| node_http_workers
node_http_workers -->|"runs fetch"| node_history_fetch
node_history_fetch -->|"requests history"| node_openalgo_rest
node_history_fetch -->|"updates snapshots"| node_history_cache
node_ab_history -->|"returns quotations"| node_amibroker
node_plugin_api -->|"initializes stream"| node_ws_client
node_ws_client -->|"authenticates, subscribes"| node_openalgo_ws
node_openalgo_ws -->|"sends frames"| node_ws_client
node_ws_client -->|"delivers ticks"| node_bar_builder
node_ws_client -->|"updates quote state"| node_quote_state
node_bar_builder -->|"posts chart updates"| node_ab_notifications
node_quote_state -->|"provides quote data"| node_ab_quotes
node_ab_quotes -->|"serves quote/depth"| node_amibroker
node_ab_notifications -->|"signals refresh"| node_amibroker
node_amibroker -->|"configures plugin"| node_config_dialog
node_config_dialog -->|"persists settings"| node_settings
node_config_dialog -.->|"tests connection"| node_openalgo_rest
node_config_dialog -.->|"tests stream"| node_openalgo_ws
node_amibroker -->|"requests backfill"| node_status_controls
node_status_controls -->|"queues backfill"| node_http_workers

click node_plugin_api "https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp"
click node_ab_history "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc"
click node_ab_quotes "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc"
click node_ab_notifications "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc"
click node_history_fetch "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoHistory.inc"
click node_http_workers "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoWorkers.inc"
click node_history_cache "https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp"
click node_bar_builder "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoRealtimeBars.inc"
click node_ws_client "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoWebSocket.inc"
click node_quote_state "https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp"
click node_config_dialog "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoConfigDlg.cpp"
click node_settings "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoGlobals.h"
click node_status_controls "https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc"

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_plugin_api,node_ab_history,node_ab_quotes,node_ab_notifications toneBlue
class node_history_fetch,node_http_workers,node_history_cache toneAmber
class node_bar_builder,node_ws_client,node_quote_state,node_openalgo_rest toneMint
class node_config_dialog,node_settings,node_status_controls toneRose
class node_amibroker,node_openalgo_ws toneIndigo
```

## Components

### AmiBroker Integration

- [Plugin API](https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp): `Plugin.cpp`
- [Chart History](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc): `OpenAlgoAmiBroker.inc`
- [Quote Window](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc): `OpenAlgoAmiBroker.inc`
- [Chart Updates](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc): `OpenAlgoAmiBroker.inc`

### Historical Data

- [History Fetch](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoHistory.inc): `OpenAlgoHistory.inc`
- [HTTP Workers](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoWorkers.inc): `OpenAlgoWorkers.inc`
- [History Cache](https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp): `Plugin.cpp`

### Realtime Streaming

- [Candle Builder](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoRealtimeBars.inc): `OpenAlgoRealtimeBars.inc`
- [WebSocket Client](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoWebSocket.inc): `OpenAlgoWebSocket.inc`
- [Quote State](https://github.com/marketcalls/openalgoplugin/blob/master/Plugin.cpp): `Plugin.cpp`

### Configuration

- [Settings Dialog](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoConfigDlg.cpp): `OpenAlgoConfigDlg.cpp`
- [Connection Settings](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoGlobals.h): `OpenAlgoGlobals.h`
- [Status Controls](https://github.com/marketcalls/openalgoplugin/blob/master/OpenAlgoAmiBroker.inc): `OpenAlgoAmiBroker.inc`

### Other components

- **AmiBroker**
- **OpenAlgo REST API**
- **OpenAlgo WebSocket**

## Connections

- AmiBroker → Plugin API: calls exports
- Plugin API → Chart History: dispatches requests
- Chart History → History Cache: reads bars
- Chart History → HTTP Workers: queues refresh
- HTTP Workers → History Fetch: runs fetch
- History Fetch → OpenAlgo REST API: requests history
- History Fetch → History Cache: updates snapshots
- Chart History → AmiBroker: returns quotations
- Plugin API → WebSocket Client: initializes stream
- WebSocket Client → OpenAlgo WebSocket: authenticates, subscribes
- OpenAlgo WebSocket → WebSocket Client: sends frames
- WebSocket Client → Candle Builder: delivers ticks
- WebSocket Client → Quote State: updates quote state
- Candle Builder → Chart Updates: posts chart updates
- Quote State → Quote Window: provides quote data
- Quote Window → AmiBroker: serves quote/depth
- Chart Updates → AmiBroker: signals refresh
- AmiBroker → Settings Dialog: configures plugin
- Settings Dialog → Connection Settings: persists settings
- Settings Dialog → OpenAlgo REST API: tests connection
- Settings Dialog → OpenAlgo WebSocket: tests stream
- AmiBroker → Status Controls: requests backfill
- Status Controls → HTTP Workers: queues backfill
