Initial commit: A-share stock analysis project with screening, backtesting, and multi-factor analysis tools

This commit is contained in:
2026-07-01 06:39:40 +00:00
commit d80c208004
19 changed files with 1542 additions and 0 deletions
+128
View File
@@ -0,0 +1,128 @@
# 认知操作系统 — 通用思想与方法论
> 本文档位于文档体系(见 `README.md`)的**顶层**
> 是纯粹的元认知框架,不针对任何特定领域。
> 它回答一个根本问题:**我们如何正确地认识世界、思考问题和有效行动?**
>
> 领域应用:`docs/PRINCIPLES.md`
> 执行约束:`AGENTS.md`
> 完整文档层次:`README.md`
---
## 元层:知识组织法则
所有知识分为三层,但不是单向堆叠,而是循环关系:
```
价值观(应该追求什么)
↑↓ 决定并接受修正
方法论(如何追求)
↑↓ 指导并接受修正
实践经验(做了什么、学到了什么)
```
三层不断循环。实践修正方法论,方法论重塑价值观。**没有反馈循环的知识体系是死的。**
---
## 第一脉:战略链 — 方向 > 目标 > 行动 > 反馈
### 方向:选择大于努力
想做什么比能做什么更重要。一个冲突出现时,选择"小事化了"还是"升级事态"——这个方向选择决定了后续一切目标、行动和最终结果。
方向正确,慢也是快。方向错误,快也是倒退。
### 目标:Why 与 What 的顺序
- **研究事物从 What 开始**:先搞清楚"这是什么",再追问"为什么"。先描述,后解释。
- **做事情从 Why 开始**:先想清楚"为什么要做",再决定"做什么"和"怎么做"。
### 行动:可执行的步骤
方向和目标不落地到每天的具体动作,就是幻觉。每个目标必须有一个对应的、明天就可以做的事。
### 反馈:闭环才是学习
观察行动的后果 → 判断目标是否达成 → 判断方向是否正确 → 修正。没有反馈循环,任何方法论都是纸上谈兵。
---
## 第二脉:思维工具 — 理解世界的武器
### 1. 完备性(思考前的第一道检查)
在分析任何问题之前,先问:我考虑到的因素是不是全的?有没有遗漏的人、关系、变量?
不完备的分析再精致也是错的。最难的往往就是做到完备。
### 2. 时间尺度(每个判断的隐含前提)
任何判断都有一个隐含的有效时间范围。短期有利的可能长期有害,长期有效的可能短期难受。没有标注时间尺度的判断是不完整的。
每当你下一个结论,必须追问:这个结论在什么时间范围内成立?
### 3. 非对称检查(正向成立 ≠ 反向成立)
A 在 B 条件下成立,不意味着 B 在 A 条件下成立。我们天然容易忽略这种不对称性。
每次得出一个结论,反问:反过来成立吗?如果不成立,原因是什么?
### 4. 人是最重要的
梳理任何一件事,把参与人一个不漏地列出来。搞清楚人物之间的关系,每个人的利益诉求。做到这一步,事情的来龙去脉自然清晰,走向也能预测。
表面是数字和逻辑,底层是人和利益。
### 5. 性质-关系法(关系 > 性质)
事物的性质是孤立的标签,关系揭示结构。不要只问"它是什么属性",更要问"它和其他事物是什么关系"。
### 6. 第一性原理
不依靠类比和他人结论。把问题拆到最基本的不可再拆的事实,从那里重新推理。不是不能借鉴前人经验,而是不能不经验证地接受。
### 7. 简洁原则(单一原则 + 奥卡姆剃刀)
每个体系里存在一个主导性的组织原则。找到它,其余都是推导。不必要的复杂度不应引入——复杂应该被数据逼出来,不是主动追求的。
---
## 第三脉:行动法则 — 如何有效做事
### 1. 复习比学习更重要
学新东西的快感容易上瘾。但真正改变行为的不是"第一次知道",而是"反复消化"。读完一篇好文章,花三倍时间反复思考它,比再读三篇新文章更有价值。
### 2. 知行合一
知道而做不到,等于不知道。真正的"知道"是你的行为已经发生了改变。如果知道一个道理后你的行为没有任何变化,那不是知识,是信息。
### 3. 刻意练习
不是重复做已经会的,而是:聚焦弱点 → 接受反馈 → 不断增加难度。每一次练习之后必须回答:我练习了什么?哪里不够好?下次怎么做?
### 4. 逆向求解
与其问"如何成功",先问"保证失败的做法是什么",然后反着做。逆向思维揭示正面思考永远发现不了的路径。
---
## 桥接层:不确定性下的理性
### 1. 可证伪性
一个说法如果无论如何都不能被证明是错的,那它不是知识,是信仰。科学知识的特点是:它告诉你在什么条件下它就不成立了。
### 2. 概率思维
世界是不确定的。用概率而非确定性思考。新证据到来时,更新你的信念,而不是固守旧观念。一次结果说明不了问题,大量重复试验的统计分布才是真相。
### 3. 复利思维
微小的持续改进在时间作用下产生指数级效果。每天进步 1%,一年 37 倍。不需要某一天突然变强。需要的是每天都不倒退。
---
*最后更新:2026-07-01*
+207
View File
@@ -0,0 +1,207 @@
# 中短期A股选股辅助系统 — 项目计划
## 一、项目定位
基于 opencode + Skill/Custom Tool 机制构建的 **A股选股分析辅助工具**。利用 AI 辅助多维度分析,
帮助用户做出更有信息量的选股决策。**不涉及自动交易,仅做分析推荐,人工下单。**
## 二、核心原则
1. **验证优先** — 任何策略上线前必须经过历史回测,不依赖未经数据验证的经验法则
2. **辅助决策,而非替代决策** — 输出结构化分析报告,给出评分和依据,最终决策权归用户
3. **数据驱动** — 所有分析基于可量化的数据指标,避免主观模糊的语言
4. **增量迭代** — 先建回测引擎,再建选股工具,最后补舆情分析
## 三、技术架构
```
┌──────────────────────────────────────────────┐
│ opencode TUI │
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ Skills │ │ Skills │ │ Skills │ │
│ │ Screener │ │ Analyzer │ │ Overview/ │ │
│ │ │ │ │ │ Backtest │ │
│ └────┬─────┘ └────┬─────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌────▼──────────────▼───────────────▼──────┐ │
│ │ Custom Tools (TypeScript) │ │
│ │ stock-data / stock-screen / backtest │ │
│ └──────────────────┬───────────────────────┘ │
└─────────────────────┼─────────────────────────┘
│ Bun.$ `python3 ...`
┌─────────────────────▼─────────────────────────┐
│ Python Scripts │
│ ┌───────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ AKShare │ │ Screener │ │ Backtest │ │
│ │ Data │ │ Engine │ │ Engine │ │
│ └───────────┘ └──────────┘ └──────────────┘ │
└───────────────────────────────────────────────┘
```
### 数据源
| 数据类别 | 来源 | 说明 |
|----------|------|------|
| 日K/周K行情 | AKShare | `stock_zh_a_hist` |
| 实时行情 | AKShare | `stock_zh_a_spot_em` |
| 财务报表 | AKShare | `stock_financial_analysis_indicator` |
| 资金流向 | AKShare | `stock_individual_fund_flow` |
| 龙虎榜 | AKShare | `stock_sina_lhb_detail_daily` |
| 新闻舆情 | AKShare + 自建爬虫 | `stock_news_em` |
| 板块数据 | AKShare | `stock_board_industry_*` |
## 四、分阶段实施计划
### 阶段 0:环境与框架搭建 ✅
- [x] 初始化项目目录结构
- [ ] 安装 Python 环境与依赖
- [x] 编写 AGENTS.md 供 opencode 理解项目
- [x] 搭建 Custom Tool 骨架(TypeScript → Python 桥接)
- [x] 搭建 Skill 文件骨架
- [x] 适配小资金(5万)场景约束
### 阶段 1:回测引擎(高优先级)
**目标:** 任何策略可以输入规则 + 参数,输出回测报告。
- [ ] 实现回测引擎核心 `backtest_engine.py`
- 模拟交易(按收盘价成交)
- 计算收益曲线、胜率、最大回撤、夏普比率
- 支持多策略对比
- [ ] 实现 `stock-backtest` 工具(TypeScript 包装)
- [ ] 实现回测 Skill(指导 LLM 如何设计、运行、解读回测)
- [ ] 用历史数据跑几个经典策略验证引擎正确性
**验证标准:** 能跑出 60日均线上穿120日均线 这个经典策略在沪深300上的回测结果。
### 阶段 2:选股引擎
**目标:** 多因子打分,输出 Top N 推荐列表。
- [ ] 实现选股筛选器 `stock_screener.py`
- 技术因子:趋势强度、均线排列、量价配合、RSI、MACD
- 资金因子:主力净流入(3/5/10日)、北向资金变化
- 基本面因子:PE 分位、ROE、营收/利润增速
- 消息因子:近期新闻数量、机构评级变化(后续补充)
- 加权打分公式
- [ ] 实现 `stock-screen` 工具
- [ ] 实现选股 Skill(工作流:大盘评估 → 多因子筛选 → 排序输出)
### 阶段 3:单股深度分析
**目标:** 对任意股票生成结构化分析报告。
- [ ] 实现个股分析器 `stock_analyzer.py`
- 技术面:趋势定位、均线状态、支撑/阻力位、技术形态识别
- 资金面:近期主力资金行为模式
- 基本面:PE/PB 历史分位、杜邦分析摘要
- 消息面:近30天关键公告、新闻情绪评分
- [ ] 实现 `stock-analyzer` Skill
### 阶段 4:大盘环境评估
**目标:** 每次选股前判断当前是否适合操作。
- [ ] 实现大盘分析 `market_overview.py`
- 主要指数趋势判断
- 市场宽度(上涨/下跌家数比)
- 成交量趋势
- 板块轮动热力图
- 仓位建议(轻仓/中等/重仓)
- [ ] 实现 `market-overview` Skill
### 阶段 5:舆情分析增强
- [ ] 新闻爬取与解析
- [ ] 关键词/情绪评分
- [ ] 机构研报监控
## 五、因子体系设计(初版)
### 多因子打分权重
| 维度 | 权重 | 子因子 |
|------|------|--------|
| 技术面 | 35% | 趋势强度、均线排列、量价配合、RSI位置 |
| 资金面 | 30% | 主力净流入趋势、北向资金、大单占比 |
| 基本面 | 25% | PE分位、ROE、利润增速、营收增速 |
| 消息面 | 10% | 新闻热度、机构评级方向 |
### 每个因子标准化为 0-100 分,加权求和得综合分。
## 六、风险与应对
| 风险 | 应对方案 |
|------|----------|
| AKShare 接口变动 | 封装统一数据层,多数据源 fallback |
| LLM 分析幻觉 | 所有数据由 Python 脚本计算,LLM 仅做解读和呈现 |
| 策略过拟合 | 回测引擎支持样本外检验(滚动窗口) |
| 市场风格切换 | 多因子框架允许动态调整权重 |
## 七、目录结构
```
stock/
├── .opencode/
│ ├── tools/ # Custom Tools (LLM 可调用的函数)
│ │ ├── stock-data.ts # 数据获取工具组
│ │ ├── stock-screen.ts # 选股筛选工具组
│ │ └── stock-backtest.ts # 回测工具组
│ └── skills/ # Agent Skills (工作流指令)
│ ├── stock-screener/ # 选股工作流
│ ├── stock-analyzer/ # 单股分析工作流
│ ├── market-overview/ # 大盘评估工作流
│ └── stock-backtest/ # 回测工作流
├── scripts/ # Python 实现
│ ├── market_data.py # 数据获取 (AKShare)
│ ├── stock_screener.py # 多因子选股引擎
│ ├── stock_analyzer.py # 个股深度分析
│ ├── backtest_engine.py # 回测引擎
│ └── sentiment.py # 舆情分析
├── docs/
│ └── PLAN.md # 本文件
├── requirements.txt
├── AGENTS.md # opencode 项目理解
└── README.md
```
## 八、小资金(5万)场景适配
### 约束条件
| 约束 | 影响 | 设计调整 |
|------|------|----------|
| 每股单价限制 | 股价 >500 元直接买不起1手 | 选股池自动过滤高价股,优先 10-50 元区间 |
| 集中持仓 | 5万只能分散到 2-4 只 | 选股输出 Top 3-5,附带仓位分配建议 |
| 手续费敏感 | 单次交易 ~60 元(0.12%) | 每次推荐附带交易成本估算,避免过度拆分 |
| 心理因素 | 5% = 2500 元,感受强烈 | 所有风控指标同时用百分比和绝对金额展示 |
| 收益预期 | 年化 20% = 10000 元 | 目标定位为学习验证,非财富增长 |
### 仓位分配参考
| 大盘环境 | 总仓位 | 单只最大 | 持有数量 |
|----------|--------|----------|----------|
| 强势(重仓) | 3.5-4万(70-80% | 1-1.5万/只 | 3-4只 |
| 中性(中等) | 1.5-2.5万(30-50% | 0.5-1万/只 | 2-3只 |
| 弱势(轻仓) | <1.5万(<30% | <0.5万/只 | 1-2只 |
### 价格可买性校验
每只推荐股票前校验:`股价 × 100 ≤ 计划仓位`
## 九、里程碑时间线
| 阶段 | 预计可交付 | 里程碑 |
|------|-----------|--------|
| 阶段 0 | ✅ 框架搭建 | 项目骨架可运行,上下文齐全 |
| 阶段 1 | 回测引擎 | 可验证任意策略历史表现 |
| 阶段 2 | 选股引擎 | 每天可生成 Top N 推荐 |
| 阶段 3 | 单股分析 | 可对任意股票出详细分析报告 |
| 阶段 4 | 大盘评估 | 判断市场可操作性 |
| 阶段 5 | 舆情分析 | 消息面因子补充 |
---
*最后更新:2026-07-01*
+138
View File
@@ -0,0 +1,138 @@
# 股票投资原则 — 引导项目走向正确方向的元原则
> 本文档是项目的"宪法"。所有设计决策、策略开发和 Agent 行为都必须对齐这些原则。
> 当直觉与原则冲突时,服从原则。
>
> 本文档是通用认知框架(`docs/FOUNDATIONS.md`)在股票投资领域的具体应用。
> 阅读本文之前,建议先理解 FOUNDATIONS.md 中的元层思维。
---
## 一、关于市场本身的认知
### 原则 1:市场是复杂适应系统,不是物理定律
股票价格由无数参与者的买卖行为决定,参与者在学习、适应、进化。这意味着:
- **任何策略的有效性都是暂时的。** 今天赚钱的策略明天可能失效,不是因为策略错了,而是因为太多人发现了它。
- 我们的目标不是"找到一个永远有效的策略",而是"建立一套能持续发现临时有效策略的方法论"。
- 策略失效时,不抱怨市场,而是回到方法论检查哪里出了问题。
### 原则 2:我们赚的每一分钱都来自别人的错误
超额收益 = 你的判断正确 × 市场定价错误。在 4000+ 只 A 股中,每天有百万级的活跃交易者在买卖。
- 如果你不能清晰说出"为什么市场错了而我对了",就不要交易。
- 推论:买股票前,必须有一句话解释你的信息优势或视角差异。说不出 = 不是机会 = 不买。
---
## 二、关于回测的科学伦理
### 原则 3:回测的黄金法则 — 样本外验证
单次回测 = 讲故事,不是科学。正确的做法是**时间序列交叉验证**:
> 用历史数据的前段(如 2019-2022)优化策略参数,用后段(如 2023-2025)检验。优化和验证永远不能看同一批数据。
- Agent 每次输出回测结果时,必须明确标注哪些时间段是样本内(训练),哪些是样本外(检验)。
- 如果有人(包括你自己)给你看一个回测曲线但没有区分样本内/样本外,那个曲线是垃圾。
### 原则 4:过拟合是最大的敌人
给你 1200 个交易日的历史数据,你可以拟合出任何一条你想要的曲线。
- 参数越多,过拟合风险指数级上升:
- 1 个参数(如单均线) → 几乎不过拟合
- 2-3 个参数(如均线交叉 + 成交量过滤) → 可控
- 5+ 个参数(多因子加权) → 99%在过拟合,必须严格样本外验证
- 推论:永远从最简策略开始。最简版本通过了,才考虑加复杂度。
### 原则 5:你其实没有那么多数据
5 年日线 ≈ 1200 个交易日。但如果一个策略只触发了 15 次交易,你的实际样本量是 15,不是 1200。
- 用 15 个样本得出"胜率 60%"——统计学上毫无意义。
- Agent 输出回测结果时,必须报告**实际交易次数**,交易次数 < 30 的结果标注"样本不足,结论仅供参考"。
---
## 三、关于策略设计
### 原则 6:简单优于复杂(奥卡姆剃刀)
均线金叉策略(1 个规则)和深度学习模型(1000 万参数)相比,前者在实盘中更不容易翻车。
| 策略复杂度 | 过拟合风险 | 实盘翻车概率 | 适合阶段 |
|-----------|-----------|-------------|----------|
| 单规则(均线、突破) | 极低 | 低 | 入门 |
| 2-3 因子组合 | 低 | 中低 | 进阶 |
| 5+ 因子打分 | 高 | 高 | 需严格样本外验证 |
| 机器学习 | 极高 | 极高 | 不适合个人投资者 |
### 原则 7:仓位管理 > 选股 > 择时
学术研究表明,资产配置(投多少钱)解释了约 90% 的收益方差。但散户 90% 的精力花在"明天买哪只"上。
- 5 万本金时,满仓一只还是分三只,这个决策的影响远大于选的是茅台还是五粮液。
- Agent 每次推荐策略或选股时,必须在选股结论之前先给出仓位建议。
- 选股评分不能替代仓位决策。
---
## 四、关于心理与行为
### 原则 8:策略必须适合你自己,而不是理论上最优
5 万本金时:
- 策略要求持有 10 只股票 → 你做不到 → 别选这个策略
- 策略最大回撤 30%(¥15,000)→ 你心理承受上限 10%(¥5,000)→ 你会提前止损,破坏策略
- Agent 展示每个策略时,必须附加一个"用户适配度"维度的评估。
- 每个策略的评估必须包含:单笔最大亏损(RMB)和心理冲击等级。
### 原则 9:区分"运气"和"能力"
| 场景 | 是运气还是能力? |
|------|-----------------|
| 第一次交易赚了 10% | 大概率运气 |
| 前 3 个月都在盈利 | 大概率运气 + 牛市 |
| 持续 2 年跑赢指数 | 可能有能力 |
| 单次交易亏了 20% | 正常,不是能力差 |
| 连续 10 次交易亏损后不失控 | 这才是真正的能力 |
- 不要用前 3 个月的结果评价自己或任何策略。
- 给自己至少 1 年学习期。前 6 个月的目标不是赚钱,是学会不犯致命错误。
---
## 五、关于这个项目的定位
### 原则 10:项目是实验室,不是印钞机
这个系统的核心价值是**加速你的学习循环**:提问 → 假设 → 回测 → 修正 → 再提问。
它不应该成为"每天打开看推荐然后买入"的工具——那会让你跳过思考,变成被动使用者。
- 每当你准备基于项目的输出做一笔交易,你必须能口头解释:
1. 为什么这笔交易会赚钱?
2. 我用什么数据验证过这个判断?
3. 如果亏了,止损在哪?
- 三个答案任何一个说不出来,不交易。
---
## 附录 AAgent 行为约束
以下需要更新到 AGENTS.md 作为 Agent 的强制行为标准(见 AGENTS.md 的 Agent Behavioral Constraints 章节)。
## 附录 B:用户自查清单
每次看项目输出时,问自己三个问题:
1. 我看懂这个推荐背后的逻辑了吗?——看不懂,暂停,不买。
2. 我愿意持有这个判断到止损触发吗?——不愿意,不买。
3. 这笔交易如果全亏了,对我的生活有影响吗?——有影响,不买。
---
*最后更新:2026-07-01*