Avanza Investment Tracker
by @patello
Process Avanza CSV exports, calculate TWRR/Modified Dietz returns, and track portfolio performance. Use when importing stock transactions, calculating invest...
clawhub install avanza-investment-trackerπ About This Skill
name: avanza-investment-tracker description: "Process Avanza CSV exports, calculate TWRR/Modified Dietz returns, and track portfolio performance. Use when importing stock transactions, calculating investment returns, or managing portfolio data."
Avanza Investment Tracker
Parse transaction CSVs and compute portfolio performance metrics.
Quick Start
Run from skill root with data paths pointing to your workspace:
# Import transactions (data lives outside skill)
python scripts/cli.py import ../data/avanza/transactions.csvCalculate stats with auto price update
python scripts/cli.py stats --update-prices auto --database ../data/avanza/asset_data.dbOr use defaults (assumes you cd into a data directory first)
cd ../data/avanza
python ../../skills/avanza-investment-tracker/scripts/cli.py import transactions.csv
Data Storage Pattern
User data lives OUTSIDE the skill directory. Recommended structure:
workspace-finance/
βββ skills/avanza-investment-tracker/ # Portable skill (shareable)
β βββ SKILL.md
β βββ scripts/
β βββ assets/
βββ data/avanza/ # Your private data
βββ transactions.csv
βββ special_cases.json
βββ asset_data.db
The skill provides logic. Your data stays private and portable.
CLI Reference
| Command | Description |
|---------|-------------|
| python scripts/cli.py import FILE | Import transactions from CSV |
| python scripts/cli.py stats | Show performance stats |
| python scripts/cli.py stats --update-prices auto | Update prices, then show stats |
| python scripts/cli.py accounts | Show account summaries |
| python scripts/cli.py status | Check system status |
| python scripts/cli.py reset --confirm | Clear database (DESTRUCTIVE) |
All commands accept:
--database PATH (default: data/asset_data.db)--special-cases PATH (default: data/special_cases.json)Skill Contents
avanza-investment-tracker/
βββ SKILL.md # This file
βββ requirements.txt # pip dependencies
βββ assets/ # Templates (copy to your data dir)
β βββ special_cases_template.json
βββ scripts/ # Python code
β βββ cli.py # Main CLI entry
β βββ data_parser.py
β βββ database_handler.py
β βββ calculate_stats.py
βββ references/ # Detailed guides (loaded as needed)
βββ workflows.md
βββ troubleshooting.md
Dependencies
requests - For fetching stock pricessqlite3, csv, json, datetime, argparseInstall: pip install -r requirements.txt
Special Cases
Corporate actions (splits, spin-offs) may need manual rules:
1. Copy template: cp assets/special_cases_template.json ../data/avanza/special_cases.json
2. Edit with your rules
3. Import with --special-cases ../data/avanza/special_cases.json
See Also
Account Filtering
By default, stats show all accounts. Use settings default-accounts to set your preferred accounts:
# Set default accounts (your main portfolio)
python scripts/cli.py --database ../data/avanza/asset_data.db settings default-accounts "1234567,Savings Account,9876543"View stats for default accounts only
python scripts/cli.py --database ../data/avanza/asset_data.db stats --account defaultOr specify accounts directly
python scripts/cli.py stats --account "1234567,Savings Account"View all accounts
python scripts/cli.py stats --account all
π‘ Examples
Run from skill root with data paths pointing to your workspace:
# Import transactions (data lives outside skill)
python scripts/cli.py import ../data/avanza/transactions.csvCalculate stats with auto price update
python scripts/cli.py stats --update-prices auto --database ../data/avanza/asset_data.dbOr use defaults (assumes you cd into a data directory first)
cd ../data/avanza
python ../../skills/avanza-investment-tracker/scripts/cli.py import transactions.csv