62 lines
1.8 KiB
SQL
62 lines
1.8 KiB
SQL
-- Initial schema for AI Trading Application
|
|
|
|
-- Trades table
|
|
CREATE TABLE IF NOT EXISTS trades (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
symbol TEXT NOT NULL,
|
|
action TEXT NOT NULL CHECK(action IN ('BUY', 'SELL')),
|
|
quantity INTEGER NOT NULL,
|
|
status TEXT NOT NULL CHECK(status IN ('PENDING', 'APPROVED', 'REJECTED', 'SUBMITTED', 'FILLED', 'COMPLETED', 'STOPPED')),
|
|
confidence REAL NOT NULL,
|
|
reasoning TEXT,
|
|
|
|
target_price REAL,
|
|
executed_price REAL,
|
|
stop_loss_price REAL,
|
|
ib_order_id INTEGER,
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
pending_until TIMESTAMP,
|
|
approved_at TIMESTAMP,
|
|
rejected_at TIMESTAMP,
|
|
submitted_at TIMESTAMP,
|
|
filled_at TIMESTAMP,
|
|
completed_at TIMESTAMP,
|
|
|
|
rejection_reason TEXT,
|
|
forced_by_user BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_trades_status ON trades(status);
|
|
CREATE INDEX IF NOT EXISTS idx_trades_symbol ON trades(symbol);
|
|
CREATE INDEX IF NOT EXISTS idx_trades_created_at ON trades(created_at DESC);
|
|
|
|
-- Balances table
|
|
CREATE TABLE IF NOT EXISTS balances (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
total_value REAL NOT NULL,
|
|
cash_balance REAL NOT NULL,
|
|
buying_power REAL NOT NULL,
|
|
unrealized_pnl REAL,
|
|
realized_pnl REAL,
|
|
|
|
UNIQUE(timestamp)
|
|
);
|
|
|
|
-- News articles table
|
|
CREATE TABLE IF NOT EXISTS news_articles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
source TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
url TEXT NOT NULL UNIQUE,
|
|
content TEXT,
|
|
published_at TIMESTAMP NOT NULL,
|
|
fetched_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
symbols TEXT,
|
|
sentiment_score REAL,
|
|
sentiment_label TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_news_published_at ON news_articles(published_at DESC);
|