| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS rates ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| symbol VARCHAR(20) NOT NULL, |
| pair VARCHAR(20) NOT NULL, |
| price DECIMAL(20, 8) NOT NULL, |
| ts TIMESTAMP NOT NULL, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| |
| INDEX idx_rates_pair (pair), |
| INDEX idx_rates_symbol (symbol), |
| INDEX idx_rates_ts (ts), |
| INDEX idx_rates_stored (stored_at) |
| ); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS pairs ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| pair VARCHAR(20) NOT NULL UNIQUE, |
| base VARCHAR(10) NOT NULL, |
| quote VARCHAR(10) NOT NULL, |
| tick_size DECIMAL(20, 10) NOT NULL, |
| min_qty DECIMAL(20, 10) NOT NULL, |
| max_qty DECIMAL(20, 10), |
| status VARCHAR(20) DEFAULT 'active', |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_pairs_base (base), |
| INDEX idx_pairs_quote (quote), |
| INDEX idx_pairs_status (status) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS ohlc ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| symbol VARCHAR(20) NOT NULL, |
| interval INTEGER NOT NULL, |
| ts TIMESTAMP NOT NULL, |
| open DECIMAL(20, 8) NOT NULL, |
| high DECIMAL(20, 8) NOT NULL, |
| low DECIMAL(20, 8) NOT NULL, |
| close DECIMAL(20, 8) NOT NULL, |
| volume DECIMAL(20, 8) NOT NULL, |
| trades INTEGER, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| |
| UNIQUE(symbol, interval, ts), |
| |
| INDEX idx_ohlc_symbol (symbol), |
| INDEX idx_ohlc_interval (interval), |
| INDEX idx_ohlc_ts (ts), |
| INDEX idx_ohlc_composite (symbol, interval, ts) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS market_snapshots ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| snapshot_ts TIMESTAMP NOT NULL, |
| total_market_cap DECIMAL(20, 2), |
| btc_dominance DECIMAL(5, 2), |
| eth_dominance DECIMAL(5, 2), |
| volume_24h DECIMAL(20, 2), |
| active_cryptos INTEGER, |
| fear_greed_index INTEGER, |
| payload_json TEXT, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_snapshots_ts (snapshot_ts), |
| INDEX idx_snapshots_stored (stored_at) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS news ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| article_id VARCHAR(100) UNIQUE, |
| title VARCHAR(500) NOT NULL, |
| url VARCHAR(1000), |
| author VARCHAR(200), |
| raw_text TEXT, |
| summary TEXT, |
| published_at TIMESTAMP, |
| tags VARCHAR(500), |
| sentiment_score DECIMAL(3, 2), |
| relevance_score DECIMAL(3, 2), |
| source VARCHAR(100) NOT NULL, |
| fetched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_news_published (published_at), |
| INDEX idx_news_sentiment (sentiment_score), |
| INDEX idx_news_source (source) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS sentiment ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| symbol VARCHAR(20), |
| text_hash VARCHAR(64), |
| score DECIMAL(3, 2) NOT NULL, |
| label VARCHAR(20) NOT NULL, |
| confidence DECIMAL(3, 2), |
| summary TEXT, |
| model VARCHAR(100) NOT NULL, |
| features_used TEXT, |
| generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_sentiment_symbol (symbol), |
| INDEX idx_sentiment_label (label), |
| INDEX idx_sentiment_generated (generated_at) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS whales ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| tx_hash VARCHAR(100) NOT NULL, |
| chain VARCHAR(50) NOT NULL, |
| from_addr VARCHAR(100) NOT NULL, |
| to_addr VARCHAR(100) NOT NULL, |
| token VARCHAR(20) NOT NULL, |
| amount DECIMAL(30, 10) NOT NULL, |
| amount_usd DECIMAL(20, 2) NOT NULL, |
| gas_used DECIMAL(20, 0), |
| gas_price DECIMAL(20, 10), |
| block INTEGER NOT NULL, |
| tx_at TIMESTAMP NOT NULL, |
| tx_type VARCHAR(50), |
| metadata TEXT, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| |
| UNIQUE(chain, tx_hash), |
| |
| INDEX idx_whales_chain (chain), |
| INDEX idx_whales_token (token), |
| INDEX idx_whales_amount_usd (amount_usd), |
| INDEX idx_whales_tx_at (tx_at), |
| INDEX idx_whales_from (from_addr), |
| INDEX idx_whales_to (to_addr) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS onchain_events ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| event_id VARCHAR(100) UNIQUE, |
| chain VARCHAR(50) NOT NULL, |
| address VARCHAR(100) NOT NULL, |
| event_type VARCHAR(50) NOT NULL, |
| contract_addr VARCHAR(100), |
| method VARCHAR(100), |
| block_number INTEGER NOT NULL, |
| tx_hash VARCHAR(100), |
| log_index INTEGER, |
| event_data TEXT, |
| decoded_data TEXT, |
| event_at TIMESTAMP NOT NULL, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_onchain_chain (chain), |
| INDEX idx_onchain_address (address), |
| INDEX idx_onchain_type (event_type), |
| INDEX idx_onchain_block (block_number), |
| INDEX idx_onchain_at (event_at) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS model_outputs ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| prediction_id VARCHAR(100) UNIQUE, |
| model_key VARCHAR(100) NOT NULL, |
| model_version VARCHAR(20), |
| symbol VARCHAR(20), |
| prediction_type VARCHAR(50) NOT NULL, |
| horizon VARCHAR(20), |
| score DECIMAL(5, 4) NOT NULL, |
| confidence DECIMAL(3, 2), |
| prediction_value DECIMAL(20, 8), |
| lower_bound DECIMAL(20, 8), |
| upper_bound DECIMAL(20, 8), |
| features_json TEXT, |
| data_json TEXT, |
| explanation TEXT, |
| meta_json TEXT, |
| generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| valid_until TIMESTAMP, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_models_key (model_key), |
| INDEX idx_models_symbol (symbol), |
| INDEX idx_models_type (prediction_type), |
| INDEX idx_models_generated (generated_at), |
| INDEX idx_models_score (score) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS signals ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| signal_id VARCHAR(100) UNIQUE, |
| symbol VARCHAR(20) NOT NULL, |
| signal_type VARCHAR(50) NOT NULL, |
| strength VARCHAR(20), |
| score DECIMAL(5, 4) NOT NULL, |
| confidence DECIMAL(3, 2), |
| timeframe VARCHAR(20), |
| entry_price DECIMAL(20, 8), |
| target_price DECIMAL(20, 8), |
| stop_loss DECIMAL(20, 8), |
| risk_reward_ratio DECIMAL(5, 2), |
| conditions TEXT, |
| metadata TEXT, |
| model_used VARCHAR(100), |
| generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| expires_at TIMESTAMP, |
| status VARCHAR(20) DEFAULT 'active', |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_signals_symbol (symbol), |
| INDEX idx_signals_type (signal_type), |
| INDEX idx_signals_status (status), |
| INDEX idx_signals_generated (generated_at), |
| INDEX idx_signals_score (score) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS econ_reports ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| report_id VARCHAR(100) UNIQUE, |
| currency VARCHAR(10) NOT NULL, |
| period VARCHAR(20) NOT NULL, |
| context VARCHAR(500), |
| report_text TEXT NOT NULL, |
| findings_json TEXT, |
| metrics_json TEXT, |
| score DECIMAL(3, 1), |
| sentiment VARCHAR(20), |
| risk_level VARCHAR(20), |
| generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| valid_until TIMESTAMP, |
| source VARCHAR(100) NOT NULL, |
| stored_from VARCHAR(100), |
| stored_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_econ_currency (currency), |
| INDEX idx_econ_period (period), |
| INDEX idx_econ_generated (generated_at) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS api_logs ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| request_id VARCHAR(100) UNIQUE, |
| endpoint VARCHAR(200) NOT NULL, |
| method VARCHAR(10) NOT NULL, |
| params TEXT, |
| response_code INTEGER, |
| response_time_ms INTEGER, |
| source_used VARCHAR(100), |
| fallback_attempted TEXT, |
| error_message TEXT, |
| client_ip VARCHAR(45), |
| user_agent VARCHAR(500), |
| created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| |
| INDEX idx_logs_endpoint (endpoint), |
| INDEX idx_logs_created (created_at), |
| INDEX idx_logs_response_code (response_code) |
| ); |
|
|
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS cache_entries ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| cache_key VARCHAR(200) NOT NULL UNIQUE, |
| endpoint VARCHAR(200) NOT NULL, |
| params_hash VARCHAR(64) NOT NULL, |
| response_data TEXT NOT NULL, |
| ttl_seconds INTEGER NOT NULL, |
| hit_count INTEGER DEFAULT 0, |
| created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| expires_at TIMESTAMP NOT NULL, |
| last_accessed TIMESTAMP, |
| |
| INDEX idx_cache_key (cache_key), |
| INDEX idx_cache_expires (expires_at), |
| INDEX idx_cache_endpoint (endpoint) |
| ); |
|
|
| |
| |
| |
|
|
| |
| CREATE VIEW IF NOT EXISTS v_latest_rates AS |
| SELECT |
| pair, |
| price, |
| ts, |
| source |
| FROM rates |
| WHERE (pair, stored_at) IN ( |
| SELECT pair, MAX(stored_at) |
| FROM rates |
| GROUP BY pair |
| ); |
|
|
| |
| CREATE VIEW IF NOT EXISTS v_market_summary AS |
| SELECT |
| (SELECT total_market_cap FROM market_snapshots ORDER BY snapshot_ts DESC LIMIT 1) as market_cap, |
| (SELECT btc_dominance FROM market_snapshots ORDER BY snapshot_ts DESC LIMIT 1) as btc_dominance, |
| (SELECT COUNT(DISTINCT pair) FROM rates WHERE stored_at > datetime('now', '-1 hour')) as active_pairs, |
| (SELECT AVG(sentiment_score) FROM news WHERE fetched_at > datetime('now', '-24 hours')) as avg_news_sentiment; |
|
|
| |
| CREATE VIEW IF NOT EXISTS v_top_whales_24h AS |
| SELECT |
| chain, |
| token, |
| COUNT(*) as tx_count, |
| SUM(amount_usd) as total_volume_usd, |
| AVG(amount_usd) as avg_tx_usd, |
| MAX(amount_usd) as max_tx_usd |
| FROM whales |
| WHERE tx_at > datetime('now', '-24 hours') |
| GROUP BY chain, token |
| ORDER BY total_volume_usd DESC; |
|
|
| |
| CREATE VIEW IF NOT EXISTS v_active_signals AS |
| SELECT |
| symbol, |
| signal_type, |
| strength, |
| score, |
| confidence, |
| entry_price, |
| target_price, |
| stop_loss, |
| generated_at, |
| expires_at |
| FROM signals |
| WHERE status = 'active' |
| AND (expires_at IS NULL OR expires_at > CURRENT_TIMESTAMP) |
| ORDER BY score DESC, generated_at DESC; |
|
|
| |
| |
| |
|
|
| |
| CREATE TRIGGER IF NOT EXISTS update_pairs_timestamp |
| AFTER UPDATE ON pairs |
| BEGIN |
| UPDATE pairs SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id; |
| END; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| INSERT OR IGNORE INTO pairs (pair, base, quote, tick_size, min_qty, source) |
| VALUES |
| ('BTC/USDT', 'BTC', 'USDT', 0.01, 0.00001, 'hf'), |
| ('ETH/USDT', 'ETH', 'USDT', 0.01, 0.0001, 'hf'), |
| ('SOL/USDT', 'SOL', 'USDT', 0.001, 0.01, 'hf'), |
| ('BNB/USDT', 'BNB', 'USDT', 0.01, 0.001, 'hf'), |
| ('XRP/USDT', 'XRP', 'USDT', 0.0001, 1.0, 'hf'); |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
| |