Files
foxhunt/proto/fxt_trading.proto
jgrusewski b70c6a0bd7 refactor: rewire all service build.rs to proto/ root directory
Delete per-service proto/ directories. All 7 services now compile
from the single canonical proto/ at workspace root.

- trading_service: 5 protos + ml_training client -> ../../proto/
- ml_training_service: ml_training server + fxt_trading client -> ../../proto/
- broker_gateway_service: broker_gateway -> ../../proto/
- trading_agent_service: trading_agent + ml client -> ../../proto/
- data_acquisition_service: data_acquisition -> ../../proto/
- api_gateway: 8 proto compilations -> ../../proto/
- monitoring_service: keeps local proto (3 training RPCs only, deleted in Task 5)

Added proto/fxt_trading.proto (fat-client proto, package foxhunt.tli)
separate from proto/trading.proto (backend, package trading) since the
API gateway needs both for protocol translation.

Added unimplemented stubs for merged monitoring.proto RPCs:
- trading_service: 3 training RPCs (served by monitoring_service)
- api_gateway monitoring_proxy: 13 system health RPCs (Task 4)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:34:09 +01:00

896 lines
24 KiB
Protocol Buffer

syntax = "proto3";
package foxhunt.tli;
// TLI Trading Service provides a unified client interface for all HFT trading operations.
// This service integrates trading, risk management, monitoring, and configuration capabilities
// into a single comprehensive API for the Terminal Line Interface (TLI) client application.
service TradingService {
// Core Trading Operations
// Submit a new trading order with validation
rpc SubmitOrder(SubmitOrderRequest) returns (SubmitOrderResponse);
// Cancel an existing order by ID
rpc CancelOrder(CancelOrderRequest) returns (CancelOrderResponse);
// Get current status of a specific order
rpc GetOrderStatus(GetOrderStatusRequest) returns (GetOrderStatusResponse);
// Get account information and balances
rpc GetAccountInfo(GetAccountInfoRequest) returns (GetAccountInfoResponse);
// Get current portfolio positions
rpc GetPositions(GetPositionsRequest) returns (GetPositionsResponse);
// Subscribe to real-time market data feeds
rpc SubscribeMarketData(SubscribeMarketDataRequest) returns (stream MarketDataEvent);
// Subscribe to real-time order status updates
rpc SubscribeOrderUpdates(SubscribeOrderUpdatesRequest) returns (stream OrderUpdateEvent);
// Integrated Risk Management
// Calculate portfolio Value at Risk (VaR)
rpc GetVaR(GetVaRRequest) returns (GetVaRResponse);
// Analyze position-level risk exposure
rpc GetPositionRisk(GetPositionRiskRequest) returns (GetPositionRiskResponse);
// Validate order against risk limits before submission
rpc ValidateOrder(ValidateOrderRequest) returns (ValidateOrderResponse);
// Get comprehensive portfolio risk metrics
rpc GetRiskMetrics(GetRiskMetricsRequest) returns (GetRiskMetricsResponse);
// Subscribe to real-time risk alerts and violations
rpc SubscribeRiskAlerts(SubscribeRiskAlertsRequest) returns (stream RiskAlertEvent);
// Emergency stop with immediate trading halt
rpc EmergencyStop(EmergencyStopRequest) returns (EmergencyStopResponse);
// Integrated System Monitoring
// Get system performance metrics
rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse);
// Get latency performance statistics
rpc GetLatency(GetLatencyRequest) returns (GetLatencyResponse);
// Get throughput and capacity metrics
rpc GetThroughput(GetThroughputRequest) returns (GetThroughputResponse);
// Subscribe to real-time performance metrics
rpc SubscribeMetrics(SubscribeMetricsRequest) returns (stream MetricsEvent);
// Integrated Configuration Management
// Update system parameters and settings
rpc UpdateParameters(UpdateParametersRequest) returns (UpdateParametersResponse);
// Get current configuration values
rpc GetConfig(GetConfigRequest) returns (GetConfigResponse);
// Subscribe to configuration changes
rpc SubscribeConfig(SubscribeConfigRequest) returns (stream ConfigEvent);
// Integrated System Health Monitoring
// Get overall system health and service status
rpc GetSystemStatus(GetSystemStatusRequest) returns (GetSystemStatusResponse);
// Subscribe to system status changes and alerts
rpc SubscribeSystemStatus(SubscribeSystemStatusRequest) returns (stream SystemStatusEvent);
// ML Trading Operations
// Submit ML-powered trading order with ensemble predictions
rpc SubmitMLOrder(SubmitMLOrderRequest) returns (SubmitMLOrderResponse);
// Get ML prediction history with outcomes
rpc GetMLPredictions(GetMLPredictionsRequest) returns (GetMLPredictionsResponse);
// Get ML model performance metrics
rpc GetMLPerformance(GetMLPerformanceRequest) returns (GetMLPerformanceResponse);
// Wave D: Regime Detection Operations
// Get current regime state for a symbol
rpc GetRegimeState(GetRegimeStateRequest) returns (GetRegimeStateResponse);
// Get regime transition history for a symbol
rpc GetRegimeTransitions(GetRegimeTransitionsRequest) returns (GetRegimeTransitionsResponse);
}
// Order submission request
message SubmitOrderRequest {
string symbol = 1;
OrderSide side = 2;
OrderType order_type = 3;
double quantity = 4;
optional double price = 5;
optional double stop_price = 6;
string time_in_force = 7;
string client_order_id = 8;
}
// Order submission response
message SubmitOrderResponse {
bool success = 1;
string order_id = 2;
string message = 3;
int64 timestamp_unix_nanos = 4;
}
// Order cancellation request
message CancelOrderRequest {
string order_id = 1;
string symbol = 2;
}
// Order cancellation response
message CancelOrderResponse {
bool success = 1;
string message = 2;
int64 timestamp_unix_nanos = 3;
}
// Order status request
message GetOrderStatusRequest {
string order_id = 1;
}
// Order status response
message GetOrderStatusResponse {
string order_id = 1;
string symbol = 2;
OrderSide side = 3;
OrderType order_type = 4;
double quantity = 5;
double filled_quantity = 6;
double remaining_quantity = 7;
double average_price = 8;
OrderStatus status = 9;
int64 created_at_unix_nanos = 10;
int64 updated_at_unix_nanos = 11;
}
// Account information request
message GetAccountInfoRequest {
string account_id = 1;
}
// Account information response
message GetAccountInfoResponse {
string account_id = 1;
double total_value = 2;
double cash_balance = 3;
double buying_power = 4;
double maintenance_margin = 5;
double day_trading_buying_power = 6;
}
// Positions request
message GetPositionsRequest {
optional string symbol = 1; // Filter by symbol if provided
}
// Positions response
message GetPositionsResponse {
repeated Position positions = 1;
}
// Position information
message Position {
string symbol = 1;
double quantity = 2;
double market_price = 3;
double market_value = 4;
double average_cost = 5;
double unrealized_pnl = 6;
double realized_pnl = 7;
}
// Market data subscription request
message SubscribeMarketDataRequest {
repeated string symbols = 1;
repeated MarketDataType data_types = 2;
}
// Market data event
message MarketDataEvent {
oneof event {
TickData tick = 1;
QuoteData quote = 2;
TradeData trade = 3;
BarData bar = 4;
}
}
// Tick data
message TickData {
string symbol = 1;
int64 timestamp_unix_nanos = 2;
double price = 3;
uint64 size = 4;
string exchange = 5;
}
// Quote data
message QuoteData {
string symbol = 1;
int64 timestamp_unix_nanos = 2;
double bid_price = 3;
uint64 bid_size = 4;
double ask_price = 5;
uint64 ask_size = 6;
string exchange = 7;
}
// Trade data
message TradeData {
string symbol = 1;
int64 timestamp_unix_nanos = 2;
double price = 3;
uint64 size = 4;
string trade_id = 5;
string exchange = 6;
}
// Bar data
message BarData {
string symbol = 1;
int64 timestamp_unix_nanos = 2;
string timeframe = 3;
double open = 4;
double high = 5;
double low = 6;
double close = 7;
uint64 volume = 8;
optional double vwap = 9;
}
// Order updates subscription request
message SubscribeOrderUpdatesRequest {
optional string account_id = 1;
}
// Order update event
message OrderUpdateEvent {
string order_id = 1;
string symbol = 2;
OrderStatus status = 3;
double filled_quantity = 4;
double remaining_quantity = 5;
double last_fill_price = 6;
uint64 last_fill_quantity = 7;
int64 timestamp_unix_nanos = 8;
string message = 9;
}
// Monitoring messages
message GetMetricsRequest {
repeated string metric_names = 1;
optional int64 start_time_unix_nanos = 2;
optional int64 end_time_unix_nanos = 3;
}
message GetMetricsResponse {
repeated Metric metrics = 1;
int64 timestamp_unix_nanos = 2;
}
message Metric {
string name = 1;
double value = 2;
string unit = 3;
map<string, string> labels = 4;
int64 timestamp_unix_nanos = 5;
}
message GetLatencyRequest {
optional string service_name = 1;
optional string operation = 2;
optional int64 start_time_unix_nanos = 3;
optional int64 end_time_unix_nanos = 4;
}
message GetLatencyResponse {
double p50_micros = 1;
double p95_micros = 2;
double p99_micros = 3;
double p999_micros = 4;
double avg_micros = 5;
double max_micros = 6;
double min_micros = 7;
uint64 sample_count = 8;
}
message GetThroughputRequest {
optional string service_name = 1;
optional string operation = 2;
optional int64 start_time_unix_nanos = 3;
optional int64 end_time_unix_nanos = 4;
}
message GetThroughputResponse {
double requests_per_second = 1;
double bytes_per_second = 2;
uint64 total_requests = 3;
uint64 total_bytes = 4;
uint64 error_count = 5;
double error_rate = 6;
}
message SubscribeMetricsRequest {
repeated string metric_names = 1;
uint32 interval_seconds = 2;
}
message MetricsEvent {
repeated Metric metrics = 1;
int64 timestamp_unix_nanos = 2;
}
// Configuration messages
message UpdateParametersRequest {
map<string, string> parameters = 1;
bool persist = 2;
}
message UpdateParametersResponse {
bool success = 1;
string message = 2;
repeated string updated_keys = 3;
}
message GetConfigRequest {
repeated string keys = 1; // Empty to get all config
}
message GetConfigResponse {
map<string, string> config = 1;
int64 version = 2;
int64 last_updated_unix_nanos = 3;
}
message SubscribeConfigRequest {
repeated string keys = 1; // Empty to watch all config changes
}
message ConfigEvent {
string key = 1;
string value = 2;
string old_value = 3;
int64 timestamp_unix_nanos = 4;
}
// Enums
// Order direction for trading operations
enum OrderSide {
ORDER_SIDE_UNSPECIFIED = 0; // Default/unknown side
ORDER_SIDE_BUY = 1; // Buy order (long position)
ORDER_SIDE_SELL = 2; // Sell order (short position)
}
// Order execution type
enum OrderType {
ORDER_TYPE_UNSPECIFIED = 0; // Default/unknown type
ORDER_TYPE_MARKET = 1; // Execute immediately at market price
ORDER_TYPE_LIMIT = 2; // Execute only at specified price or better
ORDER_TYPE_STOP = 3; // Market order triggered at stop price
ORDER_TYPE_STOP_LIMIT = 4; // Limit order triggered at stop price
}
// Current lifecycle status of orders
enum OrderStatus {
ORDER_STATUS_UNSPECIFIED = 0; // Default/unknown status
ORDER_STATUS_NEW = 1; // Order created and submitted
ORDER_STATUS_PARTIALLY_FILLED = 2; // Order partially executed
ORDER_STATUS_FILLED = 3; // Order completely executed
ORDER_STATUS_CANCELLED = 4; // Order cancelled
ORDER_STATUS_REJECTED = 5; // Order rejected by exchange or system
ORDER_STATUS_PENDING_CANCEL = 6; // Cancellation request pending
}
enum MarketDataType {
MARKET_DATA_TYPE_UNSPECIFIED = 0;
MARKET_DATA_TYPE_TICKS = 1;
MARKET_DATA_TYPE_QUOTES = 2;
MARKET_DATA_TYPE_TRADES = 3;
MARKET_DATA_TYPE_BARS = 4;
}
message GetSystemStatusRequest {
repeated string service_names = 1; // Empty to get all services
}
message GetSystemStatusResponse {
SystemStatus overall_status = 1;
repeated ServiceStatus services = 2;
int64 timestamp_unix_nanos = 3;
}
message ServiceStatus {
string name = 1;
SystemStatus status = 2;
string message = 3;
int64 last_check_unix_nanos = 4;
map<string, string> details = 5;
}
message SubscribeSystemStatusRequest {
repeated string service_names = 1;
}
message SystemStatusEvent {
string service_name = 1;
SystemStatus status = 2;
SystemStatus previous_status = 3;
string message = 4;
int64 timestamp_unix_nanos = 5;
}
enum SystemStatus {
SYSTEM_STATUS_UNKNOWN = 0;
SYSTEM_STATUS_HEALTHY = 1;
SYSTEM_STATUS_DEGRADED = 2;
SYSTEM_STATUS_UNHEALTHY = 3;
SYSTEM_STATUS_CRITICAL = 4;
}
// VaR calculation request
message GetVaRRequest {
repeated string symbols = 1;
double confidence_level = 2; // e.g., 0.95, 0.99
uint32 lookback_days = 3;
VaRMethodology methodology = 4;
}
// VaR calculation response
message GetVaRResponse {
double portfolio_var = 1;
repeated SymbolVaR symbol_vars = 2;
int64 timestamp_unix_nanos = 3;
string methodology_used = 4;
}
message SymbolVaR {
string symbol = 1;
double var_amount = 2;
double contribution_percent = 3;
}
// Position risk analysis
message GetPositionRiskRequest {
optional string symbol = 1; // Empty for all positions
}
message GetPositionRiskResponse {
repeated PositionRisk positions = 1;
double total_exposure = 2;
double concentration_risk = 3;
int64 timestamp_unix_nanos = 4;
}
message PositionRisk {
string symbol = 1;
double position_size = 2;
double market_value = 3;
double var_contribution = 4;
double concentration_percent = 5;
RiskLevel risk_level = 6;
}
// Order validation request
message ValidateOrderRequest {
string symbol = 1;
OrderSide side = 2;
double quantity = 3;
double price = 4;
string account_id = 5;
}
message ValidateOrderResponse {
bool approved = 1;
string reason = 2;
repeated RiskViolation violations = 3;
double projected_exposure = 4;
double margin_impact = 5;
}
message RiskViolation {
ViolationType type = 1;
string description = 2;
double limit_value = 3;
double current_value = 4;
RiskSeverity severity = 5;
}
// Risk metrics request
message GetRiskMetricsRequest {
optional string portfolio_id = 1;
optional int64 start_time_unix_nanos = 2;
optional int64 end_time_unix_nanos = 3;
}
message GetRiskMetricsResponse {
double sharpe_ratio = 1;
double max_drawdown = 2;
double current_drawdown = 3;
double volatility = 4;
double beta = 5;
double alpha = 6;
double value_at_risk = 7;
double expected_shortfall = 8;
int64 timestamp_unix_nanos = 9;
}
// Risk alerts subscription
message SubscribeRiskAlertsRequest {
repeated RiskSeverity min_severity = 1;
repeated string symbols = 2; // Empty for all symbols
}
message RiskAlertEvent {
string alert_id = 1;
RiskSeverity severity = 2;
string symbol = 3;
string message = 4;
double threshold_value = 5;
double current_value = 6;
int64 timestamp_unix_nanos = 7;
bool requires_action = 8;
}
// Emergency stop
message EmergencyStopRequest {
EmergencyStopType stop_type = 1;
string reason = 2;
repeated string symbols = 3; // Empty for all
bool confirm = 4;
}
message EmergencyStopResponse {
bool success = 1;
string message = 2;
uint32 orders_cancelled = 3;
uint32 positions_closed = 4;
int64 timestamp_unix_nanos = 5;
}
// Backtesting Service provides comprehensive strategy backtesting capabilities for the TLI.
// This service allows users to test trading strategies against historical data with detailed
// performance analytics, risk metrics, and trade-by-trade analysis.
service BacktestingService {
// Backtest Execution Management
// Start a new strategy backtest with historical data
rpc StartBacktest(StartBacktestRequest) returns (StartBacktestResponse);
// Get current status of a running backtest
rpc GetBacktestStatus(GetBacktestStatusRequest) returns (GetBacktestStatusResponse);
// Get comprehensive backtest results and analytics
rpc GetBacktestResults(GetBacktestResultsRequest) returns (GetBacktestResultsResponse);
// List historical backtest runs with filtering
rpc ListBacktests(ListBacktestsRequest) returns (ListBacktestsResponse);
// Subscribe to real-time backtest progress updates
rpc SubscribeBacktestProgress(SubscribeBacktestProgressRequest) returns (stream BacktestProgressEvent);
// Stop a running backtest and optionally save partial results
rpc StopBacktest(StopBacktestRequest) returns (StopBacktestResponse);
}
// Start backtest request
message StartBacktestRequest {
string strategy_name = 1;
repeated string symbols = 2;
int64 start_date_unix_nanos = 3;
int64 end_date_unix_nanos = 4;
double initial_capital = 5;
map<string, string> parameters = 6;
bool save_results = 7;
string description = 8;
}
message StartBacktestResponse {
bool success = 1;
string backtest_id = 2;
string message = 3;
int64 estimated_duration_seconds = 4;
}
// Backtest status
message GetBacktestStatusRequest {
string backtest_id = 1;
}
message GetBacktestStatusResponse {
string backtest_id = 1;
BacktestStatus status = 2;
double progress_percentage = 3;
string current_date = 4;
uint64 trades_executed = 5;
double current_pnl = 6;
int64 started_at_unix_nanos = 7;
optional int64 completed_at_unix_nanos = 8;
optional string error_message = 9;
}
// Backtest results
message GetBacktestResultsRequest {
string backtest_id = 1;
bool include_trades = 2;
bool include_metrics = 3;
}
message GetBacktestResultsResponse {
string backtest_id = 1;
BacktestMetrics metrics = 2;
repeated Trade trades = 3;
repeated EquityCurvePoint equity_curve = 4;
repeated DrawdownPeriod drawdown_periods = 5;
}
message BacktestMetrics {
double total_return = 1;
double annualized_return = 2;
double sharpe_ratio = 3;
double sortino_ratio = 4;
double max_drawdown = 5;
double volatility = 6;
double win_rate = 7;
double profit_factor = 8;
uint64 total_trades = 9;
uint64 winning_trades = 10;
uint64 losing_trades = 11;
double avg_win = 12;
double avg_loss = 13;
double largest_win = 14;
double largest_loss = 15;
double calmar_ratio = 16;
int64 backtest_duration_nanos = 17;
}
message Trade {
string trade_id = 1;
string symbol = 2;
OrderSide side = 3;
double quantity = 4;
double entry_price = 5;
double exit_price = 6;
int64 entry_time_unix_nanos = 7;
int64 exit_time_unix_nanos = 8;
double pnl = 9;
double return_percent = 10;
string entry_signal = 11;
string exit_signal = 12;
}
message EquityCurvePoint {
int64 timestamp_unix_nanos = 1;
double equity = 2;
double drawdown = 3;
double benchmark_equity = 4;
}
message DrawdownPeriod {
int64 start_time_unix_nanos = 1;
int64 end_time_unix_nanos = 2;
double peak_value = 3;
double trough_value = 4;
double drawdown_percent = 5;
uint32 duration_days = 6;
}
// List backtests
message ListBacktestsRequest {
uint32 limit = 1;
uint32 offset = 2;
optional string strategy_name = 3;
optional BacktestStatus status_filter = 4;
}
message ListBacktestsResponse {
repeated BacktestSummary backtests = 1;
uint32 total_count = 2;
}
message BacktestSummary {
string backtest_id = 1;
string strategy_name = 2;
repeated string symbols = 3;
BacktestStatus status = 4;
double total_return = 5;
double sharpe_ratio = 6;
double max_drawdown = 7;
int64 created_at_unix_nanos = 8;
int64 start_date_unix_nanos = 9;
int64 end_date_unix_nanos = 10;
string description = 11;
}
// Backtest progress subscription
message SubscribeBacktestProgressRequest {
string backtest_id = 1;
}
message BacktestProgressEvent {
string backtest_id = 1;
double progress_percentage = 2;
string current_date = 3;
uint64 trades_executed = 4;
double current_pnl = 5;
double current_equity = 6;
BacktestStatus status = 7;
int64 timestamp_unix_nanos = 8;
}
// Stop backtest
message StopBacktestRequest {
string backtest_id = 1;
bool save_partial_results = 2;
}
message StopBacktestResponse {
bool success = 1;
string message = 2;
bool results_saved = 3;
}
// Additional enums for risk and backtesting
enum VaRMethodology {
VAR_METHODOLOGY_UNSPECIFIED = 0;
VAR_METHODOLOGY_HISTORICAL = 1;
VAR_METHODOLOGY_MONTE_CARLO = 2;
VAR_METHODOLOGY_PARAMETRIC = 3;
VAR_METHODOLOGY_EXPECTED_SHORTFALL = 4;
}
enum RiskLevel {
RISK_LEVEL_UNSPECIFIED = 0;
RISK_LEVEL_LOW = 1;
RISK_LEVEL_MEDIUM = 2;
RISK_LEVEL_HIGH = 3;
RISK_LEVEL_CRITICAL = 4;
}
enum ViolationType {
VIOLATION_TYPE_UNSPECIFIED = 0;
VIOLATION_TYPE_POSITION_LIMIT = 1;
VIOLATION_TYPE_CONCENTRATION = 2;
VIOLATION_TYPE_VAR_LIMIT = 3;
VIOLATION_TYPE_MARGIN = 4;
VIOLATION_TYPE_DRAWDOWN = 5;
}
enum RiskSeverity {
RISK_SEVERITY_UNSPECIFIED = 0;
RISK_SEVERITY_INFO = 1;
RISK_SEVERITY_WARNING = 2;
RISK_SEVERITY_CRITICAL = 3;
RISK_SEVERITY_EMERGENCY = 4;
}
enum EmergencyStopType {
EMERGENCY_STOP_TYPE_UNSPECIFIED = 0;
EMERGENCY_STOP_TYPE_CANCEL_ORDERS = 1;
EMERGENCY_STOP_TYPE_CLOSE_POSITIONS = 2;
EMERGENCY_STOP_TYPE_FULL_SHUTDOWN = 3;
}
enum BacktestStatus {
BACKTEST_STATUS_UNSPECIFIED = 0;
BACKTEST_STATUS_QUEUED = 1;
BACKTEST_STATUS_RUNNING = 2;
BACKTEST_STATUS_COMPLETED = 3;
BACKTEST_STATUS_FAILED = 4;
BACKTEST_STATUS_CANCELLED = 5;
BACKTEST_STATUS_PAUSED = 6;
}
// ML Trading Messages
// Submit ML-powered order request
message SubmitMLOrderRequest {
string symbol = 1; // Trading symbol (e.g., "ES.FUT")
string account_id = 2; // Trading account identifier
optional string model_filter = 3; // Optional model filter: "DQN", "MAMBA2", "PPO", "TFT", or null for ensemble
}
// Submit ML-powered order response
message SubmitMLOrderResponse {
string order_id = 1; // Order ID if executed
string symbol = 2; // Trading symbol
string model_used = 3; // "Ensemble" or specific model name
string predicted_action = 4; // Action taken: BUY, SELL, HOLD
double confidence = 5; // Prediction confidence (0.0-1.0)
int32 quantity = 6; // Order quantity
bool executed = 7; // True if order was submitted
string message = 8; // Status message
}
// Get ML predictions request
message GetMLPredictionsRequest {
string symbol = 1; // Trading symbol to filter by
optional string model_filter = 2; // Optional model filter
optional int32 limit = 3; // Maximum predictions to return (default: 10)
}
// Get ML predictions response
message GetMLPredictionsResponse {
repeated MLPrediction predictions = 1; // List of predictions with outcomes
}
// Single ML prediction with outcome
message MLPrediction {
string timestamp = 1; // Prediction timestamp (ISO 8601)
string model_id = 2; // Model identifier
string symbol = 3; // Trading symbol
string predicted_action = 4; // Predicted action: BUY, SELL, HOLD
double confidence = 5; // Prediction confidence (0.0-1.0)
optional double actual_return = 6; // Actual return if outcome known
}
// Get ML performance request
message GetMLPerformanceRequest {
optional string model_filter = 1; // Optional model filter
}
// Get ML performance response
message GetMLPerformanceResponse {
repeated ModelPerformance models = 1; // Performance metrics per model
double ensemble_threshold = 2; // Ensemble confidence threshold
int32 active_models = 3; // Number of active models
int32 total_models = 4; // Total number of models
}
// Performance metrics for a single model
message ModelPerformance {
string model_id = 1; // Model identifier
double accuracy = 2; // Accuracy rate (0.0-1.0)
int64 total_predictions = 3; // Total predictions made
double sharpe_ratio = 4; // Risk-adjusted return
double avg_return = 5; // Average return per prediction
double max_drawdown = 6; // Maximum drawdown
}
// Wave D: Regime Detection Messages
// Request to get current regime state
message GetRegimeStateRequest {
string symbol = 1; // Trading symbol to query
}
// Response containing current regime state
message GetRegimeStateResponse {
string symbol = 1; // Trading symbol
string current_regime = 2; // Current regime: TRENDING, RANGING, VOLATILE, CRISIS
double confidence = 3; // Regime confidence (0.0-1.0)
double cusum_s_plus = 4; // CUSUM S+ statistic
double cusum_s_minus = 5; // CUSUM S- statistic
double adx = 6; // Average Directional Index
double stability = 7; // Regime stability score (0.0-1.0)
double entropy = 8; // Transition entropy (0.0-1.0)
int64 updated_at_unix_nanos = 9; // Last update timestamp
}
// Request to get regime transition history
message GetRegimeTransitionsRequest {
string symbol = 1; // Trading symbol to query
int32 limit = 2; // Maximum transitions to return (default: 100)
}
// Response containing regime transition history
message GetRegimeTransitionsResponse {
repeated RegimeTransition transitions = 1; // List of regime transitions
}
// Single regime transition record
message RegimeTransition {
string from_regime = 1; // Previous regime
string to_regime = 2; // New regime
int32 duration_bars = 3; // Duration in previous regime (bars)
double transition_probability = 4; // Transition probability from matrix
int64 timestamp_unix_nanos = 5; // Transition timestamp
}