Skip to main content

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

  1. Create a virtual environment:

    # Windows
    python -m venv venv
    
    # Linux/MacOS
    python3 -m venv venv
    
  2. Activate the virtual environment:

    # Windows
    .\venv\Scripts\activate
    
    # Linux/MacOS
    source venv/bin/activate
    
  3. 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]"
    
  4. 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

finpie-0.1.0.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

finpie-0.1.0-py3-none-any.whl (33.7 kB view details)

Uploaded Python 3

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

Hashes for finpie-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d48942eec2c1e3c7316e3894dffe02bdf9d20b68734dfcebf4ae0e03e8d9ae42
MD5 768a3768dd1be0160713983d8e47b668
BLAKE2b-256 d20801c9e669843eee01a47171e38cf3a62a52dc7f0df051f83aed6c8dadad12

See more details on using hashes here.

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

Hashes for finpie-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eedeacc17525eb1751e010d2e8bca84ad1ffe3327e70cb68494c7dc3129277ec
MD5 46d23f186e2cf59954e6d9fd138cf3b2
BLAKE2b-256 ac4796eac677b29d24a3cee42f36b9c3374ab89a05c16a60a41111ad1bb3c36f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page