A package for managing financial data, specifically made for algorithmic traders.
Project description
DataManagement
Table of Contents
- Overview
- Integrations
- Installation Instructions
- CLI Tool
- Contribution Guidelines
- Project Structure
- SQL Tables and Database Overview
- Models Overview
- Utils Overview
- Module Scripts
Overview
This is our core repository for managing financial data, designed to support algorithmic trading strategies. It provides tools for:
- Data Storage: Efficient storage of historical market data and portfolio data.
- ETL Processes: Extracting, transforming, and loading data from various sources (brokerages, APIs, etc.) into a usable format.
- Data Warehousing: Structuring portfolio data for analysis and reporting.
- Database Agnostic Design: Ensuring compatibility with different database engines and designs.
- CLI Tool: A command-line interface for setting up and configuring the database.
Integrations
Database Integrations
- SQLite (currently supported)
- PostgreSQL (future support)
Brokerage and Datasource Integrations
- Interactive Brokers (IBKR)
- yfinance (future support)
Installation Instructions
-
Prerequisites:
- Python 3.7 or higher
- pip (Python package installer)
- SQLite3 or PostgreSQL (future support)
-
Install the package using pip:
pip install saft_data_mgmt
CLI Tool
This is a CLI tool that allows for easy setup of our normalized database. By answering a few questions in the command line, a database is setup according to your needs.
Usage Instructions
-
Run the CLI Tool:
After installing the package, you can use the command-line tool to set up your database. Open your terminal and run:
setup-saft-db
or
python -m saft_data_mgmt.setup_saft_db
-
Follow the Prompts:
The CLI tool will guide you through a series of questions to configure your database. These questions include:
- Database dialect (e.g., SQLite)
- Database path
- Database name
- Whether to implement market data and portfolio data schemas
- Additional options for market data (e.g., storing historical prices as integers)
-
Configure Database:
Answer the questions according to your needs. The tool will then set up the database with the specified configurations.
Note: There is a known error with the undo functionality, so using
CTRL + Zwill not undo an answer and go to the previous question
Example Usage
Here's an example of how to use the CLI tool to set up a SQLite database:
setup-saft-db
You will then be prompted with the following questions:
1. What SQL dialect will you be using? (current support: sqlite): sqlite
2. What is the path you would like to host this database at? (not including DB name): /path/to/your/db
3. What would you like to name this database? (should end in .db): saft.db
4. Would you like to implement our `market_data` schema? [Y/N]: Y
5. Would you like to implement our `portfolio_data` schema? [Y/N]: N
6. Would you like to store historical security prices as integers? [Y/N]: Y
7. Of the following, which securities do you plan to track? [Stocks, ETFs, Forex, Futures, All] (comma-separated): Stocks, ETFs
Contribution Guidelines
This project is a work in progress, but we love your input! We want to make contributing to SAFT Data Management as easy possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
Development Process
We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.
- Fork the repo and create your branch from
main. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue a pull request
Pull Request Process
- Update the README.md with details of changes to the interface, if applicable.
- Update the version numbers in any examples files and the README.md to the new version that this Pull Request would represent.
- The PR will be merged once you have the sign-off of two other developers.
Any contributions you make will be under the Apache 2.0 Software License
In short, when you submit code changes, your submissions are understood to be under the same Apache 2.0 License that covers the project. Feel free to contact the maintainers if that's a concern.
Report bugs using GitHub's issue tracker
We use GitHub issues to track public bugs. Report a bug by opening a new issue.
Write bug reports with detail, background, and sample code
Great Bug Reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- Be specific!
- Give sample code if you can.
- What you expected would happen
- What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
Code Style and Standards
Python Style Guide
We follow PEP 8 with some modifications:
- Line length limit: 115 characters
- Use spaces for indentation (4 spaces)
- Use docstrings for all public modules, functions, classes, and methods
- Use type hints for function arguments and return values
Example:
def calculate_return(price: float, cost_basis: float) -> float:
"""Calculate the return on investment.
Args:
price (float): Current price of the security
cost_basis (float): Original purchase price
Returns:
float: The percentage return on investment
"""
return (price - cost_basis) / cost_basis * 100
SQL Style Guide
- Use UPPERCASE for SQL keywords
- Use PascalCase for table names
- Use snake_case for column names
- Include appropriate comments for complex queries
- Each column on a new line for readability
Example:
CREATE TABLE IF NOT EXISTS security_prices (
security_id INTEGER,
price_timestamp INTEGER,
close_price INTEGER,
PRIMARY KEY (security_id, price_timestamp),
FOREIGN KEY (security_id)
REFERENCES securities_info(security_id)
);
Testing Guidelines
-
Unit Tests Required:
- All new features must include unit tests
- Bug fixes must include tests that would have caught the bug
- Use of unittest library
-
Running Tests:
# Run all tests
python -m unittest
- Test Structure:
- Use descriptive test names
- Follow the Arrange-Act-Assert pattern
- Mock external dependencies
Documentation Requirements
-
Code Documentation:
- All public APIs must have docstrings
- Include type hints
- Document exceptions that may be raised
-
Project Documentation:
- Update README.md for interface changes
- Maintain documentation in /docs directory
- Include examples for new features
Version Control Guidelines
-
Branching Strategy:
main: stable, production-ready codedev: integration branch for featuresNameDev: Replace with either your name or username as your personal dev branch
-
Commit Messages:
- Use present tense
- First line is summary (50 chars or less)
- Reference issues and pull requests
Example:
Add historical price integer conversion
- Implement price to integer conversion utility
- Add tests for conversion edge cases
- Update documentation with new feature
Fixes #123
Release Process
- Version numbers follow SemVer
- Create a release branch from dev
- Update version numbers
- Update CHANGELOG.md
- Create pull request to main
- Tag the release
- Deploy to PyPI
Project Structure
DataManagement/
├── LICENSE
├── MANIFEST.in
├── README.md
├── setup.py
├── saft_data_mgmt/
│ ├── init.py
│ ├── main.py # Enables python -m saft_data_mgmt
│ ├── setup_saft_db.py # Main CLI module
│ ├── Utils/
│ │ ├── init.py
│ │ ├── cli_checks.py
│ │ ├── cli_tool.py
│ │ ├── config_info.py
│ │ ├── db_from_config.py
│ │ ├── db_strategies.py
│ │ └── helpers.py
│ ├── SQLTables/
│ │ ├── Core/
│ │ ├── HistoricalPrices/
│ │ ├── PortfolioDB/
│ │ └── PortfolioWarehouse/
├── tests/
SQL Tables and Database Overview
Models Overview
Utils Overview
Module Scripts
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file saft_data_mgmt-0.2.3.tar.gz.
File metadata
- Download URL: saft_data_mgmt-0.2.3.tar.gz
- Upload date:
- Size: 41.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7b50951f660a8ee3924109278c2b06eb8beb7ffe00ecb18ea925fb89d09c240
|
|
| MD5 |
df1cee70b9c040a2df848403fc7e03ea
|
|
| BLAKE2b-256 |
697f47aedf87145ff6279c1376d2f46b3bffe7f193e6abd71861e02ebe91d3bc
|
File details
Details for the file saft_data_mgmt-0.2.3-py3-none-any.whl.
File metadata
- Download URL: saft_data_mgmt-0.2.3-py3-none-any.whl
- Upload date:
- Size: 60.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed15d5cbe62e01f38fbb8b1c31754e0f333dec37b42d26fae912eaa6df554913
|
|
| MD5 |
273d0780f9b62fa2e791f7b37b09671d
|
|
| BLAKE2b-256 |
11c6ef2db68b1f35f96be2ea0ade8cf1f8963d9d7e0598224f9a89b34d2ebed0
|