[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1631":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":15,"starSnapshotCount":15,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},1631,"stock-analysis","balabala-sean\u002Fstock-analysis","balabala-sean","面相A股市场的量化交易的脚手架工具（轻量级），涵盖历史\u002F实时数据查询、策略信号、触达等功能，可以自由进行因子开发\u002F交易模块的扩展，适合快速上手量化开发。","",null,"Python",184,17,16,0,1,3.77,"MIT License",false,"main",true,[23,24,25,26,5],"a-shares","china-stock","quant","stock","2026-06-12 02:00:30","# Stock Analysis\n\n量化交易的分析和预警工具，使用了均值回归策略用于识别股票买入时机，支持股池批量分析和邮件通知功能。\n\n提供了以下的功能：\n\n- K线数据：实时\u002F历史的数据拉取，可以区分1m\u002F15m\u002F30m\u002F小时\u002F日线\u002F周线\u002F月线等不同周期\n\n- 买点策略 : 基于均值回归策略的实现（包含了多因子的组合，也可以自行扩展）\n\n- 可视化 : 基于实时数据生成分析图表（含自定义的因子计算结果）\n\n- 后台静默运行，实时email进行信号的触达\n\n- 轻量：项目大概1500行代码，5分钟即可快速上手量化开发（高\u002F中\u002F低频，可以根据配置文件的k线的时间周期进行调整，未提供券商柜台的交易\u002F仓位管理，可以自行扩展）\n\n---\n\n## 概念解释\n\n> **详细的概念解释请参考：** [docs\u002FGLOSSARY.md](docs\u002FGLOSSARY.md)，包含了本项目中的数据源，策略，指标，因子，择股\u002F择时的业务领域概念解释（如果之前未接触过量化交易领域，建议先阅读）\n\n---\n\n\n## 安装依赖（macOS）\n\n(如果没安装uv)，先安装uv:\n```bash\nbrew install uv\n\n#验证安装成功\nuv --version\n```\n\n(如果已安装uv)，可跳过上一步，克隆项目后，进入到项目目录下\n```bash\n# 在项目目录下执行\nuv sync\n\n# 激活 venv 的 Python 环境\nsource .venv\u002Fbin\u002Factivate\n```\n\n---\n\n\n## 配置文件\n\n### 创建配置文件\n\n首次使用前，需要从示例文件创建配置文件，copy后无需修改即可运行：(docs目录下提供了2套配置文件，一套是最少版，一套是完整版)\n\n```bash\ncp docs\u002Fconfig.json.minimal config.json\n```\n> **config.json的详细配置说明请参考：** [docs\u002FCONFIG.md](docs\u002FCONFIG.md)\n\n---\n\n## 使用方法\n\n### 1. 使用示例脚本\n\n#### 单只股票分析\n\n```bash\nuv run python -m examples.single_stock_analysis\n```\n运行后会看到输出：\n```text\n最新状态:\n  开盘价: 30.01\n  最低价: 29.70\n  最高价: 30.02\n  当前最新价（收盘价）: 29.70\n  策略计算（UP_LINE）: 76.24\n  策略计算（DOWN_LINE）: 75.38\n  策略计算（MONEY_COND）: False\n  策略计算（BUY_POINT）: False\n  🚀 实时计算结果（FILTER_BUY）-买入信号: False\n计算完成！\n```\n- ` 🚀 实时计算结果（FILTER_BUY）-买入信号: False`，代表当前时间的实时买点信号计算结果，**true则代表命中买点，false代表未命中（该信号策略配合主观择股，已进行了实盘验证，胜率可以跑到80%以上，如果要优化可以从2个角度出发：（1）扩展自己的因子，（2）特别重视股池的选择）**\n- 在`output\u002Fcharts`目录下会生成实时分析的图片，图片中标注了买点信号，是**绿色图标**的五角星（buy signal）\n- 单只个股分析，如果config.json中的stock_pool是多个元素，会默认读取config.json的stock_pool第一个元素进行分析，如果要使用批量功能，请使用下文的**股池批量分析**\n\n#### 股池批量分析\n\n```bash\nuv run python -m examples.pool_analysis\n```\n\n从 `config.json` 读取股池配置进行批量分析。\n\n#### 信号输出类型（⚠️⚠️️重要⚠️⚠️️）\n\n批量分析完成后，会输出两种类型的信号：\n\n| 信号类型       | 说明                              |\n|------------|---------------------------------|\n| **买点扫描信号** | 当前触发买入信号，满足策略条件，建议进行复核后，再进行买入配置 |\n| **低位扫描信号** | 价格处于低位区间，未来短时间内可能产生买点信号，建议提前关注  |\n\n### 2. 命令行运行（后台持续计算）\n\n```bash\n# 运行股池分析（从 config.json 读取配置，推荐参考docs\u002Fconfig.json.full进行完整配置）\nuv run python src\u002Fmain.py\n```\n\n**后台运行示例：**\n\n```bash\n# 后台运行（每小时执行一次，需在 config.json 中设置 app_main.interval_seconds=3600）\nnohup uv run python src\u002Fmain.py > output\u002Flogs\u002Fanalysis.log 2>&1 &\n\n# 查看运行日志\ntail -f output\u002Flogs\u002Fanalysis.log\n\n# 停止后台运行\n# 找到进程 ID\nps aux | grep main.py\n# 终止进程\nkill \u003CPID>\n```\n\n程序会自动：\n1. 从 `config.json` 读取股池配置\n2. 遍历分析每只股票（使用各自的 `frequency` 和 `offset`）\n3. 根据 `chart.enabled` 决定是否生成图表，实盘建议关闭生成图（设置为false），会占用较多的磁盘空间，运行时耗时也较大\n4. 如果 `email.enabled=true` 且触发买点，发送邮件通知，**如果希望当天的email通知要对信号过滤去重，可以自行加cache进行去重和拦截**\n5. 如果 `app_main.interval_seconds>10`，等待指定秒数后重复执行\n\n\n**注意事项：**\n- mootdx API 最大返回 800 条数据，日期范围过大时会报错\n- 建议日线范围不超过 3 年，分钟线范围不超过几天\n- 支持三种日期格式：字符串 `'YYYY-MM-DD'`、`datetime` 对象、`date` 对象\n\n### 4. 运行测试\n\n```bash\nuv run pytest tests\u002F -v\n```\n\n---\n\n## 项目结构\n\n```\nstock-analysis\u002F\n├── src\u002F                         # 核心功能包\n│   ├── conf\u002F                    # 配置管理包\n│   │   ├── __init__.py\n│   │   └── config.py            # 配置读取器\n│   ├── data_kline\u002F             # K线数据拉取包\n│   │   ├── __init__.py\n│   │   └── fetcher.py          # DataFetcher 类\n│   ├── strategy\u002F               # 策略包\n│   │   ├── __init__.py\n│   │   ├── base.py             # 抽象基类定义\n│   │   ├── vba\u002F                # VBA 辅助函数\n│   │   │   ├── __init__.py\n│   │   │   └── vba_func.py     # SMA\u002FEMA 函数\n│   │   ├── indicator\u002F          # 指标计算器\n│   │   │   ├── __init__.py\n│   │   │   ├── slow_trend_line.py  # 慢速趋势线计算\n│   │   │   └── price_mean.py       # 价格均值回归指标\n│   │   └── buy\u002F                # 信号计算器\n│   │       ├── __init__.py\n│   │       └── signal_calculator.py  # 买入信号计算\n│   ├── notify\u002F                 # 邮件通知包\n│   │   ├── __init__.py\n│   │   └── email_notifier.py   # EmailNotifier 类\n│   ├── visualization\u002F          # 可视化包\n│   │   ├── __init__.py\n│   │   └── plotter.py          # Plotter 类\n│   └── main.py                 # 主程序入口\n├── examples\u002F                    # 使用示例\n│   ├── single_stock_analysis.py  # 单只股票分析\n│   └── pool_analysis.py          # 股池批量分析\n├── tests\u002F                       # 单元测试\n│   ├── test_data_kline.py\n│   ├── test_strategy.py\n│   └── test_visualization.py\n├── docs\u002F                        # 文档目录\n│   ├── CONFIG.md                # 配置文件详细说明\n│   ├── config.json.minimal      # 最小配置示例\n│   └── config.json.full         # 完整配置示例\n├── output\u002F                      # 输出目录\n│   ├── charts\u002F                  # 图表保存位置\n│   └── logs\u002F                    # 后台运行日志\n└── config.json                  # 实际配置文件（需用户创建）\n```\n\n---\n\n## 模块关系图\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        main.py                              │\n│                     (程序入口)                              │\n└─────────────────────────────────────────────────────────────┘\n                              │\n        ┌─────────────────────┼─────────────────────┐\n        │                     │                     │\n        ▼                     ▼                     ▼\n┌─────────────┐     ┌─────────────────┐     ┌─────────────┐\n│    conf     │     │   data_kline    │     │  strategy   │\n│  (配置管理) │     │   (K线数据)     │     │  (策略计算) │\n└─────────────┘     └─────────────────┘     └─────────────┘\n        │                     │                     │\n        ▼                     ▼                     ▼\n┌─────────────┐     ┌─────────────────┐     ┌─────────────┐\n│   Config    │     │  DataFetcher    │     │BuySignal-   │\n│ - get()     │     │ - get_bars()    │     │Calculator   │\n│ - reload()  │     │ - get_index_    │     │ - calculate │\n│             │     │   _bars()       │     │   _signals()│\n└─────────────┘     └─────────────────┘     └─────────────┘\n        │                     │                     │\n        │                     ▼                     │\n        │             ┌─────────────┐               │\n        │             │ mootdx API  │               │\n        │             │(通达信数据源)│               │\n        │             └─────────────┘               │\n        │                                           │\n        └──────────────────┬────────────────────────┘\n                           │\n              ┌────────────┼────────────┐\n              │            │            │\n              ▼            ▼            ▼\n      ┌─────────────┐ ┌───────────┐ ┌─────────────┐\n      │visualization│ │  notify   │ │ config.json │\n      │  (可视化)    │ │(邮件通知)  │ │  (配置文件)   │\n      └─────────────┘ └───────────┘ └─────────────┘\n              │            │\n              ▼            ▼\n      ┌─────────────┐ ┌───────────┐\n      │   Plotter   │ │EmailNotifier│\n      │ - plot_buy_ │ │ - send_buy_ │\n      │   signals() │ │   signal()  │\n      └─────────────┘ └───────────┘\n```\n\n---\n\n## 数据流程\n\n```\n程序启动 (main.py)\n       │\n       ▼\n从 config.json 读取配置\n       │\n       ├─► stock_pool (股池列表)\n       ├─► email.enabled (邮件开关)\n       ├─► chart.enabled (图表开关)\n       ├─► app_main.interval_seconds (运行间隔)\n       │\n       ▼\nrun_pool() 遍历股池\n       │\n       └─► 对每只股票执行 run_single()\n              │\n              ▼\n       DataFetcher.get_bars() ──────► 获取 K 线数据 (OHLCV)\n              │\n              ▼\n       BuySignalCalculator.calculate_signals()\n              │\n              ├─► SlowTrendLineIndicator  ──► UP_LINE, DOWN_LINE\n              ├─► PriceMeanIndicator      ──► MONEY_COMING, MONEY_LIVING\n              │\n              ▼\n       合成信号：\n         1. MONEY_COND (资金条件：10日内触发≥5次)\n         2. UP_LINE_COND (慢速趋势金叉且≤25)\n         3. BUY_POINT (两者同时满足)\n         4. FILTER_BUY (间隔≥5周期)\n              │\n              ▼\n       Plotter.print_signal_summary()  ──► 打印信号统计\n              │\n              ▼\n       【如果 chart.enabled=true】\n              │\n              └─► Plotter.plot_buy_signals() ──► 绘制 K 线图 + 买入标记\n                     │\n                     └─► 保存到 output\u002Fcharts\u002F\n              │\n              ▼\n       【如果 email.enabled=true 且 FILTER_BUY=True】\n              │\n              └─► EmailNotifier.send_buy_signal() ──► 发送邮件通知\n              │\n              ▼\n       【股池模式】输出汇总报告\n              │\n              ▼\n       【如果 interval_seconds > 10】\n              │\n              └─► 等待指定秒数后重复执行\n```\n\n---\n\n## 策略包结构说明\n\n策略包 (`src\u002Fstrategy\u002F`) 采用分层架构设计：\n\n### 抽象基类 (`base.py`)\n\n| 基类 | 抽象方法 | 说明 |\n|------|----------|------|\n| `BaseIndicator` | `calculate(df, **kwargs)` | 指标计算器基类 |\n| `BaseSignalCalculator` | `calculate_signals(df)` | 信号计算器基类 |\n| | `get_signals(df)` | 获取最新信号状态 |\n| | `is_signal_triggered(df)` | 判断信号是否触发 |\n\n### 目录结构\n\n```\nstrategy\u002F\n├── base.py              # 抽象基类定义\n├── vba\u002F                 # VBA 辅助函数\n│   └── vba_func.py      # sma_without_zero_reset(), ema()\n├── indicator\u002F           # 指标计算器（继承 BaseIndicator）\n│   ├── slow_trend_line.py  # SlowTrendLineIndicator\n│   └── price_mean.py       # PriceMeanIndicator\n└── buy\u002F                 # 信号计算器（继承 BaseSignalCalculator）\n    └── signal_calculator.py  # BuySignalCalculator\n```\n\n### 扩展指南\n\n**添加自定义的指标因子：**\n\n```python\nfrom src.strategy import BaseIndicator\nfrom pandas import DataFrame\n\nclass MyCustomIndicator(BaseIndicator):\n    def calculate(self, df: DataFrame, **kwargs) -> DataFrame:\n        # 实现指标因子计算逻辑\n        df['MY_INDICATOR'] = ...\n        return df\n```\n\n**添加新信号计算器：**\n\n```python\nfrom src.strategy import BaseSignalCalculator\nfrom pandas import DataFrame\n\nclass MyCustomSignalCalculator(BaseSignalCalculator):\n    def calculate_signals(self, df: DataFrame) -> DataFrame:\n        # 实现信号计算逻辑\n        ...\n\n    def get_signals(self, df: DataFrame) -> dict:\n        ...\n\n    def is_signal_triggered(self, df: DataFrame) -> tuple:\n        ...\n```\n\n---\n\n## 注意事项\n\n1. **速率限制**：通达信服务器有请求频率限制，所有 API 调用已内置 `time.sleep(0.5)` 延迟，避免被断开连接\n2. **股票代码格式**：不需要加 `sh\u002Fsz` 前缀，mootdx 会自动处理（6 开头=上海，0\u002F3 开头=深圳）\n3. **投资风险**：本工具仅供学习研究，不构成投资建议\n4. **配置安全**：config.json 包含敏感信息，请勿提交到 Git 仓库（已在 .gitignore 中排除）\n\n---\n\n## 依赖说明\n\n| 库 | 用途 |\n|----|------|\n| mootdx | 通达信数据接口封装 |\n| pandas | 数据处理与分析 |\n| numpy | 数值计算 |\n| mplfinance | K 线图可视化 |\n\n邮件通知和配置管理使用 Python 标准库，无需额外依赖。\n\n---\n\n## 许可证\n\nMIT License\n","该项目是一个面向A股市场的轻量级量化交易脚手架工具，旨在帮助开发者快速上手量化开发。它提供了历史与实时数据查询、基于均值回归策略的买点信号识别、可视化分析图表生成等功能，并支持通过邮件触达交易信号。用户可以自由扩展因子和交易模块以适应不同的投资策略需求。特别适合那些希望在较短时间内搭建起自己的量化交易平台或进行股票市场研究分析的个人投资者及小型团队使用。项目采用Python语言编写，代码量少且易于理解，具有良好的可扩展性。",2,"2026-06-11 02:45:06","CREATED_QUERY"]