基于 Python + Futu OpenAPI 的轻量级量化研究演示项目。定位为面试 Demo,聚焦自动化量化 workflow 展示,非生产级交易系统。
| 模块 | 技术 |
|---|---|
| 主语言 | Python 3.11+ |
| Web 界面 | Streamlit |
| 数据处理 | Pandas |
| 行情数据源 | Futu OpenAPI(富途 OpenD) |
| 策略回测 | Backtrader |
| 数据存储 | SQLite |
| 定时任务 | APScheduler |
| 图表 | Plotly |
| 通知推送 | Telegram Bot |
| 日志 | Loguru |
| AI 辅助 | OpenAI 兼容 API(DeepSeek 等) |
- 行情获取 — K 线、实时报价、成交量
- 股票筛选 — MA 金叉、RSI 超卖 / 超买、成交量放大
- 策略回测 — MA 双均线、RSI 策略;输出收益率、Sharpe 比率、最大回撤
- 自动提醒 — 策略触发时发送 Telegram 通知
- AI 日报 — 自动生成市场总结与策略表现报告
- 暗黑模式 — 自适应 Streamlit 主题(Light / Dark)
pip install -r requirements.txt项目根目录下已包含 .env 模板,按需填入外部服务配置:
# Futu OpenD(设为 true 启用真实行情,需 OpenD 已运行且已登录认证)
FUTU_ENABLED=false
FUTU_HOST=127.0.0.1
FUTU_PORT=11111
# Telegram 通知(可选,未填则降级为日志输出)
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
# AI 日报(可选,未填则使用模板化降级报告)
OPENAI_API_KEY=
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
# 定时任务间隔(分钟)
SCHEDULE_INTERVAL_MINUTES=30streamlit run streamlit_app/dashboard.py或:
python run.py浏览器访问 http://localhost:8501 即可看到 Dashboard。
所有外部服务(Futu OpenD / Telegram / AI API)未配置时均可正常启动,项目内置降级策略:
| 服务 | 降级方案 |
|---|---|
| Futu OpenD | 内置 5 只样本股票(腾讯、阿里、港交所、苹果、特斯拉)的 90 天模拟 K 线数据 |
| Telegram | Dry-run 模式,信号输出到 Loguru 日志 |
| AI 日报 | 基于技术指标自动生成的模板化报告 |
Streamlit 五个页面均可在 mock 数据下完整展示。
- 访问 Futu OpenAPI 下载页 下载
FutuOpenDWindows 客户端 - 使用富途牛牛账号登录 FutuOpenD
- 启动后默认监听
127.0.0.1:11111 - 将
.env中FUTU_ENABLED设为true,确认FUTU_HOST和FUTU_PORT一致
若连接后提示"需要图形验证码",请在 FutuOpenD 客户端界面完成图形验证码认证。
- 在 Telegram 搜索
@BotFather,发送/newbot创建机器人,获取 Bot Token - 向你的 Bot 发送任意消息,通过
https://api.telegram.org/bot<TOKEN>/getUpdates获取 Chat ID - 填入
.env中的TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID
支持任意 OpenAI 兼容协议的 API 服务:
- DeepSeek:注册 platform.deepseek.com,获取 API Key
- OpenAI:填入标准 OpenAI API Key 及 Base URL
- 本地模型:通过 vLLM / Ollama 等部署后,将
OPENAI_BASE_URL指向本地地址
quantflow/
├── app/
│ ├── main.py # 统一应用入口(编程方式调用)
│ ├── config/
│ │ └── settings.py # 配置中心,加载 .env
│ ├── services/
│ │ ├── futu_service.py # Futu API 封装 + Mock 降级
│ │ ├── screener_service.py # 股票筛选(MA / RSI / 成交量)
│ │ ├── backtest_service.py # Backtrader 回测引擎
│ │ ├── ai_report_service.py # AI 日报生成 + 模板降级
│ │ ├── telegram_service.py # Telegram 通知 + Dry-run
│ │ └── scheduler_service.py # 定时任务调度
│ ├── strategies/
│ │ ├── ma_strategy.py # MA 双均线策略
│ │ └── rsi_strategy.py # RSI 超买超卖策略
│ ├── data/
│ │ ├── market_data.db # SQLite 数据库
│ │ └── quantflow.log # 日志文件
│ ├── utils/
│ │ ├── indicators.py # 技术指标(MA / RSI / 量均线)
│ │ ├── logger.py # Loguru 日志配置
│ │ └── helpers.py # 格式化工具函数
│ └── prompts/
│ └── daily_report_prompt.txt # AI 日报 Prompt 模板
├── streamlit_app/
│ ├── dashboard.py # 导航主页(5 个页面)
│ └── pages/
│ ├── market_overview.py # K 线图 + 实时行情
│ ├── stock_screener.py # 股票筛选器
│ ├── strategy_backtest.py # 策略回测与对比
│ ├── signal_monitor.py # 交易信号监控
│ └── ai_daily_report.py # AI 日报生成页
├── requirements.txt
├── .env
├── .gitignore
├── run.py
└── README.md
- 单体架构,不做微服务拆分
- 优先可运行,每个模块开发完成后即可独立验证
- 数据优先于 UI,强调策略结果与数据展示,不做复杂前端设计
- 严格 Demo 体量,禁止深度学习预测、高频交易、用户系统等生产级特性