A comprehensive Python library for Brazilian financial data analysis and quantitative research
Project description
finpie
A Python library for quantitative finance, providing tools for data handling, analysis, and trading strategies.
Installation
Regular Installation
pip install finpie
Development Setup
-
Create a virtual environment:
# Windows python -m venv venv # Linux/MacOS python3 -m venv venv
-
Activate the virtual environment:
# Windows .\venv\Scripts\activate # Linux/MacOS source venv/bin/activate
-
Install in development mode:
# Install in development mode with all dependencies pip install -e . # Install with development tools pip install -e ".[dev]" # Install with notebook support pip install -e ".[notebooks]" # Install with both development tools and notebook support pip install -e ".[dev,notebooks]"
-
Running Jupyter Notebooks:
# Start Jupyter jupyter notebook # Navigate to the finpie/notebooks directory # Open the desired notebook (e.g., data_examples.ipynb)
Quick Start
Basic Time Series Usage
from finpie.data import TimeSeries, TimeSeriesMetadata
import pandas as pd
from datetime import datetime
# Create a simple time series
data = pd.DataFrame({
'open': [100, 101, 102],
'high': [103, 104, 105],
'low': [99, 100, 101],
'close': [102, 103, 104],
'volume': [1000, 1100, 1200]
}, index=pd.date_range('2024-01-01', periods=3))
metadata = TimeSeriesMetadata(
symbol='AAPL',
source='yahoo',
start_date=datetime(2024, 1, 1),
end_date=datetime(2024, 1, 3),
frequency='1D',
currency='USD',
additional_info={'sector': 'Technology'}
)
ts = TimeSeries(data, metadata)
# Basic operations
returns = ts.returns() # Calculate returns
resampled = ts.resample('1W') # Resample to weekly frequency
rolling_stats = ts.rolling(window=20) # Calculate rolling statistics
Statistical Analysis
from finpie.analytics import StatisticalAnalytics
# Create analytics instance
analytics = StatisticalAnalytics(ts, column='close')
# Calculate various statistics
zscore = analytics.zscore(window=20) # Calculate z-scores
half_life = analytics.half_life() # Calculate half-life of mean reversion
hurst = analytics.hurst_exponent() # Calculate Hurst exponent
spread = analytics.spread_to_ma(window=20) # Calculate spread to moving average
# Generate trading signals
signals = analytics.trading_signals(zscore_threshold=2.0, window=20)
Ratio Analysis
from finpie.data import RatioTimeSeries
# Create ratio time series (e.g., for pair trading)
ratio_ts = RatioTimeSeries(numerator_ts, denominator_ts)
# Access the ratio data
ratio_data = ratio_ts.data
# Create analytics instance for the ratio
ratio_analytics = StatisticalAnalytics(ratio_ts, column='ratio')
# Calculate statistics
zscore = ratio_analytics.zscore()
mean_reversion = ratio_analytics.spread_to_ma() / ratio_ts.data['ratio']
signals = ratio_analytics.trading_signals()
Spread Analysis
from finpie.data import SpreadTimeSeries
# Create spread time series (e.g., for statistical arbitrage)
spread_ts = SpreadTimeSeries(series1_ts, series2_ts)
# Access the spread data and hedge ratio
spread_data = spread_ts.data
hedge_ratio = spread_ts.hedge_ratio
# Create analytics instance for the spread
spread_analytics = StatisticalAnalytics(spread_ts, column='spread')
# Calculate statistics
zscore = spread_analytics.zscore()
half_life = spread_analytics.half_life()
hurst = spread_analytics.hurst_exponent()
signals = spread_analytics.trading_signals()
Multiple Time Series Analysis
from finpie.data import MultiTimeSeries
from finpie.data.service import DataService
ds = DataService.create_default_service()
ts1 = = service.get_close_prices(
'AAPL',
'yahoo_finance',
'2025-01-01',
'2025-01-10',
interval='1d',
)
ts2 = = service.get_close_prices(
'GOOGL',
'yahoo_finance',
'2025-01-01',
'2025-01-10',
interval='1d',
)
ts2 = = service.get_close_prices(
'MSFT',
'yahoo_finance',
'2025-01-01',
'2025-01-10',
interval='1d',
)
# Create multi time series for portfolio analysis
multi_ts = MultiTimeSeries([ts1, ts2, ts3])
# Calculate correlation and covariance
correlation = multi_ts.correlation()
covariance = multi_ts.covariance()
# Calculate portfolio returns
weights = {'AAPL': 0.4, 'MSFT': 0.3, 'GOOGL': 0.3}
portfolio_returns = multi_ts.portfolio_returns(weights)
# Calculate rolling correlations
rolling_correlations = multi_ts.rolling_correlation(window=20)
Project Structure
finpie/
├── data/ # Data handling module
├── analytics/ # Analytics and modeling module
├── datasource/ # Data request module
├── notebooks/ # Usage examples and tutorials
└── docs/ # Documentation
Features
-
Time Series Management
- Flexible data structure with metadata support
- Built-in data validation and alignment
- Support for various frequencies and resampling
- Comprehensive statistical calculations
-
Statistical Analysis
- Z-score calculations
- Mean reversion metrics (half-life, Hurst exponent)
- Moving average analysis
- Trading signal generation
-
Specialized Time Series
- Ratio analysis for pair trading
- Spread analysis for statistical arbitrage
- Multi-time series for portfolio analysis
Contributing
Contributions are welcome! Please feel free to submit a Pull Request :).
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
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 finpie-0.1.0.tar.gz.
File metadata
- Download URL: finpie-0.1.0.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d48942eec2c1e3c7316e3894dffe02bdf9d20b68734dfcebf4ae0e03e8d9ae42
|
|
| MD5 |
768a3768dd1be0160713983d8e47b668
|
|
| BLAKE2b-256 |
d20801c9e669843eee01a47171e38cf3a62a52dc7f0df051f83aed6c8dadad12
|
File details
Details for the file finpie-0.1.0-py3-none-any.whl.
File metadata
- Download URL: finpie-0.1.0-py3-none-any.whl
- Upload date:
- Size: 33.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eedeacc17525eb1751e010d2e8bca84ad1ffe3327e70cb68494c7dc3129277ec
|
|
| MD5 |
46d23f186e2cf59954e6d9fd138cf3b2
|
|
| BLAKE2b-256 |
ac4796eac677b29d24a3cee42f36b9c3374ab89a05c16a60a41111ad1bb3c36f
|