""" 山寨币监控数据库Schema 与 altcoin_db.py 保持完全一致,4张表: 1. coin_state — 状态去重管理 2. screening_log — 每次筛选的历史记录 3. recommendation — 推荐追踪(入场→止损→止盈→最终结果) 4. price_tracking — 推荐后的价格跟踪快照 注意:此文件仅作为schema参考文档,实际初始化由 altcoin_db.init_db() 执行。 此文件不应被 screener/confirm 等模块直接导入调用。 """ import os import sqlite3 from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[2] DB_PATH = os.getenv("ALPHAX_DB_PATH", str(REPO_ROOT / "data" / "altcoin_monitor.db")) def init_db(): conn = sqlite3.connect(DB_PATH) conn.execute("PRAGMA journal_mode=WAL") # 1. 状态去重表 conn.execute(""" CREATE TABLE IF NOT EXISTS coin_state ( symbol TEXT PRIMARY KEY, state TEXT NOT NULL DEFAULT '蓄力', score INTEGER DEFAULT 0, anomaly_type TEXT DEFAULT '', sector TEXT DEFAULT '', leader_status TEXT DEFAULT '', detected_at TEXT NOT NULL, last_alert_time TEXT DEFAULT '', last_alert_level TEXT DEFAULT '', detail_json TEXT DEFAULT '{}' ) """) # 2. 筛选记录表(每次筛选全量写入) conn.execute(""" CREATE TABLE IF NOT EXISTS screening_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, scan_time TEXT NOT NULL, layer TEXT NOT NULL, -- '粗筛'/'细筛'/'确认' symbol TEXT NOT NULL, state TEXT NOT NULL, -- 蓄力/加速/爆发/过期 score INTEGER DEFAULT 0, price REAL NOT NULL, -- 筛选时价格 signals TEXT DEFAULT '', -- 信号列表(json array) sector TEXT DEFAULT '', leader_status TEXT DEFAULT '', is_meme INTEGER DEFAULT 0, change_24h REAL DEFAULT 0, funding_rate REAL DEFAULT 0, detail_json TEXT DEFAULT '{}' ) """) # 3. 推荐表(加速/爆发时生成推荐记录,跟踪最终盈亏) conn.execute(""" CREATE TABLE IF NOT EXISTS recommendation ( id INTEGER PRIMARY KEY AUTOINCREMENT, symbol TEXT NOT NULL, rec_time TEXT NOT NULL, -- 推荐时间 rec_state TEXT NOT NULL, -- 加速/爆发 rec_score INTEGER DEFAULT 0, entry_price REAL NOT NULL, -- 推荐时价格 stop_loss REAL DEFAULT 0, tp1 REAL DEFAULT 0, tp2 REAL DEFAULT 0, sector TEXT DEFAULT '', signals TEXT DEFAULT '', -- 触发信号(json) is_meme INTEGER DEFAULT 0, status TEXT DEFAULT 'active', -- active/hit_tp1/hit_tp2/stopped_out/expired current_price REAL DEFAULT 0, -- 最新跟踪价格 max_price REAL DEFAULT 0, -- 推荐后最高价 min_price REAL DEFAULT 0, -- 推荐后最低价 pnl_pct REAL DEFAULT 0, -- 当前盈亏% max_pnl_pct REAL DEFAULT 0, -- 最大盈亏% max_drawdown_pct REAL DEFAULT 0, -- 最大回撤% hit_tp1_time TEXT DEFAULT '', hit_tp2_time TEXT DEFAULT '', stopped_out_time TEXT DEFAULT '', expired_time TEXT DEFAULT '', last_track_time TEXT DEFAULT '', entry_plan_json TEXT DEFAULT '{}' ) """) # 4. 价格跟踪表(定时快照推荐币的当前价格) conn.execute(""" CREATE TABLE IF NOT EXISTS price_tracking ( id INTEGER PRIMARY KEY AUTOINCREMENT, rec_id INTEGER NOT NULL, -- 关联recommendation.id symbol TEXT NOT NULL, track_time TEXT NOT NULL, price REAL NOT NULL, pnl_pct REAL DEFAULT 0, FOREIGN KEY (rec_id) REFERENCES recommendation(id) ) """) # 索引 conn.execute("CREATE INDEX IF NOT EXISTS idx_screening_time ON screening_log(scan_time)") conn.execute("CREATE INDEX IF NOT EXISTS idx_screening_symbol ON screening_log(symbol)") conn.execute("CREATE INDEX IF NOT EXISTS idx_rec_status ON recommendation(status)") conn.execute("CREATE INDEX IF NOT EXISTS idx_rec_symbol ON recommendation(symbol)") conn.execute("CREATE INDEX IF NOT EXISTS idx_rec_time ON recommendation(rec_time)") conn.commit() conn.close() if __name__ == "__main__": init_db() print("DB Schema初始化完成(4张表+5个索引)")