This document describes the new advanced features implemented in pyPortMan
Real-time risk monitoring with comprehensive metrics:
- Value at Risk (VaR): 95% and 99% confidence levels
- Dynamic position sizing: Based on volatility and correlation
- Portfolio beta calculation: Relative to market
- Risk scoring: 0-100 scale with comprehensive weightings
- Real-time alerts: When limits are breached
Usage:
from advanced_risk_manager import AdvancedRiskManager
risk_manager = AdvancedRiskManager(db)
risk_metrics = risk_manager.monitor_real_time_risk(account_id=1)
print(f"Risk Level: {risk_metrics.risk_level}")
print(f"Risk Score: {risk_metrics.score}")Track execution quality and slippage:
- Slippage tracking: Monitor execution vs expected prices
- Execution metrics: Delay, liquidity, fill quality
- Time-based analysis: Best/worst trading hours
- Cost analysis: Estimate slippage impact on performance
Usage:
from order_execution_monitor import OrderExecutionMonitor
monitor = OrderExecutionMonitor(db)
summary = monitor.get_execution_summary(account_id=1)
print(f"Avg Slippage: {summary.average_slippage_pct:.2f}%")
report = monitor.get_slippage_report(account_id=1)
print(f"Total Slippage Cost: ₹{report['slippage_cost_analysis']['total_cost']:,.0f}")Robust out-of-sample testing:
- Walk-forward windows: In-sample training, out-of-sample testing
- Parameter optimization: Auto-tune per window
- Consistency scoring: Measure strategy robustness
- Parameter stability: Track parameter drift
Usage:
from advanced_backtesting import WalkForwardAnalyzer, WalkForwardConfig
import pandas as pd
config = WalkForwardConfig(
in_sample_days=504, # 2 years
out_of_sample_days=63, # 3 months
step_size=21 # 1 month
)
analyzer = WalkForwardAnalyzer(config)
result = analyzer.run_walk_forward(data, strategy, strategy_params)
print(f"Success Rate: {result.success_rate:.1%}")
print(f"Consistency Score: {result.consistency_score:.1f}/100")Probabilistic performance analysis:
- 1000+ simulations: Monte Carlo runs
- Risk of ruin: Probability of catastrophic loss
- Confidence intervals: Expected return ranges
- Drawdown analysis: Worst-case scenarios
Usage:
from advanced_backtesting import MonteCarloSimulator, MonteCarloConfig
config = MonteCarloConfig(
simulations=1000,
initial_capital=100000
)
simulator = MonteCarloSimulator(config)
mc_result = simulator.run_monte_carlo(backtest_result)
print(f"Probability of Ruin: {mc_result.probability_of_ruin:.1%}")
print(f"95% CI: {mc_result.return_percentiles[0.05]:,.0f} - {mc_result.return_percentiles[0.95]:,.0f}")Evolutionary parameter optimization:
- Multi-objective optimization: Balance multiple metrics
- NSGA-II algorithm: Advanced multi-objective optimization
- Population-based search: Avoid local optima
- Convergence detection: Stop at optimal solution
Supported metrics:
- Sharpe Ratio
- Profit Factor
- Total P&L
- Win Rate
- Maximum Drawdown
- Custom Adjusted Return
Usage:
from genetic_optimizer import GeneticOptimizer, GeneticAlgorithmConfig, FitnessMetric
config = GeneticAlgorithmConfig(
population_size=100,
max_generations=50,
optimization_metrics=[
FitnessMetric.SHARPE_RATIO,
FitnessMetric.PROFIT_FACTOR
]
)
optimizer = GeneticOptimizer(config)
result = optimizer.optimize(
data=data,
strategy=moving_average_strategy,
parameter_ranges={
"fast_ma": {"min": 5, "max": 50, "type": "int"},
"slow_ma": {"min": 20, "max": 200, "type": "int"}
}
)
print(f"Best Parameters: {result.best_chromosome.genes}")
print(f"Fitness: {result.best_chromosome.fitness:.4f}")Enhanced performance metrics and analytics:
- Sharpe and Sortino ratios: Risk-adjusted returns
- Value at Risk (VaR): Potential loss at confidence levels
- Information ratio: Risk-adjusted excess returns
- Alpha and Beta: Strategy performance attribution
- Drawdown periods: Tracks recovery time
- Rolling performance: Dynamic statistics
- Ulcer Index: Risk measure considering drawdown duration
- Performance attribution: Strategy contribution analysis
Usage:
from enhanced_analytics import EnhancedAnalytics
analytics = EnhancedAnalytics(db)
enhanced_metrics = analytics.get_enhanced_metrics(account_id=1)
# Analyze drawdowns
dd_analysis = analytics.get_drawdown_analysis(account_id=1)
print(f"Max Drawdown: {dd_analysis['max_drawdown']['pct']:.2%}")
print(f"Average Recovery Time: {dd_analysis['avg_recovery_days']:.1f} days")
# Risk attribution
risk_attribution = analytics.get_risk_attribution(account_id=1)
print(f"Total VaR (95%): ₹{risk_attribution['total_var']:,.0f}")Most sophisticated module with ensemble methods:
- Strategy correlation analysis: Measure diversification
- Mean-variance optimization: Modern portfolio theory
- Dynamic rebalancing: Auto-adjust position sizes
- Strategy health scoring: 0-100 portfolio health metric
- Risk parity weighting: Allocate by risk contribution
Usage:
from portfolio_manager import MultiStrategyPortfolio, StrategyAllocation
portfolio = MultiStrategyPortfolio(db)
# Add multiple strategies
portfolio.add_strategy(
strategy_name="MA_Crossover",
strategy_function=ma_strategy,
allocation_pct=30.0,
risk_level="moderate"
)
portfolio.add_strategy(
strategy_name="RSI_Contrarian",
strategy_function=rsi_strategy,
allocation_pct=20.0,
risk_level="high"
)
# Get current allocation
allocation = portfolio.get_strategy_allocation(account_id=1)
for strat in allocation:
print(f"{strat.strategy_name}: {strat.weight:.1f}%")
# Optimize weights
opt_result = portfolio.optimize_strategy_weights(account_id=1, max_risk=0.15)
print(f"Optimal Weights: {opt_result['optimal_weights']}")
print(f"Expected Return: {opt_result['portfolio_metrics']['expected_return']:.1%}")Combine multiple strategies into a single portfolio:
- Diversification ratio: 1 - correlation penalty
- Effective strategies: Number of independent strategies
- Ensemble weighting: Risk-adjusted optimal weights
Usage:
# Create combined strategy
combined = portfolio.create_combined_strategy(
strategy_names=["MA_Crossover", "RSI_Strategy", "BB_Strategy"],
weights=[0.4, 0.3, 0.3]
)
print(f"Combined Sharpe: {combined.sharpe_ratio:.2f}")
print(f"Diversification Ratio: {combined.diversification_ratio:.2f}")| Feature | Module | Key Capabilities | Status |
|---|---|---|---|
| Risk Management | advanced_risk_manager.py |
Real-time VaR, Dynamic sizing, Risk scoring | ✅ Completed |
| Execution Monitoring | order_execution_monitor.py |
Slippage tracking, Fill quality, Latency | ✅ Completed |
| Walk-Forward Analysis | advanced_backtesting.py |
Out-of-sample validation, Consistency scoring | ✅ Completed |
| Monte Carlo | advanced_backtesting.py |
Risk of ruin, Confidence intervals | ✅ Completed |
| Genetic Optimization | genetic_optimizer.py |
Multi-objective, NSGA-II algorithm | ✅ Completed |
| Multi-Strategy Portfolio | portfolio_manager.py |
Correlation analysis, Dynamic rebalancing | ✅ Completed |
| Enhanced Analytics | enhanced_analytics.py |
VaR, Risk attribution, Drawdown analysis | ✅ Completed |
All modules are designed to integrate seamlessly with existing pyPortMan infrastructure:
- Database Integration: Uses existing SQLAlchemy models
- Risk Management: Extends existing position sizing
- Backtesting: Compatible with existing backtest strategy format
- Portfolio Management: Works with existing account/holding structures
- Sharpe Ratio
- Sortino Ratio
- Maximum Drawdown
- Value at Risk (VaR)
- Risk Score (0-100)
- Strategy Correlations
- Diversification Ratio
- Effective Number of Strategies
- Portfolio Beta
- Risk Attribution
- Fitness Score
- Pareto Ranking
- Crowding Distance
- Parameter Stability
- Consistency Score (0-100)
- Start with existing strategy
- Add risk monitoring:
AdvancedRiskManager - Optimize parameters:
GeneticOptimizer - Validate out-of-sample:
WalkForwardAnalyzer - Build multi-strategy portfolio:
MultiStrategyPortfolio - Monitor execution quality:
OrderExecutionMonitor
All features respect risk limits:
- Max position size: 15% (configurable)
- Max sector exposure: 25% (configurable)
- Max drawdown: 20% (configurable)
- VaR limit: 5% of capital (configurable)
import pandas as pd
from database import SessionLocal
# Initialize all managers
db = SessionLocal()
# 1. Optimize a strategy
optimizer = GeneticOptimizer(config=GeneticAlgorithmConfig())
opt_result = optimizer.optimize(data, ma_strategy, parameter_ranges)
# 2. Walk-forward validation
wf_config = WalkForwardConfig(in_sample_days=504, out_of_sample_days=63)
wf_analyzer = WalkForwardAnalyzer(wf_config)
wf_result = wf_analyzer.run_walk_forward(data, ma_strategy, opt_result.best_chromosome.genes)
# 3. Monte Carlo testing
if wf_result.success_rate > 0.6: # If walk-forward success > 60%
mc_simulator = MonteCarloSimulator(MonteCarloConfig())
mc_result = mc_simulator.run_monte_carlo(wf_result)
if mc_result.probability_of_ruin < 0.05: # If risk of ruin < 5%
# 4. Add to portfolio
portfolio = MultiStrategyPortfolio(db)
portfolio.add_strategy(
strategy_name="MA_Strategy",
strategy_function=ma_strategy_with_optimized_params,
allocation_pct=25
)
# 5. Start monitoring
risk_manager = AdvancedRiskManager(db)
execution_monitor = OrderExecutionMonitor(db)
# All set for live trading with comprehensive risk management!