Files
foxhunt/migrations/041_create_strategy_configs_table.sql
jgrusewski 54c6756345 feat(trading-agent): implement strategy coordination module (Wave 12.2.2)
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>
2025-10-16 07:49:04 +02:00

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)';