Skip to content

Ryan-Clinton/crypto-risk-toolkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crypto-risk-toolkit

Risk analytics toolkit for crypto, stocks, and forex trading. Extracted from the Nydar trading platform.

Features

  • Value at Risk (VaR) -- Historical, parametric, and Monte Carlo methods
  • CVaR / Expected Shortfall -- Average loss beyond the VaR threshold
  • Drawdown analysis -- Max drawdown, recovery time, peak-to-trough periods
  • Risk ratios -- Sharpe, Sortino, Calmar, Treynor, Information Ratio
  • Beta & Alpha -- Systematic risk and Jensen's Alpha vs any benchmark
  • Correlation analysis -- Pearson/Spearman/Kendall, NxN matrices, rolling windows
  • Regime detection -- Identify correlation regime shifts and anomalies
  • Diversification tools -- Find low-correlation assets and potential hedges
  • Position sizing -- Kelly Criterion and fixed-risk models
  • Multi-asset support -- Crypto (365-day), stock (252-day), and forex (260-day) annualisation

Installation

pip install crypto-risk-toolkit

Quick Start

import pandas as pd
from crypto_risk_toolkit import RiskAnalyzer

analyzer = RiskAnalyzer(risk_free_rate=0.05)

# From any price series (pandas Series)
prices = pd.Series([100, 102, 99, 105, 103, 107, 110, 108, 112])
returns = analyzer.calculate_returns(prices)

# Individual metrics
sharpe = analyzer.calculate_sharpe_ratio(returns)
var = analyzer.calculate_var(returns, confidence_level=0.95)
drawdown = analyzer.calculate_drawdown(returns)

# Or get everything at once
metrics = analyzer.calculate_all_metrics(returns, asset_class="crypto")
print(metrics.to_dict())

Correlation Analysis

from crypto_risk_toolkit import CorrelationAnalyzer

analyzer = CorrelationAnalyzer()

# Build correlation matrix from price data
price_data = {"BTC": btc_prices, "ETH": eth_prices, "SOL": sol_prices}
matrix = analyzer.build_correlation_matrix(price_data, period_days=90)

# Find diversifying assets
diversifiers = analyzer.find_diversifiers(price_data, "BTC")

# Rolling correlation with regime detection
rolling = analyzer.calculate_rolling_correlation(
    btc_prices, eth_prices, "BTC", "ETH", window_days=30
)
regime = analyzer.detect_correlation_regime(rolling)

Position Sizing

from crypto_risk_toolkit import kelly_criterion, fixed_risk_position_size

# Kelly Criterion
kelly_f = kelly_criterion(win_rate=0.55, avg_win=0.03, avg_loss=0.02)

# Fixed-risk position sizing
position = fixed_risk_position_size(
    capital=100_000,
    risk_pct=0.02,        # Risk 2% per trade
    entry_price=50.0,
    stop_loss_price=48.0,
)
print(f"Buy {position.units} units (${position.position_size:,.0f})")
# Buy 1000.0 units ($50,000)

API Reference

RiskAnalyzer

Method Description
calculate_returns(prices) Simple or log returns from prices
calculate_volatility(returns) Annualised volatility
calculate_sharpe_ratio(returns) Annualised Sharpe ratio
calculate_sortino_ratio(returns) Sortino ratio (downside deviation)
calculate_calmar_ratio(returns) Calmar ratio (return / max drawdown)
calculate_var(returns, confidence) Value at Risk (historical/parametric/MC)
calculate_cvar(returns, confidence) Conditional VaR (Expected Shortfall)
calculate_drawdown(returns) Drawdown analysis
calculate_beta(asset, benchmark) Beta vs benchmark
calculate_alpha(asset, benchmark) Jensen's Alpha
calculate_information_ratio(asset, benchmark) Information Ratio
calculate_treynor_ratio(asset, benchmark) Treynor Ratio
calculate_all_metrics(returns) All metrics in one call
assess_risk_level(metrics) Risk score and warnings

CorrelationAnalyzer

Method Description
calculate_correlation(r1, r2) Pearson/Spearman/Kendall correlation
calculate_pairwise_correlation(p1, p2) Correlation from price series
build_correlation_matrix(price_data) NxN correlation matrix
calculate_rolling_correlation(p1, p2) Rolling window correlation
detect_correlation_regime(rolling) Regime detection with trend analysis
get_cross_asset_correlations(data, classes) Intra/inter-class correlations
find_diversifiers(data, target) Find low-correlation assets
find_hedges(data, target) Find negatively correlated assets

Position Sizing

Function Description
kelly_criterion(win_rate, avg_win, avg_loss) Kelly optimal fraction
fixed_risk_position_size(capital, risk_pct, entry, stop) Fixed % risk sizing
kelly_position_size(capital, win_rate, ...) Kelly-based position size

Requirements

  • Python >= 3.9
  • numpy >= 1.24
  • pandas >= 1.5
  • scipy >= 1.10

Author

Ryan Clinton -- GitHub | Nydar Trading Platform

License

MIT

About

Risk analytics toolkit for crypto, stocks, and forex trading. VaR, CVaR, Sharpe/Sortino/Calmar ratios, correlation analysis, and position sizing.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages