Major Changes: - Migrated from 3-action TradingAction to 45-action FactoredAction - 45 actions: 5 exposure × 3 order types × 3 urgency levels - Absolute exposure model (target positions -1.0 to +1.0) - Transaction cost differentiation (Market 0.15%, LimitMaker 0.05%, IoC 0.10%) - Fixed action diversity threshold (1.11% → 0.5% for 45-action space) Bug Fixes: - Bug #15: Incomplete FactoredAction integration (code existed but unused) - Bug #16: Runtime crash in action diversity checking (hardcoded 3-action match) Code Changes (13 files, ~464 lines): - ml/src/dqn/action_space.rs: Core FactoredAction + 4 helper methods - ml/src/trainers/dqn.rs: Action diversity refactored (3→45 dynamic) - ml/src/dqn/reward.rs: calculate_reward() signature updated - ml/src/dqn/portfolio_tracker.rs: execute_action() absolute exposure - ml/src/dqn/dqn.rs: WorkingDQN action selection migrated - ml/tests/*.rs: 9 test files updated with FactoredAction assertions Test Results: - 1-epoch smoke test: 100% action diversity (45/45 actions, 80.2s) - 10-epoch production: 87.8% readiness (79/90 scorecard, 14.0 min) - Loss convergence: 96.9% reduction (119K → 3.6K) - Action diversity: 100% → 44% (healthy specialization) - Checkpoint reliability: 12/12 files saved (100%) - DQN tests: 195/195 passing (100%) - ML baseline: 1,514/1,515 passing (99.93%) Production Status: ✅ CERTIFIED (87.8% readiness) Go/No-Go: ✅ GO FOR 100-EPOCH PRODUCTION TRAINING 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
90 lines
1.9 KiB
YAML
90 lines
1.9 KiB
YAML
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: broker-gateway-service
|
|
namespace: foxhunt
|
|
labels:
|
|
app: broker-gateway-service
|
|
component: broker
|
|
tier: backend
|
|
annotations:
|
|
prometheus.io/scrape: "true"
|
|
prometheus.io/port: "9096"
|
|
prometheus.io/path: "/metrics"
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app: broker-gateway-service
|
|
ports:
|
|
# gRPC service port
|
|
- name: grpc
|
|
port: 50056
|
|
targetPort: 50056
|
|
protocol: TCP
|
|
|
|
# Health check HTTP endpoint
|
|
- name: health
|
|
port: 8086
|
|
targetPort: 8086
|
|
protocol: TCP
|
|
|
|
# Prometheus metrics endpoint
|
|
- name: metrics
|
|
port: 9096
|
|
targetPort: 9096
|
|
protocol: TCP
|
|
|
|
# Session affinity: None (stateless, round-robin load balancing)
|
|
sessionAffinity: None
|
|
|
|
# ClusterIP allocation
|
|
clusterIP: None # Headless service for StatefulSet
|
|
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: broker-gateway-service-lb
|
|
namespace: foxhunt
|
|
labels:
|
|
app: broker-gateway-service
|
|
component: broker
|
|
tier: backend
|
|
annotations:
|
|
prometheus.io/scrape: "true"
|
|
prometheus.io/port: "9096"
|
|
prometheus.io/path: "/metrics"
|
|
spec:
|
|
type: LoadBalancer
|
|
selector:
|
|
app: broker-gateway-service
|
|
ports:
|
|
# gRPC service port (external access)
|
|
- name: grpc
|
|
port: 50056
|
|
targetPort: 50056
|
|
protocol: TCP
|
|
nodePort: 30056 # Fixed NodePort for external access
|
|
|
|
# Prometheus metrics endpoint (external monitoring)
|
|
- name: metrics
|
|
port: 9096
|
|
targetPort: 9096
|
|
protocol: TCP
|
|
|
|
# Session affinity: ClientIP (sticky sessions for FIX protocol)
|
|
sessionAffinity: ClientIP
|
|
sessionAffinityConfig:
|
|
clientIP:
|
|
timeoutSeconds: 10800 # 3 hours
|
|
|
|
---
|
|
apiVersion: v1
|
|
kind: Endpoints
|
|
metadata:
|
|
name: broker-gateway-service
|
|
namespace: foxhunt
|
|
labels:
|
|
app: broker-gateway-service
|
|
# Endpoints are auto-populated by Kubernetes based on pod IPs
|