116 lines
4.5 KiB
Python
116 lines
4.5 KiB
Python
"""
|
||
山寨币监控数据库Schema
|
||
|
||
与 altcoin_db.py 保持完全一致,4张表:
|
||
1. coin_state — 状态去重管理
|
||
2. screening_log — 每次筛选的历史记录
|
||
3. recommendation — 推荐追踪(入场→止损→止盈→最终结果)
|
||
4. price_tracking — 推荐后的价格跟踪快照
|
||
|
||
注意:此文件仅作为schema参考文档,实际初始化由 altcoin_db.init_db() 执行。
|
||
此文件不应被 screener/confirm 等模块直接导入调用。
|
||
"""
|
||
|
||
import sqlite3
|
||
|
||
DB_PATH = "/home/ubuntu/quant_monitor/altcoin/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个索引)") |