PLUTUS is a Python-based toolkit for performing pair-trading analysis. This project is designed for educational purposes and provides tools for:
- Fetching and processing financial data.
- Conducting statistical tests (stationarity and cointegration).
- Performing feature engineering.
- Visualizing financial time-series data.
The full documentation is available on GitHub Pages.
1. Data Acquisition
- Fetch historical financial data using Yahoo Finance API.
- Store and manage time-series data in a structured format.
- Combine and preprocess data for analysis.
2. Statistical Tests
-
Stationarity Tests
- Augmented Dickey-Fuller Test (ADF): Tests whether a time series is stationary.
- Phillips-Perron Test (PP): Handles autocorrelations and heteroskedasticity.
- KPSS Test: Tests for trend stationarity.
-
Cointegration Tests
- Engle-Granger Test: Identifies long-term equilibrium relationships.
- Phillips-Ouliaris Test: Handles residual-based cointegration testing.
- Johansen Test: Detects multiple cointegration vectors.
3. Feature Engineering
- Compute periodic returns (daily, weekly, monthly).
- Apply logarithmic and exponential transformations.
- Calculate correlation matrices and filter securities based on thresholds.
- Identify cointegrated pairs for pair trading.
4. Data Visualization
- Plot financial time-series data.
- Generate dual-axis plots for comparing securities.
- Visualize correlation matrices.
- Plot autocorrelation and partial autocorrelation.
Install Plutus Pair-Trading Toolkit using pip:
pip install plutus-pairtrading
Note: Requires Python 3.10 or above.
Here’s a quick example to use PLUTUS pair-trading tookit.
import plutus_pairtrading.data_acquisitions as dacq
import plutus_pairtrading.data_generations as dgen
import plutus_pairtrading.data_visualizations as dviz
# Fetch stock data for multiple securities
AAPL_df = dacq.fetch_yahoo_finance_data("AAPL", start_date="2015-01-01", end_date="2021-01-01")
MSFT_df = dacq.fetch_yahoo_finance_data("MSFT", start_date="2015-01-01", end_date="2021-01-01")
GOOG_df = dacq.fetch_yahoo_finance_data("GOOG", start_date="2015-01-01", end_date="2021-01-01")
TSLA_df = dacq.fetch_yahoo_finance_data("TSLA", start_date="2015-01-01", end_date="2021-01-01")
# Combine the data into a single DataFrame
stock_df = dacq.combine_dataframes([AAPL_df, MSFT_df, GOOG_df, TSLA_df])
# Perform pair identification
pairs_df = dgen.pairs_identification(
data=stock_df,
stationarity_method="ADF",
cointegration_method="phillips-ouliaris",
stationarity_significance_level=0.05,
coint_significance_level=0.05,
)
# Display the identified pairs
print(pairs_df)
We welcome contributions! Visit our Github repository, and to contribute:
- Fork the repository.
- Create a branch (
git checkout -b feature/NewFeature
). - Commit your changes (
git commit -m 'Add NewFeature'
). - Push to the branch (
git push origin feature/NewFeature
). - Open a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.