Obsidian 知识库方案
结论:建议采用“Obsidian 文件库 + 统一 YAML 元数据 + 股票代码分目录 + SQLite 全文索引”的方式。
核心原则是:
- Markdown 是唯一原始分析记录,长期保存。
- HTML 是 Markdown 的展示版本,可以随时重新生成。
- 股票代码是唯一主键,股票名称只用于阅读和搜索。
- 所有文件必须带结构化元数据,不能只依赖文件名。
- 少量记录直接用 Obsidian 搜索;积累到几千、几万篇后用 SQLite 查询。
一、推荐目录结构
text
stock-research/
├── 股票档案/
│ ├── SH600519-贵州茅台.md
│ ├── SZ000858-五粮液.md
│ ├── HK00700-腾讯控股.md
│ └── NASDAQ-AAPL-苹果.md
│
├── 分析记录/
│ ├── SH600519/
│ │ ├── 2026/
│ │ │ ├── 2026-09-04_SH600519_贵州茅台_日常跟踪.md
│ │ │ ├── 2026-09-15_SH600519_贵州茅台_中报复盘.md
│ │ │ └── 2026-10-01_SH600519_贵州茅台_估值分析.md
│ │ └── 2027/
│ ├── SZ000858/
│ ├── HK00700/
│ └── NASDAQ-AAPL/
│
├── HTML报告/
│ ├── SH600519/
│ │ └── 2026/
│ │ └── 2026-09-04_SH600519_贵州茅台_日常跟踪.html
│ └── ...
│
├── 行业研究/
│ ├── 白酒/
│ ├── 银行/
│ └── 人工智能/
│
├── 组合复盘/
│ ├── 2026/
│ └── 2027/
│
├── 数据/
│ ├── stocks.csv
│ └── research-index.sqlite
│
└── 模板/
└── 股票分析模板.md不要按日期作为最外层目录。因为你的主要查询场景是“查某只股票的全部历史分析”,所以应该先按股票代码分组,再按年份分组。
二、统一股票代码格式
建议建立自己的标准代码:
text
A股上海:SH600519
A股深圳:SZ000858
港股:HK00700
美股:NASDAQ-AAPL以代码作为唯一标识,不要只用股票名称。原因是:
- 股票名称可能变更。
- 不同市场可能存在同名公司。
- ST、退市、借壳会导致简称变化。
- 股票代码更适合程序化查询。
可以在 stocks.csv 中维护股票基础信息:
csv
stock_id,code,name,market,industry,aliases
SH600519,600519,贵州茅台,上海证券交易所,白酒,茅台
SZ000858,000858,五粮液,深圳证券交易所,白酒,
HK00700,00700,腾讯控股,香港交易所,互联网,腾讯
NASDAQ-AAPL,AAPL,Apple,NASDAQ,消费电子,苹果三、文件命名规则
统一使用:
text
日期_标准代码_股票名称_分析类型.md例如:
text
2026-09-04_SH600519_贵州茅台_日常跟踪.md
2026-09-15_SH600519_贵州茅台_财报复盘.md
2026-10-01_SH600519_贵州茅台_估值分析.md如果一天可能分析多次,可以加入时间:
text
2026-09-04_0930_SH600519_贵州茅台_盘前分析.md
2026-09-04_1530_SH600519_贵州茅台_收盘复盘.md不要使用:
text
茅台分析.md
今天复盘.md
9月股票分析.md这种文件名以后很难批量定位、排序和建立索引。
四、每个 Markdown 必须包含 YAML 元数据
这是整个方案最重要的部分。
推荐模板:
markdown
---
id: SH600519-20260904-1530-close-review
stock_id: SH600519
code: "600519"
name: 贵州茅台
market: A股
exchange: 上交所
industry: 白酒
analysis_date: 2026-09-04
analysis_time: "15:30"
analysis_type: 收盘复盘
period: 日线
price: 0
rating: 观察
position_status: 未持仓
confidence: 中
keywords:
- 白酒
- 高端消费
- 业绩跟踪
tags:
- 股票分析
- SH600519
- 贵州茅台
html_file: ../../HTML报告/SH600519/2026/2026-09-04_SH600519_贵州茅台_收盘复盘.html
---
# 贵州茅台分析记录
## 一、当日结论
一句话写清楚当前判断。
## 二、现状与数据
- 当前价格:
- 成交量:
- 估值:
- 关键财务数据:
- 重要事件:
## 三、核心判断
### 看多逻辑
1.
2.
### 风险逻辑
1.
2.
## 四、与上次判断对比
上次分析:[[2026-08-20_SH600519_贵州茅台_日常跟踪]]
- 上次判断:
- 本次变化:
- 判断被验证的部分:
- 判断错误的部分:
## 五、关键观察条件
- 上涨验证条件:
- 下跌风险条件:
- 需要继续跟踪的数据:
- 下次复盘时间:
## 六、操作计划
- 当前动作:
- 买入条件:
- 卖出条件:
- 止损条件:
- 仓位上限:
## 七、事后复盘
> 在后续日期补充,避免只记录预测、不检验结果。
- 实际走势:
- 原判断是否正确:
- 错误原因:
- 可复用经验:其中最关键的字段是:
yaml
stock_id
code
name
analysis_date
analysis_type
rating
tags这些字段以后可以直接建立数据库索引。
五、为每只股票建立“股票档案页”
例如:
text
股票档案/SH600519-贵州茅台.md内容可以是:
markdown
---
stock_id: SH600519
code: "600519"
name: 贵州茅台
market: A股
exchange: 上交所
industry: 白酒
aliases:
- 茅台
---
# 贵州茅台 SH600519
## 公司定位
高端白酒龙头。
## 长期投资逻辑
1.
2.
3.
## 核心风险
1.
2.
3.
## 估值锚点
- 乐观:
- 中性:
- 悲观:
## 最新判断
- 当前评级:
- 当前仓位:
- 最新分析:
## 历史分析
通过 Obsidian Dataview 或自动脚本生成。如果安装 Obsidian 的 Dataview 插件,可以在档案页自动列出该股票全部记录:
dataview
TABLE
analysis_date AS "日期",
analysis_type AS "类型",
rating AS "评级",
price AS "价格",
confidence AS "置信度"
FROM "分析记录"
WHERE stock_id = "SH600519"
SORT analysis_date DESC这样打开“贵州茅台档案页”,就能看到它的全部历史分析,而且新文件会自动加入,不需要手工维护目录。
六、具体查询方式
- 按股票代码查全部记录
在 Obsidian 中搜索:
text
stock_id: SH600519或者直接搜索:
text
SH600519- 按股票名称查询
text
name: 贵州茅台- 查询某只股票的估值分析
text
stock_id: SH600519 analysis_type: 估值分析- 查询某只股票在某一年的记录
text
stock_id: SH600519 analysis_date: 2026- 查询所有曾经给出“买入”评级的记录
text
rating: 买入- 查询某个行业的全部记录
text
industry: 白酒七、Markdown 和 HTML 怎么处理
建议:
text
Markdown = 原始数据、唯一真实来源
HTML = 阅读、展示、分享版本不要分别编辑 Markdown 和 HTML,否则时间长了以后两份内容很容易不一致。
正确流程应该是:
text
编写 Markdown
↓
自动生成 HTML
↓
更新 SQLite 索引HTML 文件应保留同样的基础命名:
text
Markdown:
分析记录/SH600519/2026/2026-09-04_SH600519_贵州茅台_收盘复盘.md
HTML:
HTML报告/SH600519/2026/2026-09-04_SH600519_贵州茅台_收盘复盘.html如果 HTML 只是由 Markdown 生成,而且随时可以重新生成,也可以不长期备份全部 HTML,只备份 Markdown、模板和生成脚本。
八、记录多了以后增加 SQLite 索引
当记录达到几千篇以上,可以用脚本扫描所有 Markdown 的 YAML 元数据,写入 SQLite:
sql
CREATE TABLE research_records (
id TEXT PRIMARY KEY,
stock_id TEXT NOT NULL,
code TEXT,
name TEXT,
market TEXT,
industry TEXT,
analysis_date TEXT NOT NULL,
analysis_type TEXT,
rating TEXT,
price REAL,
confidence TEXT,
md_path TEXT NOT NULL,
html_path TEXT,
title TEXT,
content TEXT
);建立索引:
sql
CREATE INDEX idx_research_stock_date
ON research_records(stock_id, analysis_date);
CREATE INDEX idx_research_name
ON research_records(name);
CREATE INDEX idx_research_type
ON research_records(analysis_type);以后查询贵州茅台全部记录:
sql
SELECT
analysis_date,
analysis_type,
rating,
price,
md_path
FROM research_records
WHERE stock_id = 'SH600519'
ORDER BY analysis_date DESC;也可以建立 SQLite FTS5 全文检索,查询历史上所有提到“渠道库存”“批价下跌”“高股息”的分析内容。
九、备份建议
至少使用“三层保存”:
本地工作库
Obsidian Vault 或普通文件夹。Git 版本管理
主要管理 Markdown、模板和脚本,可以查看每次分析被修改的历史。异地备份
OneDrive、Dropbox、Google Drive、NAS 或对象存储。
建议:
text
纳入 Git:
- Markdown
- 模板
- stocks.csv
- 自动化脚本
按情况决定是否纳入 Git:
- HTML
不建议纳入 Git:
- 临时文件
- 缓存
- 数据库日志SQLite 数据库如果能由 Markdown 重新生成,它也属于派生数据,不应成为唯一数据源。
十、最适合你的最终方案
推荐采用:
text
Obsidian
+ Markdown 作为原始记录
+ YAML 结构化元数据
+ 股票代码分目录
+ 股票档案页
+ Dataview 自动展示历史记录
+ SQLite/FTS5 作为后期检索引擎
+ Git 和云盘双重备份这套方案的优势是:
- 现在就能使用,不需要先开发复杂系统。
- 能按代码、名称、日期、行业、评级和分析类型查询。
- 一只股票的所有历史判断可以自动汇总。
- 能将“当时判断”和“后来实际结果”串起来复盘。
- 将来可以接入 AI,对某只股票历次分析进行自动总结。
- 不会被某个笔记软件锁定,Markdown 随时可以迁移。
最重要的一点:除了保存“当时怎么看”,还要在每篇记录里预留“事后验证”字段。否则文件再多,也只是观点档案,不是真正可复用的投资复盘系统。