Portfolio management, risk controls, and capital allocation for professional traders
Manage multiple strategies as a unified portfolio with automatic capital allocation and rebalancing.
from rlxbt import PortfolioManager, RiskManager
# Define your strategies
strategies = [
TrendFollowingStrategy(fast_period=10, slow_period=30),
MeanReversionStrategy(rsi_period=14),
BreakoutStrategy(lookback=20)
]
# Create portfolio
portfolio = PortfolioManager(
initial_capital=10_000_000, # $10M AUM
strategies=strategies,
allocation="risk_parity", # Capital allocation
rebalance_frequency="monthly", # Rebalancing schedule
commission=0.0005,
slippage=0.0
)
# Run backtest with risk management
results = portfolio.backtest(data=data, risk_manager=risk_manager)| Parameter | Type | Description |
|---|---|---|
| initial_capital | float | Total starting capital (AUM) |
| strategies | List[Strategy] | Strategy instances |
| allocation | str | Allocation method |
| rebalance_frequency | str? | daily, weekly, monthly, or None |
Sophisticated capital allocation using modern portfolio theory.
from rlxbt.institutional import CapitalAllocator
# Risk parity allocation
allocator = CapitalAllocator(method="risk_parity")
allocations = allocator.allocate(
strategies=strategies,
total_capital=10_000_000,
historical_returns=historical_returns # For optimization methods
)
# Result: lower volatility strategies get more capital
for name, amount in allocations.items():
print(f"{name}: ${amount:,.0f}")equal_weightEqual capital to each strategy. Simple and robust.
risk_parityRecommendedInverse volatility — lower risk gets more capital.
max_sharpeOptimize for maximum portfolio Sharpe ratio.
min_varianceMinimize overall portfolio variance.
| Method | Momentum | Mean Rev. | Breakout |
|---|---|---|---|
| Equal Weight | $3.33M (33%) | $3.33M (33%) | $3.33M (33%) |
| Risk Parity | $2.50M (25%) | $3.75M (37.5%) | $3.75M (37.5%) |
* Higher volatility strategy (Momentum) receives less capital
Institutional-grade risk controls with VaR limits, drawdown protection, and correlation monitoring.
from rlxbt import RiskManager
risk_manager = RiskManager(
max_portfolio_var=0.02, # Max 2% daily VaR
max_strategy_drawdown=0.10, # Max 10% DD per strategy
max_portfolio_drawdown=0.15, # Max 15% portfolio DD
max_correlation=0.70, # Max 70% strategy correlation
var_confidence=0.95 # 95% confidence level
)
# Check risk limits
checks = risk_manager.check_risk_limits(portfolio_results)
print(f"All limits OK: {checks['all_limits_ok']}")
print(f"VaR OK: {checks['var_ok']}")
print(f"Drawdown OK: {checks['portfolio_dd_ok']}")
# Generate detailed risk report
report = risk_manager.generate_risk_report(portfolio_results)
print(report)# Calculate optimal position size based on risk
position_size = risk_manager.calculate_position_size(
account_value=100000,
risk_per_trade=0.01, # Risk 1% per trade
stop_loss_distance=50.0 # $50 to stop-loss
)
print(f"Position size: {position_size:.2f} contracts")
# Result: 20.0 contracts ($1000 risk / $50 per contract)Calculate Value at Risk using multiple methodologies.
from rlxbt.institutional import VaRCalculator
var_calc = VaRCalculator(confidence_level=0.95)
# Different VaR methodologies
historical_var = var_calc.historical_var(returns_series)
parametric_var = var_calc.parametric_var(returns_series)
cvar = var_calc.conditional_var(returns_series) # Expected Shortfall
print(f"Historical VaR (95%): {historical_var:.2%}")
print(f"Parametric VaR (95%): {parametric_var:.2%}")
print(f"CVaR (Expected Shortfall): {cvar:.2%}")Monitor strategy correlations to ensure diversification benefits.
# Calculate correlation matrix
corr_matrix = risk_manager.calculate_correlation_matrix(strategy_returns)
# Check if correlations are within limits
corr_check = risk_manager.check_correlation_limits(strategy_returns)
if not corr_check['correlation_ok']:
print("⚠️ High correlation detected!")
for pair in corr_check['high_correlation_pairs']:
print(f" {pair[0]} - {pair[1]}: {pair[2]:.2f}")Why Correlation Matters
Highly correlated strategies provide less diversification. In crisis, they tend to lose together. Aim for correlations below 0.7 between strategies.
$10M Portfolio on BTCUSDT 1h (33,579 bars)