美股指数(纳斯达克100 / 标普500)智能定投建议生成器
NASDAQ/
├── main.py # 统一 CLI 入口(python main.py --quiet)
├── smart_invest.py # 兼容桥接层(旧脚本仍可用)
├── web_config.py # 兼容桥接层(旧 bat/vbs 仍可用)
├── valuation.py # 估值计算模块(暂在根目录,Phase 8 迁移)
├── push_service.py # 兼容桥接层
├── returns.py # 组合收益计算
├── backtest.py # 策略回测
├── config.example.json # 配置模板
├── requirements.txt # Python 依赖
│
├── src/ # 核心模块(依赖方向:底层→上层)
│ ├── config.py # 配置管理(DEFAULT_CONFIG / load / save)
│ ├── data_fetch.py # 数据获取(唯一数据入口,带缓存)
│ ├── scheduler.py # 定投频率调度
│ ├── invest_log.py # 定投记录日志
│ ├── strategy.py # 策略计算(纯函数:均线/偏离度/档位/信号)
│ ├── holdings.py # 持仓盈亏计算
│ ├── envelope.py # 周期预算信封
│ ├── risk.py # 风险信号(止盈/仓位上限)
│ ├── message.py # 消息生成与格式化
│ ├── push_service.py # 推送服务(邮件/PushPlus/企微/钉钉)
│ └── engine.py # 调度引擎(数据→信号→信封→消息→推送)
│
├── web/ # Web 配置看板
│ └── server.py # HTTP 服务器(web_config.py 的实际实现)
│
├── tests/ # 单元测试(不依赖网络)
│ ├── test_config.py # 14个测试
│ ├── test_data_fetch.py # 20个测试
│ ├── test_scheduler.py # 12个测试
│ └── conftest.py # pytest 配置
│
├── templates/ # Web 页面模板
│ └── config.html # 配置看板前端
│
├── docs/ # SDD 文档
│ ├── spec.md # 规格说明
│ ├── constitution.md # 架构约束
│ ├── plan.md # 重构方案
│ └── tasks.md # 任务清单
│
├── 智能定投.bat # 每日运行入口
├── 启动配置网页.bat # Web 看板启动
├── 打开配置页面.vbs # 静默启动 Web(无终端窗口)
├── 每日推送.bat # 定时推送入口
└── 推送测试.bat # 推送测试
│
├── cache/ # 数据缓存(自动生成)
└── .last_invest_date # 上次定投日期记录
└── .invest_log.json # 定投日志
└── .budget_state.json # 周期预算状态
engine → message/risk/envelope/holdings → strategy/invest_log/scheduler → data_fetch → config
↑
valuation(暂在根目录)
- 底层模块不依赖上层(data_fetch 不 import engine)
- strategy 是纯函数模块(无状态、无IO)
- engine 是唯一调度入口
# 生成定投建议(交互模式)
python main.py
# 安静模式(JSON 输出,供自动化读取)
python main.py --quiet
# 推送到微信
python main.py --push
# 保存到文件
python main.py --save
# 启动 Web 配置看板
python web_config.py
# 或双击 "启动配置网页.bat"
# 运行测试
python -m pytest tests/ -v编辑 config.json(首次运行自动生成),或通过 Web 看板修改。
关键参数:
base_amount: 每期基础金额cycle_invest_count: 周期内定投次数strategy_mode:"fixed_table"或"formula"invest_interval: 定投间隔(工作日数)push_enabled: 是否推送
# 安装依赖
pip install -r requirements.txt
# 运行全部测试
pytest tests/ -v
# 单模块测试
pytest tests/test_config.py -v
pytest tests/test_data_fetch.py -v
pytest tests/test_scheduler.py -vMIT