A C++ project for technical analysis and visualization of market data, with both:
- a desktop plotting workflow using Matplot++
- a lightweight interactive web dashboard using Crow
This project started as a C++ technical analysis sandbox for generating synthetic market data and visualizing classic indicators such as SMA, RSI, and MACD.
It now includes two interfaces:
- Matplot++ desktop mode for plotting indicators in separate figures.
- Crow web app for interactive exploration in the browser.
The goal is to keep the project simple, readable, and easy to extend for quant, visualization, and systems programming practice.
- Simple Moving Average (SMA)
- Exponential Moving Average (EMA)
- Relative Strength Index (RSI)
- MACD line, signal line, and histogram
- Simulated OHLCV-like financial time series
- Configurable number of trading days
- Deterministic random seed for reproducible output
- Price with moving averages
- RSI with overbought/oversold reference levels
- MACD with histogram
- Console summary statistics
- Interactive HTML frontend served from C++
- REST API endpoints with Crow
- Adjustable number of trading days
- Adjustable RSI period
- JSON responses for charts and stats
- Browser-based visualization for quicker demos
The web version exposes API routes from a Crow application and serves an HTML dashboard.
Example endpoints:
/api/data— returns chart data such as close prices, SMA, RSI, and MACD/api/stats— returns summary statistics/— serves the HTML dashboard
The dashboard lets you explore the generated data interactively by changing:
- trading days
- RSI period
This makes the project more practical for demos, portfolio presentation, and quick experimentation than a desktop-only plotting script.
.
├── main.cpp
├── quant_webapp.cpp
├── CMakeLists.txt
├── README.md
├── include/
│ ├── indicators.hpp
│ ├── data_generation.hpp
│ ├── plotting.hpp
│ └── statistics.hpp
└── assets/
└── demo.gif
Dependencies
C++17
CMake
Matplot++
Crow
nlohmann/json
Threads
Build
Desktop plotting version
bash
mkdir build
cd build
cmake ..
make
./executable
Replace the executable name with the one defined in your CMakeLists.txt.
Web app version
bash
mkdir build
cd build
cmake ..
make
./executable
Then open:
text
http://localhost:8080
