Implements strategy registration and lifecycle management with TDD approach. **Implementation**: - StrategyCoordinator: Manages strategy configuration and status - StrategyConfig: Strategy metadata with JSONB parameters - Strategy types: Equal Weight, Risk Parity, ML Optimized, Mean Variance, Momentum, Mean Reversion - Status management: Active, Paused, Stopped - Database persistence with PostgreSQL + JSONB **Database**: - Migration 041: strategy_configs table - UUID primary keys, unique strategy names - JSONB parameters for flexible configuration - Trigger for automatic updated_at timestamps **Tests** (14/14 passing): - Strategy registration with validation - Duplicate name prevention - List/filter strategies (all, active only) - Status updates with validation - Performance benchmarks (<50ms per operation) - All 6 strategy types supported - Empty and complex parameters **Performance**: - Registration: <50ms - List: <50ms - Update: <50ms - All operations meet <50ms target **Production Ready**: - Proper error handling with thiserror - Tracing instrumentation - NO stubs or placeholders - Real PostgreSQL integration Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
40 lines
1.9 KiB
PL/PgSQL
40 lines
1.9 KiB
PL/PgSQL
-- Create strategy_configs table for trading agent service
|
|
-- Manages strategy registration, configuration, and lifecycle
|
|
|
|
CREATE TABLE IF NOT EXISTS strategy_configs (
|
|
strategy_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
strategy_name TEXT NOT NULL,
|
|
strategy_type TEXT NOT NULL CHECK (strategy_type IN ('EqualWeight', 'RiskParity', 'MLOptimized', 'MeanVariance', 'Momentum', 'MeanReversion')),
|
|
parameters JSONB NOT NULL DEFAULT '{}',
|
|
status TEXT NOT NULL DEFAULT 'Active' CHECK (status IN ('Active', 'Paused', 'Stopped')),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE(strategy_name)
|
|
);
|
|
|
|
-- Indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_strategy_configs_type ON strategy_configs(strategy_type);
|
|
CREATE INDEX IF NOT EXISTS idx_strategy_configs_status ON strategy_configs(status);
|
|
CREATE INDEX IF NOT EXISTS idx_strategy_configs_created ON strategy_configs(created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_strategy_configs_parameters ON strategy_configs USING GIN (parameters);
|
|
|
|
-- Updated timestamp trigger
|
|
CREATE OR REPLACE FUNCTION update_strategy_configs_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER trigger_update_strategy_configs_updated_at
|
|
BEFORE UPDATE ON strategy_configs
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_strategy_configs_updated_at();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE strategy_configs IS 'Strategy configuration and lifecycle management for trading agent';
|
|
COMMENT ON COLUMN strategy_configs.strategy_type IS 'Type of allocation strategy (EqualWeight, RiskParity, MLOptimized, MeanVariance, Momentum, MeanReversion)';
|
|
COMMENT ON COLUMN strategy_configs.parameters IS 'JSONB configuration parameters specific to strategy type';
|
|
COMMENT ON COLUMN strategy_configs.status IS 'Strategy status (Active, Paused, Stopped)';
|