FinTracker is a personal project for tracking and managing swing trades. It is built in C++ and Python, and designed to run on a home server. It automates data collection, signal generation, backtesting, position tracking, and alerting, with access and control available via Telegram and HTML dashboards.
-
Live Data Collection
Periodically fetches real-time stock data from the Twelve Data API. -
Indicator Computation & Signal Generation
Calculates technical indicators (e.g. EMA, RSI) and generates buy/sell signals. -
Backtesting & Signal Weighting
Evaluates signals using historical performance, computing win rates, average returns, and drawdowns. -
Position & Risk Management
Tracks open positions and stop-loss levels, updating in real-time. -
HTML Dashboard
Generates interactive HTML pages using Plotly, viewable from any browser. Output is saved in thepage/directory (main file:page/index.html). -
Telegram Bot Control
Enables command-based interaction through a personal Telegram bot @fintracker1_bot, including:- Adding or closing trades (/buy, /sell)
- Viewing signal status, positions, recent trades, and earnings info
- Generating charts
-
Trade Import
Imports and processes raw trade data from Trading212 exports usingscripts/clean_trades.py
- This project is solely developed for personal use and tailored to my trading preferences.
- It is primarily designed for long-only swing trading with a typical holding period of 2 to 10 days.
- Many aspects are hardcoded and not intended for general-purpose use without modification.
fintracker/
├── CMakeLists.txt
├── data/
│ ├── index.css, trades.css, index.js, trades.js
│ ├── index.html, trades.html
│ ├── tickers.csv # Tracked symbols
│ ├── positions.csv # Trade history
│ └── trades_exported/ # Raw Trading212 exports
├── include/ # Header files
├── scripts/ # Python tools for plotting and processing
├── src/ # C++ source files
├── page/ # Generated HTML output
└── README.md
- CMake 3.15+
- A C++ compiler with C++20 or higher (note:
CMAKE_CXX_STANDARDis currently set to26) - Python 3.8+
- Python packages:
requests,pandas,plotly,python-telegram-bot - Required environment variables:
TD_API_KEY_1,TD_API_KEY_2,TD_API_KEY_3TG_TOKEN,TG_CHAT_ID,TG_USER
git clone https://github.com/AnglyPascal/fintracker.git
cd fintracker
mkdir build && cd build
cmake ..
make./fin [options]-d,--debug: Enable debug output-t,--disable-tg: Disable Telegram bot updates-r,--replay: Enable replaying mode-p,--disable-plot: Disable plotting-c,--continuous: Enable continuous replaying
Configuration is primarily hardcoded. Some data is read from CSV files:
-
data/tickers.csv: List of tracked symbols, e.g.:add,symbol,priority,sector +,AAPL,1,technology (consumer electronics) +,ABT,2,healthcare (medical devices & services) -
data/positions.csv: Trade history, e.g.:Time,Ticker,Action,Qty,Price,Total 2025-06-26 12:28:36,AMD,BUY,1,100,100 2025-06-26 12:41:35,TSLA,SELL,1,100,100
Use scripts/clean_trades.py to process Trading212 exports into a consolidated positions.csv file.
Interact with the system remotely via the Telegram bot @fintracker1_bot:
/buy SYMBOL QTY PRICE— Buy stock/sell SYMBOL QTY PRICE— Sell stock/status SYMBOL— Get indicator/signal status for a symbol/positions— List all open positions/trades [SYMBOL] [SINCE]— List trades (optionally filtered)/plot SYMBOL— Generate a Plotly chart
- Builds a header (
include/_html_template.h) from the HTML/JS/CSS files indata/usingscripts/embed_str.py - Environment variables must be exported manually before cmake configuration
This project is released under the MIT License. See LICENSE for details.