DEIMOS - Market analysis and paper trading terminal
I built DEIMOS to analyze market prices and monitor a simulated portfolio. The terminal combines a React/Vite interface, a Python/FastAPI API and a SQLite database.
Charts, watchlists and portfolio valuation based on incoming prices.
Indicators run in Web Workers to keep calculations off the interface thread. WebSockets deliver price updates, and lightweight-charts renders the charts.
Indicator calculations run separately from chart rendering.
The optimization module compares parameters over a selected price history. For example, it searches for a moving-average period that matches a target frequency of closes above the average. The measurement describes that historical window; it does not predict investment returns.
Indicator calculations
- Developed 19 technical indicators in JavaScript for client-side execution.
- Implemented SMA, EMA, WMA, HMA, VWMA, DEMA, TEMA, ZLEMA, KAMA and McGinley Dynamic moving averages, plus Bollinger, Keltner, Donchian, Envelope and STARC bands.
- Projected daily indicators onto intraday charts using independently managed calculation resolutions.
Data feeds and interface
- Ran calculations in Web Workers to separate their workload from interface rendering.
- Built a WebSocket manager that distributes prices to the relevant components.
- Managed state with Zustand and targeted component updates when prices change.
- Used SQLite in WAL mode, with transactions for position and cash-balance changes.
Simulation and parameter comparison
- Calculated simulated portfolio value, unrealized profit and loss, and cash balances from incoming prices.
- Designed an API that searches for parameters matching a target frequency over the selected historical window.
- Built hierarchical watchlists stored in SQLite and updated in the background.