Pro & Institutional

Institutional Trading

Portfolio management, risk controls, and capital allocation for professional traders

Portfolio Manager

Manage multiple strategies as a unified portfolio with automatic capital allocation and rebalancing.

Python
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)

Parameters

Parameter Type Description
initial_capital float Total starting capital (AUM)
strategiesList[Strategy]Strategy instances
allocationstrAllocation method
rebalance_frequency str? daily, weekly, monthly, or None

Capital Allocator

Sophisticated capital allocation using modern portfolio theory.

Python
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}")

Allocation Methods

equal_weight

Equal capital to each strategy. Simple and robust.

risk_parityRecommended

Inverse volatility — lower risk gets more capital.

max_sharpe

Optimize for maximum portfolio Sharpe ratio.

min_variance

Minimize overall portfolio variance.

Example: $10M Portfolio Allocation

MethodMomentumMean 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

Risk Manager

Institutional-grade risk controls with VaR limits, drawdown protection, and correlation monitoring.

Python
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)

Position Sizing

Python
# 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)

VaR Calculator

Calculate Value at Risk using multiple methodologies.

Python
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%}")
Historical VaR
-1.23%
Based on actual returns
Parametric VaR
-1.45%
Normal distribution
CVaR (ES)
-1.87%
Average of worst 5%

Correlation Analysis

Monitor strategy correlations to ensure diversification benefits.

Python
# 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.

📊 Real Portfolio Results

$10M Portfolio on BTCUSDT 1h (33,579 bars)

Total Return
-0.11%
Max Drawdown
1.23%
Total Trades
6,620
Risk Status
✓ OK

Strategy Attribution

Momentum
-0.22%2,162 trades
Mean Reversion
-0.82%2,354 trades
Breakout
+0.70%2,104 trades