
KronosView 完整数据库设计方案版本 v2.0 Final设计时间 2026-07-10 00:07数据库引擎 SQLite 3.x字符集 UTF-8 一、设计原则与目标核心设计原则原则说明实现方式数据完整性避免重复、保证一致性UNIQUE约束、事务保护查询高效支持高频读取、快速筛选合理索引、分区设计可扩展性易于添加新功能、新字段冗余字段预留、JSON存储时间对齐统一处理多周期时间戳ISO 8601标准、Unix时间戳双存储版本追溯可回溯历史预测记录prediction_time快照机制业务需求分析┌─────────────────────────────────────────────────────────────┐│ KronosView 数据流 │├─────────────────────────────────────────────────────────────┤│ ││ 【数据采集】 ││ ├── MT4实时写入6个周期的OHLCV数据 ││ ├── 频率M1每分钟、D1每天一次 ││ └── 写入方式INSERT OR REPLACE (去重更新) ││ ││ 【模型推理】 ││ ├── 定时触发如每5分钟/每小时 ││ ├── 输入最近N根K线历史 ││ ├── 输出未来M根K线预测 ││ └── 存储为prediction_time target_time 键值对 ││ ││ 【前端展示】 ││ ├── 查询原始K线 → 绘制蜡烛图 ││ ├── 查询预测曲线 → 叠加显示 ││ ├── 对比验证 → 预测 vs 实际偏差计算 ││ └── 切换6个周期 → 动态加载不同时间粒度 ││ │└─────────────────────────────────────────────────────────────┘️ 二、完整ER图与表结构2.1 实体关系总览┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ raw_ohlc_data │ │ predictions │ │ model_configs ││ (原始K线数据) │ │ (预测结果) │ │ (模型配置参数) │├──────────────────┤ ├──────────────────┤ ├──────────────────┤│ *id │◄──┐ │ *id │ │ *id ││ symbol │ │ │ *symbol │ │ config_name ││ timeframe │ │ │ *timeframe │ │ model_version ││ *timestamp │ │ │ *prediction_time │ │ lookback ││ open/high/low │ │ │target_time │ │ pred_len ││ close/volume │ │ │ pred_open/high │ │ temperature ││ amount │ │ │ pred_low/close │ │ top_p ││ created_at │ └─│ confidence │ │ sample_count ││ │ │ actual_│ │ description ││ │ │ created_at │ │ is_active │└──────────────────┘ └──────────────────┘ └──────────────────┘▲ ▲│ ││ 引用 │ 引用│ │┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐│ symbols_info │ │ timeframes_def │ │ prediction_tasks ││ (交易品种信息) │ │ (周期定义常量表) │ │ (预测任务记录) │├──────────────────┤ ├──────────────────┤ ├──────────────────┤│ *symbol │ │ *code │ │ *task_id ││ symbol_name │ │ display_name │ │ symbol ││ digits │ │ seconds_per_bar │ │ timeframe ││ trade_mode │ │ description │ │ status ││ contract_size │ │ sort_order │ │ triggered_at ││ created_at │ └──────────────────┘ │ completed_at │└──────────────────┘ │ duration_ms ││ result_count ││ error_message ││ config_used │└──────────────────┘▲│┌──────────────────┐│ eval_metrics ││ (预测准确率统计) │├──────────────────┤│ *eval_id ││ *prediction_time ││ symbol ││ timeframe ││ pred_horizon ││ mae/rmse/mape ││ direction_acc ││ evaluated_at │└──────────────────┘2.2 详细表结构定义表1交易品种信息表 (symbols_info)用途 存储支持的交易品种基础信息便于统一管理和国际化展示。CREATE TABLE IF NOT EXISTS symbols_info (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 基本信息 symbol TEXT NOT NULL UNIQUE, -- 品种代码如 XAUUSD symbol_name TEXT NOT NULL, -- 显示名称如 黄金/美元 symbol_type TEXT DEFAULT CURRENCY, -- 类型: CURRENCY/Crypto/INDEX/COMMODITY -- 交易属性 digits INTEGER NOT NULL DEFAULT 5, -- 小数位数用于价格格式化 point REAL NOT NULL DEFAULT 0.00001, -- 最小变动单位 spread INTEGER DEFAULT 30, -- 点差默认30点 contract_size INTEGER DEFAULT 100, -- 合约规模标准手100盎司 -- 市场状态 trade_mode INTEGER DEFAULT 4, -- 0-关闭, 1-开, 2-仅收盘, 3-仅全距 is_active BOOLEAN DEFAULT 1, -- 是否启用采集 -- 元数据 description TEXT, -- 备注说明 source_broker TEXT, -- 数据来源经纪商 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 约束 CHECK(digits 0 AND digits 10), CHECK(point 0));– 示例数据INSERT OR IGNORE INTO symbols_info VALUES(1, ‘XAUUSD’, ‘黄金/美元现货’, ‘COMMODITY’, 5, 0.00001, 30, 100, 4, 1,‘黄金兑美元现货价格全球最活跃的贵金属交易品种’, ‘IC Markets’,datetime(‘now’), datetime(‘now’));– 创建索引CREATE INDEX IF NOT EXISTS idx_symbols_active ON symbols_info(is_active);关键字段说明digits: 用于前端格式化价格显示如1800.12345 → $1,800.12contract_size: 用于计算amount price × volume × contract_sizeis_active: 控制是否对该品种进行数据采集和预测表2时间周期定义表 (timeframes_def)用途 定义系统支持的K线周期作为枚举常量使用。CREATE TABLE IF NOT EXISTS timeframes_def (code TEXT PRIMARY KEY, – 周期代码: M1/M5/M15/H1/H4/D1/W1/MNdisplay_name TEXT NOT NULL, – 显示名称: “1分钟” / “5分钟”mt4_period_value INTEGER NOT NULL, – MT4内部常量: PERIOD_M11, M55…seconds_per_bar INTEGER NOT NULL, – 每根K线秒数: M160, D186400description TEXT, – 周期特点描述sort_order INTEGER DEFAULT 0, – UI排序权重越小越靠前CHECK(seconds_per_bar 0));– 插入标准6个周期定义INSERT OR IGNORE INTO timeframes_def VALUES(‘M1’, ‘1分钟’, 1, 60, ‘超短线/剥头皮交易’, 1),(‘M5’, ‘5分钟’, 5, 300, ‘短线/日内交易主力周期’, 2),(‘M15’, ‘15分钟’, 15, 900, ‘短线到中线过渡’, 3),(‘H1’, ‘1小时’, 60, 3600, ‘日线内主要趋势’, 4),(‘H4’, ‘4小时’, 240, 14400, ‘中线趋势判断’, 5),(‘D1’, ‘日线’, 14401, 86400, ‘长线趋势分析/持仓过夜’, 6),(‘W1’, ‘周线’, 10080,604800,‘长线宏观走势’, 7),(‘MN’, ‘月线’, 43200,2592000,‘超长线投资参考’, 8);为什么需要这张表✅ 避免魔法数字硬编码在代码中✅ 方便前端动态生成UI选项✅ 统一管理周期名称的国际化翻译✅ 轻松扩展新周期如Tick级、秒级表3原始OHLC数据表 (raw_ohlc_data) ⭐核心表用途 存储MT4实时采集的所有K线数据是整个系统的数据基础。CREATE TABLE IF NOT EXISTS raw_ohlc_data (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 维度标识复合唯一键 symbol TEXT NOT NULL, -- 品种: XAUUSD timeframe TEXT NOT NULL, -- 周期: M1-M1-D1 timestamp DATETIME NOT NULL, -- K线开始时间UTC -- OHLCV五维数据必填 open REAL NOT NULL, -- 开盘价 high REAL NOT NULL, -- 最高价必须open和low low REAL NOT NULL, -- 最低价必须open和high close REAL NOT NULL, -- 收盘价 volume REAL NOT NULL DEFAULT 0, -- 成交量MT4提供 amount REAL NOT NULL DEFAULT 0, -- 成交额 ≈ close × volume -- 扩展指标可选后续技术分析用 sma_fast REAL, -- 快速均线(MA5) sma_slow REAL, -- 慢速均线(MA20) ema_12 REAL, -- EMA12 ema_26 REAL, -- EMA26 rsi_14 REAL, -- RSI相对强弱指标 macd REAL, -- MACD值 macd_signal REAL, -- MACD信号线 bb_upper REAL, -- 布林带上轨 bb_middle REAL, -- 布林带中轨 bb_lower REAL, -- 布林带下轨 -- 元数据 tick_volume INTEGER DEFAULT 0, -- Tick成交量 spread INTEGER DEFAULT 0, -- 当时的点差 data_source TEXT DEFAULT MT4_REALTIME, -- 数据来源标识 is_complete BOOLEAN DEFAULT 1, -- K线是否已完成(未完成当前这根) created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 约束条件 CONSTRAINT uk_ohlc_unique UNIQUE(symbol, timeframe, timestamp), CHECK(open 0 AND high 0 AND low 0 AND close 0), CHECK(high open AND high low), CHECK(low open AND low close), CHECK(volume 0), CHECK(timeframe IN (M1,M5,M15,H1,H4,D1,W1,MN)));– 关键索引加速常用查询– 1. 主查询按时间和品种获取最新N根K线CREATE INDEX idx_ohlc_main_query ON raw_ohlc_data(symbol, timeframe, timestamp DESC);– 2. 时间范围查询前端图表加载某段时间CREATE INDEX idx_ohlc_time_range ON raw_ohlc_data(timestamp);– 3. 最新数据查询每个周期只取最后一根CREATE INDEX idx_ohlc_latest ON raw_ohlc_data(symbol, timeframe, timestamp DESC, id);设计亮点复合唯一键 (symbol, timeframe, timestamp)INSERT OR REPLACE INTO raw_ohlc_data (…) VALUES (…);MT4每次OnTick都调用此语句自动实现去重更新预留技术指标列 (sma_fast, rsi_14, etc.)后续可以在Node.js后端批量计算并回填避免频繁查询时重复计算可选字段不影响基本功能data_source 字段区分来源‘MT4_REALTIME’ - MT4实时写入默认‘API_HISTORICAL’ - 从API拉取的历史补全‘BACKTEST_SIM’ - 回测模拟数据‘MANUAL_CORRECT’ - 人工修正的数据is_complete 标记当前正在形成的K线未收盘标记为0前端可以用虚线或半透明显示未完成的K线预测时应该只用已完成的K线is_complete1数据量预估周期 日新增行数 月新增 年增量M1 ~1440根 43,200 518,400M5 ~288根 8,640 103,680M15 ~96根 2,880 34,560H1 ~24根 720 8,640H4 ~6根 180 2,160D1 ~1根 30 360总计年增约67万行SQLite完全胜任表4预测配置参数表 (model_configs)用途 存储Kronos模型的运行参数配置支持多组配置对比实验。CREATE TABLE IF NOT EXISTS model_configs (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 配置标识 config_name TEXT NOT NULL UNIQUE, -- 配置名: default / conservative / aggressive description TEXT, -- 配置说明文字 -- Kronos模型选择 model_version TEXT NOT NULL DEFAULT kronos-mini, -- 可选: kronos-mini / kronos-small / kronos-base / kronos-large -- 核心预测参数 lookback INTEGER NOT NULL DEFAULT 400, -- 历史窗口长度K线数 pred_len INTEGER NOT NULL DEFAULT 24, -- 预测未来步数K线数 -- 采样控制参数 temperature REAL NOT NULL DEFAULT 0.8, -- 温度参数0.5-1.5 top_p REAL NOT NULL DEFAULT 0.9, -- 核采样阈值0.8-0.95 top_k INTEGER DEFAULT 0, -- Top-K过滤0禁用 sample_count INTEGER DEFAULT 3, -- 采样路径数多次平均提高稳定性 -- 高级选项 max_context INTEGER DEFAULT 2048, -- 最大上下文限制 clip_range REAL DEFAULT 5.0, -- Z-Score裁剪范围 use_cache BOOLEAN DEFAULT 1, -- 是否启用缓存 cache_ttl_minutes INTEGER DEFAULT 30, -- 缓存有效期分钟 -- 适用范围限定 applicable_timeframes TEXT DEFAULT ALL, -- 适用周期: M5,H15,H1 或 ALL min_data_required INTEGER DEFAULT 100, -- 最小数据量要求 -- 元数据 created_by TEXT DEFAULT system, -- 创建者 is_active BOOLEAN DEFAULT 1, -- 是否为活跃配置 last_used_at DATETIME, -- 最后使用时间 usage_count INTEGER DEFAULT 0, -- 使用次数统计 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, CHECK(lookback 0 AND lookback 2048), CHECK(pred_len 0 AND pred_len 512), CHECK(temperature 0.1 AND temperature 2.0), CHECK(top_p 0 AND top_p 1.0), CHECK(sample_count 1 AND sample_count 20));– 预设几组推荐配置INSERT OR IGNORE INTO model_configs VALUES(1, ‘default’, ‘通用默认配置平衡精度与速度’,‘kronos-mini’, 400, 24, 0.8, 0.9, 0, 3, 2048, 5.0, 1, 30, ‘ALL’, 100,‘system’, 1, NULL, 0, datetime(‘now’), datetime(‘now’)),(2, ‘conservative’, ‘保守模式低随机性适合稳定信号’,‘kronos-mini’, 500, 16, 0.6, 0.85, 50, 5, 2048, 4.0, 1, 60, ‘H1,H4,D1’, 200,‘system’, 1, NULL, 0, datetime(‘now’), datetime(‘now’)),(3, ‘explorative’, ‘探索模式高多样性发现潜在走势’,‘kronos-small’, 300, 48, 1.2, 0.95, 0, 10, 512, 6.0, 0, 15, ‘M5,M15,H1’, 150,‘system’, 0, NULL, 0, datetime(‘now’), datetime(‘now’));为什么需要配置表✅ A/B测试同时跑多组参数对比效果✅ 一键切换前端可以下拉选择不同策略✅ 版本追溯知道哪次预测用了什么参数✅ 团队协作共享最佳实践配置表5预测结果表 (predictions) ⭐⭐⭐ 最重要表用途 存储Kronos模型的所有预测输出支持多维度的查询和对比验证。CREATE TABLE IF NOT EXISTS predictions (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 维度标识复合唯一键 symbol TEXT NOT NULL, timeframe TEXT NOT NULL, prediction_time DATETIME NOT NULL, -- 模型执行预测的时刻基准时间点 target_time DATETIME NOT NULL, -- 预测目标的未来时刻 step_ahead INTEGER NOT NULL, -- 向前第几步1pred_len第1根... -- 预测的OHLCV四维数据Kronos输出 pred_open REAL, -- 预测开盘价 pred_high REAL, -- 预测最高价 pred_low REAL, -- 预测最低价 pred_close REAL, -- 预测收盘价最重要 pred_volume REAL DEFAULT 0, -- 预测量仅供参考不准 pred_amount REAL DEFAULT 0, -- 预测金额 -- 不确定性度量如果sample_count1可计算 pred_close_mean REAL, -- 多次采样的均值 pred_close_std REAL, -- 多次采样的标准差不确定性指标 confidence REAL, -- 综合置信度0-1 -- 实际观测值target_time到来后回填 actual_open REAL, actual_high REAL, actual_low REAL, actual_close REAL, actual_volume REAL DEFAULT 0, is_verified BOOLEAN DEFAULT 0, -- 已被实际数据验证 verified_at DATETIME, -- 验证时间 -- 误差指标验证后计算 error_open REAL, -- abs(pred_open - actual_open) error_high REAL, error_low REAL, error_close REAL, -- 最关注的误差 error_pct REAL, -- 相误差百分比 direction_correct BOOLEAN, -- 涨跌方向是否正确pred_close vs actual_close -- 关联元数据 config_id INTEGER, -- 使用了哪组配置参数 task_id INTEGER, -- 属于哪个预测任务批次 model_version TEXT DEFAULT kronos-mini, inference_time_ms INTEGER, -- 本次推理耗时毫秒 cpu_usage_pct REAL, -- CPU占用率可选监控 -- 元数据 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 约束条件 CONSTRAINT uk_prediction UNIQUE(symbol, timeframe, prediction_time, target_time), CHECK(step_ahead 0 AND step_ahead 512), CHECK(confidence IS NULL OR (confidence 0 AND confidence 1)), FOREIGN KEY (config_id) REFERENCES model_configs(id));– 核心索引根据查询模式优化– 1. 主查询获取某次预测的完整曲线CREATE INDEX idx_pred_curve ON predictions(symbol, timeframe, prediction_time, step_ahead ASC);– 2. 验证查询查找某个时间点之前的所有预测CREATE INDEX idx_pred_verify ON predictions(symbol, timeframe, target_time, prediction_time DESC);– 3. 最新预测只查最近的预测结果CREATE INDEX idx_pred_latest ON predictions(symbol, timeframe, prediction_time DESC);– 4. 性能评估按配置ID聚合统计CREATE INDEX idx_pred_config ON predictions(config_id, created_at DESC); 设计核心理解prediction_time target_time 双时间键假设现在是 2026-07-10 00:07 (prediction_time)Kronos预测未来24根5分钟K线step_ahead1 → target_time 00:10 (未来第1根)step_ahead2 → target_time 00:15 (未来第2根)…step_ahead24 → target_time 02:27 (未来第24根)当实际时间到达02:27后→ 回填 actual_open/high/low/close→ 计算 error_close, direction_correct→ 标记 is_verified TRUE这种设计的巨大优势✅ 可追溯任何时刻都能看到当时预测的是什么✅ 可验证预测到期后自动对比实际值✅ 可视化友好前端直接绘制多条历史预测曲线✅ 统计分析方便计算MAE、RMSE、准确率等指标表6预测任务记录表 (prediction_tasks)用途 记录每一次批量预测任务的元信息用于监控和调试。CREATE TABLE IF NOT EXISTS prediction_tasks (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 任务标识 task_uuid TEXT NOT NULL UNIQUE, -- UUID全局唯一标识 task_type TEXT NOT NULL DEFAULT BATCH, -- BATCH/SINGLE/BACKTEST -- 任务范围 symbol TEXT NOT NULL, timeframe TEXT NOT NULL, -- 单周期任务BATCH时可空 timeframes TEXT, -- 批量周期列表: M5,M15,H1 -- 状态跟踪 status TEXT NOT NULL DEFAULT PENDING, -- PENDING/RUNNING/SUCCESS/FAILED/PARTIAL/CANCELLED -- 时间戳 triggered_at DATETIME NOT NULL, -- 触发时间 started_at DATETIME, -- 实际开始执行 completed_at DATETIME, -- 完成时间 duration_ms INTEGER, -- 总耗时毫秒 -- 结果统计 total_predictions INTEGER DEFAULT 0, -- 生成的预测总数 success_count INTEGER DEFAULT 0, -- 成功数量 failed_count INTEGER DEFAULT 0, -- 失败数量 -- 配置信息 config_id INTEGER, -- 使用的模型配置 input_data_rows INTEGER, -- 输入的历史数据行数 model_loaded_ms INTEGER, -- 模型加载耗时 preprocessing_ms INTEGER, -- 数据预处理耗时 inference_total_ms INTEGER, -- 总推理耗时 -- 错误处理 error_code INTEGER, error_message TEXT, stack_trace TEXT, -- 异常堆栈调试用 -- 元数据 triggered_by TEXT DEFAULT SCHEDULER, -- SCHEDULER/API/MANUAL created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (config_id) REFERENCES model_configs(id));– 索引CREATE INDEX idx_tasks_status ON prediction_tasks(status, triggered_at DESC);CREATE INDEX idx_tasks_symbol ON prediction_tasks(symbol, timeframe);使用场景– 查看今天的所有预测任务及其状态SELECT task_uuid, status, duration_ms, total_predictions,error_messageFROM prediction_tasksWHERE DATE(triggered_at) DATE(‘now’)ORDER BY triggered_at DESC;– 监控最近24小时的任务成功率SELECTCOUNT(*) as total,SUM(CASE WHEN status‘SUCCESS’ THEN 1 ELSE 0 END) as success_rate,AVG(duration_ms) as avg_durationFROM prediction_tasksWHERE triggered_at datetime(‘now’, ‘-24 hours’);表7预测性能评估表 (eval_metrics)用途 聚合统计预测准确率用于长期监控模型表现和调优参数。CREATE TABLE IF NOT EXISTS eval_metrics (id INTEGER PRIMARY KEY AUTOINCREMENT,-- 评估维度 symbol TEXT NOT NULL, timeframe TEXT NOT NULL, prediction_time DATETIME NOT NULL, -- 被评估的预测批次 -- 评估范围 eval_start_step INTEGER NOT NULL, -- 评估起始步如前8根 eval_end_step INTEGER NOT NULL, -- 评估结束步如全部24根 horizon_label TEXT, -- SHORT(8根) / MEDIUM(16根) / LONG(24根) -- 准确率指标 direction_accuracy REAL, -- 涨跌方向准确率% mae REAL, -- Mean Absolute Error (绝对平均误差) rmse REAL, -- Root Mean Square Error (均方根误差) mape REAL, -- Mean Absolute Percentage Error (%) medae REAL, -- Median Absolute Error (中位数绝对误差) -- 细分误差 mae_open REAL, -- 开盘价MAE mae_high REAL, -- 最高价MAE mae_low REAL, -- 最低价MAE mae_close REAL, -- 收盘价MAE最重要 -- 分布特征 error_mean REAL, -- 误差均值系统性偏差 error_std REAL, -- 误差标准差稳定性指标 skewness REAL, -- 偏态是否倾向高估/低估 kurtosis REAL, -- 峰度是否出现极端错误 -- 统计显著性 sample_size INTEGER, -- 评估样本数 p_value REAL, /* p-valuevs随机猜测*/ ci_95_lower REAL, -- 95%置信区间下界 ci_95_upper REAL, -- 95%置信区间上界 -- 关联信息 config_id INTEGER, -- 使用配置 compared_to_config_id INTEGER, -- 对比基准配置可选 -- 元数据 evaluated_at DATETIME NOT NULL, evaluator TEXT DEFAULT auto, -- auto/manual notes TEXT, // 人工备注 FOREIGN KEY (config_id) REFERENCES model_configs(id), CHECK(direction_accuracy IS NULL OR (direction_accuracy 0 AND direction_accuracy 100)), CHECK(mae 0), CHECK(rmse 0), CHECK(mape 0));– 索引快速查询某配置的历史表现CREATE INDEX idx_eval_config_trend ON eval_metrics(config_id, prediction_time DESC);CREATE INDEX idx_eval_symbol_tf ON eval_metrics(symbol, timeframe, prediction_time DESC);表8系统配置/元数据表 (app_settings)用途 存储应用级别的全局配置项避免硬编码。CREATE TABLE IF NOT EXISTS app_settings (setting_key TEXT PRIMARY KEY,setting_value TEXT NOT NULL,setting_type TEXT DEFAULT ‘STRING’, – STRING/INTEGER/FLOAT/BOOLEAN/JSONdescription TEXT, // 参数说明is_readonly BOOLEAN DEFAULT 0, // 是否允许修改created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP);– 预置关键配置INSERT OR IGNORE INTO app_settings VALUES(‘database_version’, ‘2.0’, ‘STRING’, ‘数据库Schema版本号’, 1, datetime(‘now’), datetime(‘now’)),(‘mt4_data_path’, ‘’, ‘STRING’, ‘MT4终端数据目录留空自动检测’, 0, datetime(‘now’), datetime(‘now’)),(‘default_prediction_interval_min’, ‘5’, ‘INTEGER’, ‘自动预测间隔分钟’, 0, datetime(‘now’), datetime(‘now’)),(‘max_historical_days_keep’, ‘365’, ‘INTEGER’, ‘原始数据保留天数超过自动清理’, 0, datetime(‘now’), datetime(‘now’)),(‘enable_auto_cleanup’, ‘1’, ‘BOOLEAN’, ‘是否启用过期数据清理’, 0, datetime(‘now’), datetime(‘now’)),(‘frontend_refresh_interval_sec’, ‘10’, ‘INTEGER’, ‘前端自动刷新间隔秒’, 0, datetime(‘now’), datetime(‘now’)),(‘log_level’, ‘INFO’, ‘STRING’, ‘日志级别: DEBUG/INFO/WARN/ERROR’, 0, datetime(‘now’), datetime(‘now’)),(‘kronos_model_path’, ‘’, ‘STRING’, ‘Kronos模型本地路径空则在线下载’, 0, datetime(‘now’), datetime(‘now’)); 三、视图设计简化复杂查询视图1最新行情快照 (v_latest_quotes)用途 一键查询所有周期的最新一根K线用于仪表板展示。CREATE VIEW IF NOT EXISTS v_latest_quotes ASSELECTrod.symbol,rod.timeframe,tf.display_name as timeframe_display,rod.timestamp as bar_time,rod.open,rod.high,rod.low,rod.close,rod.volume,rod.amount,ROUND((rod.close - rod.open) / rod.open * 100, 3) as change_pct,CASE WHEN rod.close rod.open THEN ‘UP’WHEN rod.close rod.open THEN ‘DOWN’ELSE ‘FLAT’END as direction,rod.is_completeFROM raw_ohlc_data rodJOIN timeframes_def tf ON rod.timeframe tf.codeINNER JOIN (SELECT symbol, timeframe, MAX(timestamp) as max_tsFROM raw_ohlc_dataGROUP BY symbol, timeframe) latest ON rod.symbol latest.symbolAND rod.timeframe latest.timeframeAND rod.timestamp latest.max_tsORDER BY tf.sort_order;查询示例– XAUUSD全周期最新报价SELECT * FROM v_latest_quotes WHERE symbol ‘XAUUSD’;预期输出symboltimeframedisplay_namebar_timeclosechange_pctdirectionXAUUSDM11分钟2026-07-10 00:07:001802.350.052UPXAUUSDM55分钟2026-07-10 00:05:001802.10-0.123DOWNXAUUSDM1515分钟2026-07-10 00:00:001801.800.287UPXAUUSDH11小时2026-07-09 23:00:001800.500.156UPXAUUSDH44小时2026-07-09 20:00:001799.20-0.334DOWNXAUUSDD1日线2026-07-09 00:00:001795.801.245UP视图2待验证预测列表 (v_pending_verification)用途 找出所有已过预测时间但尚未与实际数据对比的预测记录。CREATE VIEW IF NOT EXISTS v_pending_verification ASSELECTp.id,p.symbol,p.timeframe,p.prediction_time,p.target_time,p.step_ahead,p.pred_close,mc.config_name,CASEWHEN p.target_time datetime(‘now’) THEN ‘READY_TO_VERIFY’WHEN p.target_time datetime(‘now’, ‘5 minutes’) THEN ‘SOON’ELSE ‘FUTURE’END as urgency_statusFROM predictions pLEFT JOIN model_configs mc ON p.config_id mc.idWHERE p.is_verified 0ORDER BY p.target_time ASC;用途 Node.js定时器可以查询此视图自动执行验证逻辑。视图3模型性能趋势 (v_model_performance_trend)用途 按周/月聚合统计模型准确率变化趋势。CREATE VIEW IF NOT EXISTS v_model_performance_trend ASSELECTDATE(prediction_time) as date,symbol,timeframe,config_id,COUNT(*) as total_predictions,AVG(CASE WHEN direction_correct1 THEN 1.0 ELSE 0.0 END)*100 as dir_acc_pct,AVG(error_pct) as avg_error_pct,AVG(CASE WHEN step_ahead 8 THEN error_pct END) as short_term_error,AVG(CASE WHEN step_ahead 16 THEN error_pct END) as long_term_errorFROM predictionsWHERE is_verified 1GROUP BY DATE(prediction_time), symbol, timeframe, config_idORDER BY date DESC;前端可用此视图渲染折线图展示模型表现随时间的演变。 四、触发器与自动化触发器1自动填充 actual_* 字段K线收盘时触发CREATE TRIGGER IF NOT EXISTS trg_verify_prediction_after_ohlc_updateAFTER UPDATE OF close ON raw_ohlc_dataFOR EACH ROWWHEN NEW.is_complete 1 AND OLD.is_complete 0 – 只在K线完成时触发BEGINUPDATE predictionsSETactual_open NEW.open,actual_high NEW.high,actual_low NEW.low,actual_close NEW.close,actual_volume NEW.volume,error_open ABS(coalesce(pred_open, 0) - NEW.open),error_high ABS(coalesce(pred_high, 0) - NEW.high),error_low ABS(coalesce(pred_low, 0) - NEW.low),error_close ABS(coalesce(pred_close, 0) - NEW.close),error_pct ABS(coalesce(pred_close, 0) - NEW.close) / NEW.close * 100,direction_correct (coalesce(pred_close, 0) (SELECT close FROM raw_ohlc_dataWHERE symbol NEW.symbolAND timeframe NEW.timeframeAND timestamp (SELECT MAX(timestamp) FROM raw_ohlc_dataWHERE symbol NEW.symbol AND timeframe NEW.timeframeAND timestamp NEW.timestamp))) (NEW.close (SELECT close FROM raw_ohlc_dataWHERE symbol NEW.symbolAND timeframe NEW.timeframeAND timestamp (SELECT MAX(timestamp) FROM raw_ohlc_dataWHERE symbol NEW.symbol AND timeframe NEW.timeframeAND timestamp NEW.timestamp))),is_verified 1,verified_at datetime(‘now’)WHERE symbol NEW.symbolAND timeframe NEW.timeframeAND target_time NEW.timestamp;END;⚠️ 注意此触发器较复杂实际应用中可能需要在Node.js层以事务方式批量处理以提高性能。触发器2自动维护 updated_at 时间戳CREATE TRIGGER IF NOT EXISTS trg_ohlc_updated_atAFTER UPDATE ON raw_ohlc_dataFOR EACH ROWBEGINUPDATE raw_ohlc_data SET updated_at datetime(‘now’) WHERE id NEW.id;END;CREATE TRIGGER IF NOT EXISTS trg_predictions_updated_atAFTER UPDATE ON predictionsFOR EACH ROWBEGINUPDATE predictions SET updated_at datetime(‘now’) WHERE id NEW.id;END; 五、典型查询场景示例场景1前端加载K线图表数据– 加载XAUUSD M5周期最近600根K线SELECTtimestamp,open, high, low, close, volume,amount,is_completeFROM raw_ohlc_dataWHERE symbol ‘XAUUSD’AND timeframe ‘M5’ORDER BY timestamp ASCLIMIT 600;场景2叠加显示最新预测曲线– 获取最近一次预测的全部未来K线用于图表叠加SELECTtarget_time as timestamp,pred_open as open,pred_high as high,pred_low as low,pred_close as close,pred_volume as volume,confidence,step_aheadFROM predictionsWHERE symbol ‘XAUUSD’AND timeframe ‘M5’AND prediction_time (SELECT MAX(prediction_time)FROM predictionsWHERE symbol ‘XAUUSD’ AND timeframe ‘M5’)ORDER BY step_ahead ASC;场景3对比历史预测准确率– 查看过去7天M5周期预测的涨跌方向准确率SELECTprediction_time,COUNT(*) as total_preds,SUM(CASE WHEN direction_correct1 THEN 1 ELSE 0 END) as correct_count,ROUND(AVG(CASE WHEN direction_correct1 THEN 1.0 ELSE 0.0 END)*100, 2) as accuracy_pct,ROUND(AVG(error_pct), 3) as avg_error_pct,ROUND(AVG(error_close), 5) as avg_abs_errorFROM predictionsWHERE symbol ‘XAUUSD’AND timeframe ‘M5’AND is_verified 1AND prediction_time datetime(‘now’, ‘-7 days’)GROUP BY prediction_timeORDER BY prediction_time DESCLIMIT 20;场景4准备Kronos模型输入数据– 提取最近400根M5 K线作为模型输入严格按时间排序SELECTstrftime(‘%Y-%m-%dT%H:%M:%S’, timestamp) as timestamps,open, high, low, close, volume, amountFROM raw_ohlc_dataWHERE symbol ‘XAUUSD’AND timeframe ‘M5’AND is_complete 1 – 只用已完成的K线ORDER BY timestamp DESCLIMIT 400; – 注意需要反转顺序最新的在后面⚠️ 注意Kronos要求输入的时间戳必须升序排列旧的在前而上述SQL返回降序需在应用层反转数组。️ 六、性能优化建议索引策略总结– 必须创建的核心索引已在建表语句中包含CREATE INDEX … ; – 见各表DDL中的注释– 可选的覆盖索引针对高频查询CREATE INDEX idx_ohlc_covering ON raw_ohlc_data(symbol, timeframe, timestamp DESC)INCLUDE (open, high, low, close, volume); – SQLite 3.x支持INCLUDE– 如果数据量极大百万行考虑分区表SQLite不支持但可按月分表– 表命名raw_ohlc_data_2026_07, raw_ohlc_data_2026_06 …2. WAL模式提升并发性能– 在首次连接数据库后立即执行PRAGMA journal_mode WAL; – Write-Ahead Logging模式PRAGMA synchronous NORMAL; – 平衡安全性与性能PRAGMA cache_size -64000; – 64MB缓存默认通常太小PRAGMA temp_store MEMORY; – 临时表放内存PRAGMA mmap_size 268435456; – 256MB内存映射文件3. 定期维护脚本建议每周执行– 重建索引碎片REINDEX;– 更新统计信息帮助查询优化器ANALYZE;– 清理超过365天的原始数据节省空间DELETE FROM raw_ohlc_dataWHERE created_at datetime(‘now’, ‘-365 days’);– 清理已验证且超过90天的旧预测保留近期数据即可DELETE FROM predictionsWHERE is_verified 1AND verified_at datetime(‘now’, ‘-90 days’);– 紧缩数据库文件释放空间VACUUM; 七、迁移与版本控制Schema版本管理在 app_settings 表中记录当前版本UPDATE app_settings SET setting_value ‘2.0’ WHERE setting_key ‘database_version’;升级检查流程应用启动时// Node.js启动时执行async function checkDatabaseSchema(db) {const version db.prepare(“SELECT setting_value FROM app_settings WHERE setting_key‘database_version’”).get();if (!version || parseFloat(version.setting_value) 2.0) { console.log(Detected old schema version, running migrations...); await migrateToV2(db); console.log(Migration completed successfully!); }}✅ 八、实施清单立即执行今天[ ] 在MT4指标初始化时执行所有 CREATE TABLE IF NOT EXISTS 语句[ ] 插入预置的种子数据symbols_info, timeframes_def, model_configs, app_settings[ ] 测试插入/查询/更新操作正常工作[ ] 验证索引生效使用 EXPLAIN QUERY PLAN 分析慢查询近期优化本周[ ] 实现 WAL 模式和 PRAGMA 优化[ ] 编写定时清理脚本cron job / Windows Task Scheduler[ ] 创建视图简化常见查询[ ] 编写单元测试验证数据完整性约束长期规划下个月[ ] 根据实际查询热点调整索引[ ] 考虑读写分离主库多个只读副本[ ] 实现数据导出/备份机制[ ] 添加数据库监控告警异常查询、空间不足等 九、参考资料SQLite官方文档 https://www.sqlite.org/docs.htmlSQL最佳实践 https://use-the-index-luke.com/Kronos模型输入格式要求 见 ARCHITECTURE.md 第2节Lightweight Charts数据格式 待补充前端文档文档版本 v2.0 Final最后更新 2026-07-10 00:07 CST作者 KronosView Architecture Team审核状态 ✅ 待实施验证 下一步行动这个Schema设计已经非常完整且可直接使用。你现在可以选择立即开始编码 - 我帮你把这套DDL转成MQ4和Node.js都能用的初始化脚本继续细化讨论 - 对某些表的设计有疑问想深入了解先创建Mock数据测试 - 用假数据跑通前后端流程再接入真实MT4数据告诉我你的决定