MY-DOGE QUANT SYSTEM 是一个本地优先(Local-First)的量化投资战略指挥平台。它集成了通达信(TDX)本地数据清洗、宏观战略定调(Macro Beta)、微观动量选股(Micro Alpha)以及基于 LLM 的深度行业分析功能,旨在为个人投资者提供机构级的决策辅助。
MY-DOGE QUANT SYSTEM 是一个本地优先(Local-First)的量化投资战略指挥平台。它集成了通达信(TDX)本地数据清洗、宏观战略定调(Macro Beta)、微观动量选股(Micro Alpha)以及基于 LLM 的深度行业分析功能,旨在为个人投资者提供机构级的决策辅助。
MY-DOGE QUANT SYSTEM 采用三层架构,将数据清洗、策略生成和用户交互分离。所有数据本地存储,不依赖云服务,保护用户隐私并降低延迟。
本系统设计目标:
yfinance 校验股票名称与所属板块,修正 AI 的认知偏差。┌─────────────────────────────────────────────────────────────┐
│ 交互层 (Interface Layer) │
│ [Dashboard] 主控台集成 │
│ ├── 🚀 市场扫描 (Scanner) │
│ ├── 🇨🇳/🇺🇸 档案局 (Data Editor) │
│ ├── 🧠 研报智库 (Insights) │
│ └── 🔎 行业扫描 (Analysis) │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 微观层 (Micro Layer) │
│ [TDXLoader] 通达信解析 → [MarketScanner] 清洗过滤 │
│ [Momentum] 动量计算 → [IndustryAnalyzer] 行业分析 │
│ (特性: 实时联网校准股票元数据) │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 宏观层 (Macro Layer) │
│ [DataLoader] 全球资产数据 (yfinance) │
│ [Strategist] 策略生成 (DeepSeek API) │
│ (特性: RSRS趋势 + VolSkew风控 + 结构化Prompt) │
└─────────────────────────────────────────────────────────────┘
.day 文件 → 清洗过滤 → market_data_*.dbMacro ReportMacro Report (宏观背景) + Momentum CSV (强势股)Industry Report (存入 research_insights.db)src/micro/tdx_loader.py)。00, 30, 60, 68 开头代码,剔除指数/基金。src/macro/strategist.py< 0.8 暗示变盘在即,> 1.5 暗示恐慌释放。src/micro/momentum_scanner.py| 维度 | 当前实现 (Micro Momentum) | 标准 RSRS (Macro Timing) |
|---|---|---|
| 回归对象 | 收盘价 vs 时间 $(Close \sim Time)$ | 最高价 vs 最低价 $(High \sim Low)$ |
| 物理含义 | 价格上涨的平滑度/稳定性 | 支撑位与阻力位的相对强度 |
| 优势 | 能有效识别“稳步推升”的黑马股,过滤大幅波动的妖股 | 能提前预判支撑阻力结构的崩塌(更适合择时) |
| 适用场景 | 个股选股 (Stock Selection) | 大盘择时 (Market Timing) |
models_config.json 的 scanner_filters 节。src/micro/industry_analyzer.pyThreadPoolExecutor 并发请求 yfinance,获取 Top 50 股票的准确名称和行业分类,注入到 Prompt 中。这有效解决了 LLM 对 A 股代码/名称对应的幻觉问题。TITLE: 字段,以语义化标题存入数据库。data/research_insights.dbmacro_reports: 存储宏观策略,包含风险信号和波动率数据。research_reports: 存储行业研报,包含语义化标题和完整分析。initialize_system_dbs() 确保系统首次运行时自动创建所有必要的表结构。系统深度集成 DeepSeek API,支持多种模型配置:
models_config.json)系统通过 models_config.json 文件进行集中配置,支持多模型切换、资产配置和代理设置。
{
"profiles": [
{
"name": "🚀 DeepSeek Chat (Standard)",
"base_url": "https://api.deepseek.com",
"model": "deepseek-chat",
"api_key": "YOUR_API_KEY_HERE"
},
{
"name": "🧠 DeepSeek Reasoner (R1 - Pro)",
"base_url": "https://api.deepseek.com",
"model": "deepseek-reasoner",
"api_key": "YOUR_API_KEY_HERE"
},
{
"name": "🏠 LM Studio (Local)",
"base_url": "http://localhost:1234/v1",
"model": "local-model",
"api_key": "lm-studio"
}
],
"default_profile": "🚀 DeepSeek Chat (Standard)",
"macro_settings": {
"lookback_days": 120, // 中期趋势分析窗口(交易日)
"volatility_window": 20 // 波动率计算窗口
},
"assets": {
"tech": {
"symbol": "QQQ",
"name": "科技股(纳指)"
},
"safe": {
"symbol": "GLD",
"name": "避险黄金"
},
"crypto": {
"symbol": "BTC-USD",
"name": "数字货币"
},
"target": {
"symbol": "000300.SS",
"name": "A股核心(沪深300)"
}
},
"proxy_settings": {
"enabled": false, // 是否启用代理
"url": "http://127.0.0.1:7890" // 代理服务器地址
},
"scanner_filters": {
"us_blacklist": ["SQQQ", "TQQQ", "SOXL", "SOXS", "SPXU", "SPXS", "SDS", "SSO", "UPRO", "QID", "QLD", "TNA", "TZA", "UVXY", "VIXY", "SVXY", "LABU", "LABD", "YANG", "YINN", "FNGU", "FNGD", "WEBL", "WEBS", "KOLD", "BOIL", "TSLY", "NVDY", "AMDY", "MSTY", "CONY", "APLY", "GOOY", "MSFY", "AMZY", "FBY", "OARK", "XOMO", "JPMO", "DISO", "NFLY", "SQY", "PYPY", "AIYY", "YMAX", "YMAG", "ULTY", "SVOL", "TLTW", "HYGW", "LQDW", "BITX"],
"min_volume_cn": 200000000,
"min_volume_us": 20000000,
"max_change_pct": 400,
"rsrs_window": 18
}
}
| 配置组 | 字段 | 说明 | 默认值 |
|---|---|---|---|
profiles |
name |
模型配置名称(显示在GUI中) | - |
base_url |
API 基础地址 | https://api.deepseek.com |
|
model |
模型标识符 | deepseek-chat |
|
api_key |
API 密钥 | 需要用户填写 | |
default_profile |
- | 默认使用的模型配置名称 | 🚀 DeepSeek Chat (Standard) |
macro_settings |
lookback_days |
中期趋势分析天数 | 120 |
volatility_window |
波动率计算窗口 | 20 | |
assets |
tech/safe/crypto/target |
四大资产类别配置 | 见上方 |
proxy_settings |
enabled |
是否启用代理 | false |
url |
代理服务器地址 | http://127.0.0.1:7890 |
|
scanner_filters |
us_blacklist |
美股杠杆/反向ETF黑名单 | 包含SQQQ, TQQQ等 |
min_volume_cn |
A股最低日均成交额阈值(单位:人民币) | 200000000 | |
min_volume_us |
美股最低日均成交额阈值(单位:美元) | 20000000 | |
max_change_pct |
最大涨跌幅过滤(防止虚假暴涨) | 400 | |
rsrs_window |
RSRS计算窗口(交易日数) | 18 |
系统支持通过环境变量动态覆盖配置:
# 临时切换模型(优先级高于配置文件)
export DEEPSEEK_MODEL="deepseek-reasoner"
export DEEPSEEK_API_KEY="your_new_key_here"
GUI界面也提供模型切换功能,切换后会自动更新内存中的配置。
src/macro/strategist.py)sequenceDiagram
participant GUI as 图形界面
participant Config as MacroConfig
participant DataLoader as DataLoader
participant Strategist as DeepSeekStrategist
participant API as DeepSeek API
participant File as 文件系统
GUI->>Config: 加载配置文件
Config->>DataLoader: 初始化数据加载器
DataLoader->>DataLoader: 获取全球资产数据
DataLoader->>DataLoader: 计算量化指标(RSRS, VolSkew)
DataLoader->>Strategist: 传递指标数据
Strategist->>Strategist: 构造结构化Prompt
Strategist->>API: 调用generate_strategy_report()
API-->>Strategist: 返回分析结果
Strategist->>File: 保存报告到macro_report/
Strategist->>GUI: 返回报告内容
数据准备阶段:
yfinance 获取指定资产的历史价格数据Prompt工程:
错误处理:
src/micro/industry_analyzer.py)sequenceDiagram
participant GUI as 图形界面
participant Analyzer as IndustryAnalyzer
participant Cache as 元数据缓存
participant YFinance as yfinance API
participant Strategist as DeepSeekStrategist
participant DB as 数据库
participant File as 文件系统
GUI->>Analyzer: 启动行业分析
Analyzer->>Analyzer: 加载宏观报告上下文
Analyzer->>Analyzer: 读取动量选股CSV
Analyzer->>Cache: 查询股票元数据缓存
alt 缓存命中
Cache-->>Analyzer: 返回缓存的名称/行业
else 缓存未命中
Analyzer->>YFinance: 并发获取Top50股票信息
YFinance-->>Analyzer: 返回实时元数据
Analyzer->>Cache: 更新缓存
end
Analyzer->>Analyzer: 构造行业分析Prompt
Analyzer->>Strategist: 调用DeepSeek API
Strategist-->>Analyzer: 返回行业分析报告
Analyzer->>Analyzer: 提取语义化标题
Analyzer->>File: 保存报告到research_report/
Analyzer->>DB: 归档到research_insights.db
Analyzer->>GUI: 返回报告结果
并发联网校准:
ThreadPoolExecutor 并发获取Top 50股票的实时信息智能缓存系统:
data/meta_cache.json语义化归档:
TITLE: 字段research_insights.db 表结构macro_reports 表 - 存储宏观策略报告| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
id |
INTEGER | 主键,自增 | 1 |
title |
TEXT | 报告标题 | “MY-DOGE PRECISION MACRO REPORT” |
content |
TEXT | 完整报告内容 | Markdown格式报告 |
risk_signal |
TEXT | 风险信号 | “Risk-On” 或 “Risk-Off” |
volatility |
REAL | 波动率 | 0.1725 (17.25%) |
created_at |
TEXT | 创建时间 | “2024-01-06 16:28:23” |
analyst |
TEXT | 分析模型 | “deepseek-chat” |
tags |
TEXT | 标签 | “Macro,DeepSeek” |
research_reports 表 - 存储行业研报| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
id |
INTEGER | 主键,自增 | 1 |
title |
TEXT | 语义化标题 | “新能源产业链景气度上行分析” |
content |
TEXT | 完整报告内容 | Markdown格式报告 |
market_type |
TEXT | 市场类型 | “CN” 或 “US” |
created_at |
TEXT | 创建时间 | “2024-01-06 16:30:45” |
analyst |
TEXT | 分析模型 | “deepseek-chat” |
tags |
TEXT | 标签 | “Industry,DeepSeek,新能源” |
系统首次运行时自动创建数据库和表结构:
# src/micro/database.py 中的初始化函数
def initialize_system_dbs():
"""初始化系统数据库"""
conn = sqlite3.connect('data/research_insights.db')
cursor = conn.cursor()
# 创建宏观报告表
cursor.execute('''
CREATE TABLE IF NOT EXISTS macro_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL,
risk_signal TEXT,
volatility REAL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
analyst TEXT,
tags TEXT
)
''')
# 创建行业研报表
cursor.execute('''
CREATE TABLE IF NOT EXISTS research_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL,
market_type TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
analyst TEXT,
tags TEXT
)
''')
conn.commit()
conn.close()
| 错误类型 | 处理策略 | 用户反馈 |
|---|---|---|
| 网络超时 | 自动重试3次,每次间隔2秒 | “网络连接不稳定,正在重试…” |
| API密钥无效 | 立即停止,记录错误日志 | “API密钥无效,请检查配置” |
| 模型不可用 | 切换到默认模型配置 | “请求的模型不可用,已切换至默认模型” |
| 速率限制 | 指数退避重试,限制并发 | “API调用频繁,等待后重试” |
.day 文件格式和完整性src/macro/data_loader.py:def calculate_advanced_metrics(self, df):
"""计算高级量化指标"""
# 现有指标计算...
rsrs = self.calculate_rsrs(df)
vol_skew = self.calculate_vol_skew(df)
# 添加新指标,例如:动量偏离度
momentum_deviation = self.calculate_momentum_deviation(df)
# 将新指标添加到返回字典
metrics = {
'tech_rsrs': rsrs,
'vol_skew': vol_skew,
'momentum_deviation': momentum_deviation, # 新增
# ... 其他指标
}
return metrics
src/macro/strategist.py):
generate_strategy_report 方法中添加新指标的数据展示修改提示词模板 (src/micro/industry_analyzer.py):
run_analysis 方法中的Prompt结构扩展元数据获取:
添加新功能页签:
src/interface/dashboard.py 中添加新的QWidget自定义主题:
QSS)数据缓存优化:
并发处理:
内存管理:
如果处于需要代理的网络环境:
models_config.json:{
"proxy_settings": {
"enabled": true,
"url": "http://your-proxy-server:port"
}
}
# 临时设置代理
set HTTP_PROXY=http://your-proxy-server:port
set HTTPS_PROXY=http://your-proxy-server:port
建议定期备份以下目录:
data/ - 核心数据库和缓存文件macro_report/ - 历史宏观报告research_report/ - 历史行业研报micro_report/ - 动量选股结果| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| GUI启动失败 | PyQt6未正确安装 | pip install PyQt6 |
| 通达信数据无法读取 | 文件路径错误或权限不足 | 检查路径是否正确,确保有读取权限 |
| API调用返回空内容 | API密钥无效或网络问题 | 检查API密钥,测试网络连接 |
| 行业分析卡顿 | yfinance请求频繁被限 | 增加请求间隔,使用缓存数据 |
| 数据库写入失败 | 磁盘空间不足或权限问题 | 检查磁盘空间,确保有写入权限 |
| 内存占用过高 | 处理过大历史数据集 | 减少分析时间范围,分批处理数据 |
系统日志保存在以下位置:
如需更详细的调试信息,可修改相关模块的日志级别:
import logging
logging.getLogger().setLevel(logging.DEBUG)
我们欢迎社区贡献!请遵循以下流程:
feat/add-new-indicator使用约定式提交:
feat: 新功能fix: bug修复docs: 文档更新style: 代码格式调整refactor: 代码重构test: 测试相关chore: 构建过程或辅助工具变动pip install -r requirements.txt
复制模板并填入 API Key:
cp models_config.template.json models_config.json
# 编辑 models_config.json 填入你的 DeepSeek API Key
python src/interface/dashboard.py
D:/New_TDX),执行 A 股/美股扫描。src/interface: PyQt6 界面逻辑src/macro: 宏观策略、API 交互、全球数据加载src/micro: 通达信解析、动量计算、行业分析、数据库管理src/macro/data_loader.py 中的 calculate_advanced_metrics。src/macro/strategist.py 或 src/micro/industry_analyzer.py。Apache License 2.0