Skip to main content

A Python package for financial risk metrics and stock data analysis

Project description

SquareQuant

SquareQuant is a comprehensive Python package for financial risk metrics and stock data analysis. It provides a suite of tools for quantitative finance, including risk metrics calculation, data retrieval, and visualization.

Features

  • Financial Data Access: Easy-to-use interface for downloading historical price data
  • Extensive Risk Metrics: Comprehensive set of traditional and advanced risk measures
  • Performance Analysis: Tools for evaluating investment performance
  • Visualization: Built-in plotting functions for visual analysis
  • Flexible API: Consistent function-based and object-oriented interfaces

Installation

pip install squarequant

Quick Start

import squarequant as sq
import matplotlib.pyplot as plt

# Configure data download
config = sq.DownloadConfig(
    start_date="2020-01-01",
    end_date="2023-12-31",
    interval='1d',
    columns=['Close']
)

# Download data
data = sq.download_tickers(['AAPL', 'MSFT', 'GOOGL'], config)

# Calculate volatility
vol = sq.vol(data=data, assets=['AAPL', 'MSFT', 'GOOGL'], window=21)

# Calculate Sharpe ratio
sharpe = sq.sharpe(data=data, assets=['AAPL', 'MSFT', 'GOOGL'], window=252)

# Visualize results
plt.figure(figsize=(12, 6))
plt.plot(vol)
plt.title('21-Day Rolling Volatility')
plt.legend(vol.columns)
plt.show()

Available Risk Metrics

SquareQuant provides a comprehensive set of risk metrics, including:

Metric Function Description
Sharpe Ratio sq.sharpe() Risk-adjusted return using standard deviation
Sortino Ratio sq.sortino() Risk-adjusted return using downside deviation
Volatility sq.vol() Standard deviation of returns
Maximum Drawdown sq.mdd() Largest peak-to-trough decline
Value at Risk sq.var() Maximum expected loss at given confidence level
Conditional Value at Risk sq.cvar() Expected loss beyond the VaR threshold
Semi-Deviation sq.semidev() Downside volatility below target return
Average Drawdown sq.avgdd() Mean of all drawdowns in a period
Ulcer Index sq.ulcer() Square root of mean squared drawdown percentage
Mean Absolute Deviation sq.mad() Average absolute deviation from mean
Entropic Risk Measure sq.erm() Risk measure based on information theory
Entropic Value at Risk sq.evar() VAR using entropy concepts
Conditional Drawdown at Risk sq.cdar() Expected drawdown beyond threshold
Entropic Drawdown at Risk sq.edar() Drawdown risk using entropy concepts

Advanced Usage Examples

Analyzing Multiple Risk Metrics

import squarequant as sq
import matplotlib.pyplot as plt

# Download data
config = sq.DownloadConfig(
    start_date="2018-01-01",
    end_date="2023-12-31",
    interval='1d'
)
data = sq.download_tickers(['SPY', 'QQQ'], config)

# Calculate multiple risk metrics
vol = sq.vol(data=data, assets=['SPY', 'QQQ'], window=21)
mad = sq.mad(data=data, assets=['SPY', 'QQQ'], window=252)
mdd = sq.mdd(data=data, assets=['SPY', 'QQQ'], window=252)
ulcer = sq.ulcer(data=data, assets=['SPY', 'QQQ'], window=252)

# Visualize comparison
sq.plot_risk_comparison(
    metrics=[vol, mdd, ulcer],
    labels=['Volatility', 'Max Drawdown', 'Ulcer Index'],
    asset='SPY'
)

Portfolio Risk Analysis

import squarequant as sq
import pandas as pd

# Example portfolio weights
weights = pd.Series({'AAPL': 0.3, 'MSFT': 0.3, 'AMZN': 0.2, 'GOOGL': 0.2})

# Download data
config = sq.DownloadConfig(start_date="2020-01-01", end_date="2023-12-31")
data = sq.download_tickers(weights.index.tolist(), config)

# Calculate portfolio risk measures
portfolio_var = sq.var(
    data=data,
    assets=weights.index.tolist(),
    confidence=0.95,
    window=252,
    holding_period=10
)

# Visualize weight allocation
sq.plot_weight_allocation(weights)

Using Advanced Risk Measures

import squarequant as sq

# Download data
config = sq.DownloadConfig(start_date="2018-01-01", end_date="2023-12-31")
data = sq.download_tickers(['SPY'], config)

# Calculate Entropic Risk Measure with different risk aversion parameters
erm1 = sq.erm(data=data, assets=['SPY'], z=0.5, confidence=0.95)
erm2 = sq.erm(data=data, assets=['SPY'], z=1.0, confidence=0.95)
erm3 = sq.erm(data=data, assets=['SPY'], z=2.0, confidence=0.95)

# Compare with traditional VaR and CVaR
var = sq.var(data=data, assets=['SPY'], confidence=0.95)
cvar = sq.cvar(data=data, assets=['SPY'], confidence=0.95)

print(f"Latest ERM (z=0.5): {erm1.iloc[-1, 0]:.4f}")
print(f"Latest ERM (z=1.0): {erm2.iloc[-1, 0]:.4f}")
print(f"Latest ERM (z=2.0): {erm3.iloc[-1, 0]:.4f}")
print(f"Latest VaR (95%): {var.iloc[-1, 0]:.4f}")
print(f"Latest CVaR (95%): {cvar.iloc[-1, 0]:.4f}")

Documentation

For detailed documentation on each function and class, please see the official documentation.

License

MIT License

Credits

SquareQuant was developed to provide financial analysts, quantitative researchers, and portfolio managers with a comprehensive toolkit for risk assessment and performance analysis.

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

squarequant-0.1.1.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

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

squarequant-0.1.1-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file squarequant-0.1.1.tar.gz.

File metadata

  • Download URL: squarequant-0.1.1.tar.gz
  • Upload date:
  • Size: 29.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for squarequant-0.1.1.tar.gz
Algorithm Hash digest
SHA256 132908da8b7f42a002c5b38eb9647dd5194698326ea940bbb435c7ac14dcc821
MD5 ca9dcf69f2fe0ede7f231bc53d9c8730
BLAKE2b-256 c413ee6dca1a5484c0bb7b73cb348adbdc401be0153979e2ba42b2a3f4bc6ca2

See more details on using hashes here.

File details

Details for the file squarequant-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: squarequant-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for squarequant-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ed4933148ba424f4c1ee3dcd3c0627baf87de3db9f4162f559f9abcbfbed4903
MD5 89cc2031b4e2ae3c4686e4369b3b0d08
BLAKE2b-256 7397d711c74bb4da5e3c68d214265c9afdff16af6d3b6ce847349422aecf1b57

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