Files
foxhunt/proto/risk.proto
jgrusewski 2c5f99aedb feat(proto): add 9 streaming RPCs for TUI live data
New poll-to-stream RPCs (gateway adapters):
- broker_gateway: StreamAccountState, StreamSessionStatus
- risk: StreamCircuitBreakerStatus, StreamRiskMetrics
- data_acquisition: StreamDownloadStatus
- ml: StreamModelStatus
- trading_agent: StreamAgentStatus
- trading: StreamPortfolioSummary, StreamOrderBook

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:10:00 +01:00

319 lines
12 KiB
Protocol Buffer

syntax = "proto3";
package risk;
// Risk Management Service provides comprehensive risk assessment, monitoring, and control capabilities
// for high-frequency trading operations. This service integrates real-time VaR calculations,
// position risk analysis, compliance monitoring, and emergency controls.
service RiskService {
// Value at Risk (VaR) Calculations
// Calculate current portfolio VaR using specified method and parameters
rpc GetVaR(GetVaRRequest) returns (GetVaRResponse);
// Stream real-time VaR updates as market conditions change
rpc StreamVaRUpdates(StreamVaRRequest) returns (stream VaREvent);
// Position Risk Analysis
// Get comprehensive risk analysis for current positions
rpc GetPositionRisk(GetPositionRiskRequest) returns (GetPositionRiskResponse);
// Validate order against risk limits before execution
rpc ValidateOrder(ValidateOrderRequest) returns (ValidateOrderResponse);
// Risk Metrics and Monitoring
// Get comprehensive portfolio risk metrics and statistics
rpc GetRiskMetrics(GetRiskMetricsRequest) returns (GetRiskMetricsResponse);
// Stream real-time risk alerts and violations
rpc StreamRiskAlerts(StreamRiskAlertsRequest) returns (stream RiskAlertEvent);
// Emergency Controls and Circuit Breakers
// Trigger emergency stop to halt trading activities
rpc EmergencyStop(EmergencyStopRequest) returns (EmergencyStopResponse);
// Get status of all circuit breakers and safety mechanisms
rpc GetCircuitBreakerStatus(GetCircuitBreakerStatusRequest) returns (GetCircuitBreakerStatusResponse);
// Server-streaming: polls GetCircuitBreakerStatus at gateway level
rpc StreamCircuitBreakerStatus(StreamCircuitBreakerStatusRequest) returns (stream GetCircuitBreakerStatusResponse);
// Server-streaming: polls GetRiskMetrics at gateway level
rpc StreamRiskMetrics(StreamRiskMetricsRequest) returns (stream GetRiskMetricsResponse);
}
// Streaming request messages
message StreamCircuitBreakerStatusRequest {
optional string symbol = 1; // Filter by symbol (all if not specified)
uint32 interval_seconds = 2; // 0 = server default (2s)
}
message StreamRiskMetricsRequest {
optional string portfolio_id = 1; // Portfolio identifier (default if not specified)
uint32 interval_seconds = 2; // 0 = server default (3s)
}
// VaR (Value at Risk) Messages
// Request to calculate portfolio VaR
message GetVaRRequest {
repeated string symbols = 1; // Symbols to include in VaR calculation (empty = all positions)
double confidence_level = 2; // Confidence level (e.g., 0.95 for 95% VaR)
int32 lookback_days = 3; // Historical data period for calculation
VaRMethod method = 4; // VaR calculation method (historical, parametric, Monte Carlo)
}
// Response containing VaR calculation results
message GetVaRResponse {
double portfolio_var = 1; // Total portfolio VaR value
repeated SymbolVaR symbol_vars = 2; // Individual symbol VaR contributions
double confidence_level = 3; // Confidence level used in calculation
int32 lookback_days = 4; // Historical period used
VaRMethod method = 5; // Calculation method used
int64 calculated_at = 6; // Calculation timestamp (nanoseconds)
}
// Request to stream real-time VaR updates
message StreamVaRRequest {
double confidence_level = 1; // Confidence level for VaR calculation
int32 update_frequency_seconds = 2; // How often to send updates
}
// VaR contribution for a specific symbol
message SymbolVaR {
string symbol = 1; // Trading symbol
double var_value = 2; // VaR value for this symbol
double position_size = 3; // Current position size
double contribution_pct = 4; // Percentage contribution to total portfolio VaR
}
// Position Risk Analysis Messages
// Request for position risk analysis
message GetPositionRiskRequest {
optional string symbol = 1; // Filter by symbol (all symbols if not specified)
optional string account_id = 2; // Filter by account (all accounts if not specified)
}
// Response containing position risk analysis
message GetPositionRiskResponse {
repeated PositionRisk position_risks = 1; // Risk analysis for each position
double portfolio_risk_score = 2; // Overall portfolio risk score (0-100)
}
// Request to validate order against risk limits
message ValidateOrderRequest {
string symbol = 1; // Trading symbol
double quantity = 2; // Order quantity
double price = 3; // Order price
string side = 4; // Buy or sell
string account_id = 5; // Trading account
}
// Response containing order validation results
message ValidateOrderResponse {
bool is_valid = 1; // True if order passes all risk checks
repeated RiskViolation violations = 2; // List of risk violations (if any)
RiskScore risk_score = 3; // Risk assessment for this order
string message = 4; // Human-readable validation message
}
// Risk Metrics and Monitoring Messages
// Request for comprehensive risk metrics
message GetRiskMetricsRequest {
optional string portfolio_id = 1; // Portfolio identifier (default portfolio if not specified)
}
// Response containing comprehensive risk metrics
message GetRiskMetricsResponse {
RiskMetrics metrics = 1; // Complete risk metrics and statistics
int64 calculated_at = 2; // Metrics calculation timestamp (nanoseconds)
}
// Request to stream real-time risk alerts
message StreamRiskAlertsRequest {
RiskAlertSeverity min_severity = 1; // Minimum alert severity to receive
repeated RiskAlertType alert_types = 2; // Types of alerts to receive (empty = all types)
}
// Emergency Control Messages
// Request to trigger emergency stop
message EmergencyStopRequest {
EmergencyStopType stop_type = 1; // Type of emergency stop (all trading, symbol, account, etc.)
string reason = 2; // Reason for emergency stop
optional string symbol = 3; // Symbol to stop (for symbol-specific stops)
optional string account_id = 4; // Account to stop (for account-specific stops)
}
// Response after emergency stop execution
message EmergencyStopResponse {
bool success = 1; // True if emergency stop was successful
string message = 2; // Status message or error description
int64 timestamp = 3; // Emergency stop timestamp (nanoseconds)
repeated string affected_orders = 4; // List of order IDs affected by the stop
}
// Request for circuit breaker status
message GetCircuitBreakerStatusRequest {
optional string symbol = 1; // Filter by symbol (all symbols if not specified)
}
// Response containing circuit breaker status
message GetCircuitBreakerStatusResponse {
repeated CircuitBreakerStatus circuit_breakers = 1; // Status of all circuit breakers
}
// Core Risk Data Types
// Risk analysis for a specific position
message PositionRisk {
string symbol = 1; // Trading symbol
double position_size = 2; // Current position size
double market_value = 3; // Market value of position
double var_contribution = 4; // Contribution to portfolio VaR
double concentration_risk = 5; // Position concentration risk (0-100)
double liquidity_risk = 6; // Liquidity risk score (0-100)
RiskScore overall_score = 7; // Overall risk assessment
repeated RiskMetric metrics = 8; // Additional risk metrics
}
message RiskViolation {
RiskViolationType violation_type = 1;
string description = 2;
double current_value = 3;
double limit_value = 4;
RiskAlertSeverity severity = 5;
}
message RiskScore {
double overall_score = 1;
double concentration_score = 2;
double liquidity_score = 3;
double volatility_score = 4;
double correlation_score = 5;
RiskLevel risk_level = 6;
}
message RiskMetrics {
double portfolio_var_1d = 1;
double portfolio_var_5d = 2;
double portfolio_var_30d = 3;
double max_drawdown = 4;
double current_drawdown = 5;
double sharpe_ratio = 6;
double sortino_ratio = 7;
double beta = 8;
double alpha = 9;
double volatility = 10;
repeated PositionRisk position_risks = 11;
}
message RiskMetric {
string name = 1;
double value = 2;
string unit = 3;
RiskLevel risk_level = 4;
}
message CircuitBreakerStatus {
string name = 1;
bool is_triggered = 2;
optional string trigger_reason = 3;
optional int64 triggered_at = 4;
optional int64 reset_at = 5;
CircuitBreakerType breaker_type = 6;
}
// Event Messages
message VaREvent {
double portfolio_var = 1;
repeated SymbolVaR symbol_vars = 2;
VaRChangeType change_type = 3;
int64 timestamp = 4;
}
message RiskAlertEvent {
string alert_id = 1;
RiskAlertType alert_type = 2;
RiskAlertSeverity severity = 3;
string message = 4;
optional string symbol = 5;
optional string account_id = 6;
map<string, string> metadata = 7;
int64 timestamp = 8;
}
// Enums
// VaR calculation methodology
enum VaRMethod {
VAR_METHOD_UNSPECIFIED = 0; // Default/unknown method
VAR_METHOD_HISTORICAL = 1; // Historical simulation method
VAR_METHOD_PARAMETRIC = 2; // Parametric (variance-covariance) method
VAR_METHOD_MONTE_CARLO = 3; // Monte Carlo simulation method
}
enum RiskViolationType {
RISK_VIOLATION_TYPE_UNSPECIFIED = 0;
RISK_VIOLATION_TYPE_POSITION_LIMIT = 1;
RISK_VIOLATION_TYPE_CONCENTRATION = 2;
RISK_VIOLATION_TYPE_VAR_LIMIT = 3;
RISK_VIOLATION_TYPE_DRAWDOWN = 4;
RISK_VIOLATION_TYPE_LIQUIDITY = 5;
RISK_VIOLATION_TYPE_CORRELATION = 6;
}
// Risk assessment levels
enum RiskLevel {
RISK_LEVEL_UNSPECIFIED = 0; // Default/unknown level
RISK_LEVEL_LOW = 1; // Low risk (green)
RISK_LEVEL_MEDIUM = 2; // Medium risk (yellow)
RISK_LEVEL_HIGH = 3; // High risk (orange)
RISK_LEVEL_CRITICAL = 4; // Critical risk (red)
}
// Severity levels for risk alerts
enum RiskAlertSeverity {
RISK_ALERT_SEVERITY_UNSPECIFIED = 0; // Default/unknown severity
RISK_ALERT_SEVERITY_INFO = 1; // Informational alert
RISK_ALERT_SEVERITY_WARNING = 2; // Warning alert
RISK_ALERT_SEVERITY_CRITICAL = 3; // Critical alert requiring attention
RISK_ALERT_SEVERITY_EMERGENCY = 4; // Emergency alert requiring immediate action
}
// Types of risk alerts
enum RiskAlertType {
RISK_ALERT_TYPE_UNSPECIFIED = 0; // Default/unknown type
RISK_ALERT_TYPE_VAR_BREACH = 1; // VaR limit breach
RISK_ALERT_TYPE_POSITION_LIMIT = 2; // Position size limit breach
RISK_ALERT_TYPE_DRAWDOWN = 3; // Drawdown limit breach
RISK_ALERT_TYPE_CONCENTRATION = 4; // Portfolio concentration risk
RISK_ALERT_TYPE_LIQUIDITY = 5; // Liquidity risk alert
RISK_ALERT_TYPE_CORRELATION = 6; // Correlation risk alert
}
// Types of emergency stops
enum EmergencyStopType {
EMERGENCY_STOP_TYPE_UNSPECIFIED = 0; // Default/unknown type
EMERGENCY_STOP_TYPE_ALL_TRADING = 1; // Stop all trading activity
EMERGENCY_STOP_TYPE_SYMBOL = 2; // Stop trading for specific symbol
EMERGENCY_STOP_TYPE_ACCOUNT = 3; // Stop trading for specific account
EMERGENCY_STOP_TYPE_STRATEGY = 4; // Stop specific trading strategy
}
enum CircuitBreakerType {
CIRCUIT_BREAKER_TYPE_UNSPECIFIED = 0;
CIRCUIT_BREAKER_TYPE_PORTFOLIO_LOSS = 1;
CIRCUIT_BREAKER_TYPE_SYMBOL_VOLATILITY = 2;
CIRCUIT_BREAKER_TYPE_POSITION_SIZE = 3;
CIRCUIT_BREAKER_TYPE_DRAWDOWN = 4;
}
enum VaRChangeType {
VAR_CHANGE_TYPE_UNSPECIFIED = 0;
VAR_CHANGE_TYPE_INCREASED = 1;
VAR_CHANGE_TYPE_DECREASED = 2;
VAR_CHANGE_TYPE_BREACH = 3;
}