56 lines
No EOL
2 KiB
PL/PgSQL
56 lines
No EOL
2 KiB
PL/PgSQL
-- Create enum for backtest status (if not exists)
|
|
DO $$ BEGIN
|
|
CREATE TYPE backtest_status AS ENUM ('pending', 'running', 'completed', 'failed', 'cancelled');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
-- Create backtests table
|
|
CREATE TABLE IF NOT EXISTS backtests (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name TEXT NOT NULL,
|
|
strategy TEXT NOT NULL,
|
|
symbols JSONB NOT NULL,
|
|
start_date TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
end_date TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
initial_capital NUMERIC(20, 2) NOT NULL,
|
|
config JSONB DEFAULT '{}',
|
|
status backtest_status NOT NULL DEFAULT 'pending',
|
|
error TEXT,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Create backtest_results table
|
|
CREATE TABLE IF NOT EXISTS backtest_results (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
backtest_id UUID NOT NULL REFERENCES backtests(id) ON DELETE CASCADE,
|
|
completed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
metrics JSONB NOT NULL,
|
|
equity_curve JSONB NOT NULL,
|
|
ohlc_data JSONB NOT NULL,
|
|
trades JSONB NOT NULL,
|
|
positions JSONB NOT NULL,
|
|
analytics JSONB NOT NULL,
|
|
execution_time INTEGER NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Create indexes for better query performance
|
|
CREATE INDEX idx_backtests_status ON backtests(status);
|
|
CREATE INDEX idx_backtests_created_at ON backtests(created_at DESC);
|
|
CREATE INDEX idx_backtests_strategy ON backtests(strategy);
|
|
CREATE INDEX idx_backtest_results_backtest_id ON backtest_results(backtest_id);
|
|
|
|
-- Create updated_at trigger
|
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
DROP TRIGGER IF EXISTS update_backtests_updated_at ON backtests;
|
|
CREATE TRIGGER update_backtests_updated_at BEFORE UPDATE
|
|
ON backtests FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); |