feat: implement strategy metadata and dashboard simulation panel
- Added display_name and description to BaseStrategy - Updated MA44 and MA125 strategies with metadata - Added /api/v1/strategies endpoint for dynamic discovery - Added Strategy Simulation panel to dashboard with date picker and tooltips - Implemented JS polling for backtest results in dashboard - Added performance test scripts and DB connection guide - Expanded indicator config to all 15 timeframes
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
# Update docker-compose.yml to mount source code as volume
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
@ -45,6 +46,7 @@ services:
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
- LOG_LEVEL=INFO
|
||||
volumes:
|
||||
- ../src:/app/src
|
||||
- /volume1/btc_bot/logs:/app/logs
|
||||
- ../config:/app/config:ro
|
||||
depends_on:
|
||||
@ -72,6 +74,7 @@ services:
|
||||
- DB_USER=btc_bot
|
||||
- DB_PASSWORD=${DB_PASSWORD}
|
||||
volumes:
|
||||
- ../src:/app/src
|
||||
- /volume1/btc_bot/exports:/app/exports
|
||||
- ../config:/app/config:ro
|
||||
depends_on:
|
||||
@ -80,4 +83,4 @@ services:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
memory: 512M
|
||||
|
||||
@ -51,7 +51,11 @@ SELECT create_hypertable('indicators', 'time',
|
||||
if_not_exists => TRUE
|
||||
);
|
||||
|
||||
-- 7. Create index for indicators
|
||||
-- 7. Create unique constraint + index for indicators (required for upserts)
|
||||
ALTER TABLE indicators
|
||||
ADD CONSTRAINT indicators_unique
|
||||
UNIQUE (time, symbol, interval, indicator_name);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_indicators_lookup
|
||||
ON indicators (symbol, interval, indicator_name, time DESC);
|
||||
|
||||
@ -135,5 +139,61 @@ SELECT
|
||||
FROM candles
|
||||
GROUP BY symbol;
|
||||
|
||||
-- 16. Create decisions table (brain outputs - buy/sell/hold with full context)
|
||||
CREATE TABLE IF NOT EXISTS decisions (
|
||||
time TIMESTAMPTZ NOT NULL,
|
||||
symbol TEXT NOT NULL,
|
||||
interval TEXT NOT NULL,
|
||||
decision_type TEXT NOT NULL,
|
||||
strategy TEXT NOT NULL,
|
||||
confidence DECIMAL(5,4),
|
||||
price_at_decision DECIMAL(18,8),
|
||||
indicator_snapshot JSONB NOT NULL,
|
||||
candle_snapshot JSONB NOT NULL,
|
||||
reasoning TEXT,
|
||||
backtest_id TEXT,
|
||||
executed BOOLEAN DEFAULT FALSE,
|
||||
execution_price DECIMAL(18,8),
|
||||
execution_time TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 17. Convert decisions to hypertable
|
||||
SELECT create_hypertable('decisions', 'time',
|
||||
chunk_time_interval => INTERVAL '7 days',
|
||||
if_not_exists => TRUE
|
||||
);
|
||||
|
||||
-- 18. Indexes for decisions - separate live from backtest queries
|
||||
CREATE INDEX IF NOT EXISTS idx_decisions_live
|
||||
ON decisions (symbol, interval, time DESC) WHERE backtest_id IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_decisions_backtest
|
||||
ON decisions (backtest_id, symbol, time DESC) WHERE backtest_id IS NOT NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_decisions_type
|
||||
ON decisions (symbol, decision_type, time DESC);
|
||||
|
||||
-- 19. Create backtest_runs metadata table
|
||||
CREATE TABLE IF NOT EXISTS backtest_runs (
|
||||
id TEXT PRIMARY KEY,
|
||||
strategy TEXT NOT NULL,
|
||||
symbol TEXT NOT NULL DEFAULT 'BTC',
|
||||
start_time TIMESTAMPTZ NOT NULL,
|
||||
end_time TIMESTAMPTZ NOT NULL,
|
||||
intervals TEXT[] NOT NULL,
|
||||
config JSONB,
|
||||
results JSONB,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 20. Compression for decisions
|
||||
ALTER TABLE decisions SET (
|
||||
timescaledb.compress,
|
||||
timescaledb.compress_segmentby = 'symbol,interval,strategy'
|
||||
);
|
||||
|
||||
SELECT add_compression_policy('decisions', INTERVAL '7 days', if_not_exists => TRUE);
|
||||
|
||||
-- Success message
|
||||
SELECT 'Database schema initialized successfully' as status;
|
||||
Reference in New Issue
Block a user