小强自动增量导入量化数据(爸爸待办清单) #21

Open
opened 2026-08-14 08:32:26 +08:00 by shellway · 9 comments
Owner

目标

让小强每天自动按 quanxiel 数据导入模块(quantitative_data/importer.py)增量导入数据到 quant_db(192.168.27.11:5438),无需每天手动全量重导。

📋 爸爸需要做的事(下班回家操作)

1. 提供 TUSHARE_TOKEN

  • 在 tushare.pro 获取/确认 API Token,填入小强容器里的 .env(importer 拉数据必需)

2. 提供 DB 写权限账号

  • importer 需要写权限(xiaoqiang 账号是只读的)
  • 方案A:直接给 postgres 账号密码
  • 方案B(推荐):建一个写账号(如 xiaoqiang_w),只授 INSERT/UPDATE 权限,更安全

3. 协助小强容器环境就位(需要 sudo/root 的操作)

  • openclaw-1 容器里 clone quanxiel 仓库
  • pip install tushare pandas psycopg2-binary sqlalchemy python-dotenv
  • 配置 .env(DB 写账号 + TUSHARE_TOKEN)
  • crontab 每日 18:30 增量导入(A股收盘后 Tushare 数据 16~18 点才齐)
  • 跑完结果自动贴到 Gitea issue 评论(沿用任务总线模式,可追踪)

小五侧准备

  • 写 incremental_import() 增量逻辑:查各表最大 trade_date,只拉「最后日期 → 昨天」;财务表慢,单独每周跑一次
  • 提交到仓库,小强拉取后部署,先手动跑一次验证增量逻辑再挂定时

待确认

  • 财务数据更新频率(周几跑?)
  • 增量拉取范围(默认最后日期 → 昨天)
## 目标 让小强每天自动按 quanxiel 数据导入模块(quantitative_data/importer.py)增量导入数据到 quant_db(192.168.27.11:5438),无需每天手动全量重导。 ## 📋 爸爸需要做的事(下班回家操作) ### 1. 提供 TUSHARE_TOKEN - 在 tushare.pro 获取/确认 API Token,填入小强容器里的 .env(importer 拉数据必需) ### 2. 提供 DB 写权限账号 - importer 需要写权限(xiaoqiang 账号是只读的) - 方案A:直接给 postgres 账号密码 - 方案B(推荐):建一个写账号(如 xiaoqiang_w),只授 INSERT/UPDATE 权限,更安全 ### 3. 协助小强容器环境就位(需要 sudo/root 的操作) - [ ] openclaw-1 容器里 clone quanxiel 仓库 - [ ] pip install tushare pandas psycopg2-binary sqlalchemy python-dotenv - [ ] 配置 .env(DB 写账号 + TUSHARE_TOKEN) - [ ] crontab 每日 18:30 增量导入(A股收盘后 Tushare 数据 16~18 点才齐) - [ ] 跑完结果自动贴到 Gitea issue 评论(沿用任务总线模式,可追踪) ## 小五侧准备 - 写 incremental_import() 增量逻辑:查各表最大 trade_date,只拉「最后日期 → 昨天」;财务表慢,单独每周跑一次 - 提交到仓库,小强拉取后部署,先手动跑一次验证增量逻辑再挂定时 ## 待确认 - 财务数据更新频率(周几跑?) - 增量拉取范围(默认最后日期 → 昨天)
Author
Owner

设计决策:小强运行代码与项目统一(2026-08-14 爸爸问询)

爸爸后续可能扩展导入模块(如加期货数据表和导入模块),要求小强使用的代码与仓库统一。方案:

  1. 唯一代码源:小强容器里的 quanxiel 目录 git clone 自 Gitea,运行入口只认这个目录,不手写副本
  2. 每次运行前自动 git pull:cron 脚本先 git fetch origin && git reset --hard origin/main(或 pull),再执行导入;仓库有新代码(新表/新模块)自动生效
  3. 表结构自动同步:init_database() 从 schema.sql 建表,新增期货表只需在仓库加表定义+导入函数,下次运行自动建表导入
  4. 可追溯/可回滚:每次运行记录 commit hash 到日志和 issue 评论;若新代码跑挂,自动回退到上一个可用 hash 并告警(保留 last-good 标记)
  5. 可选增强:Gitea webhook 推更新通知(先不做,每日 pull 足够)

结论:只要爸爸的改动推送到 Gitea main 分支,小强下次运行自动用最新代码,保证统一。

## 设计决策:小强运行代码与项目统一(2026-08-14 爸爸问询) 爸爸后续可能扩展导入模块(如加期货数据表和导入模块),要求小强使用的代码与仓库统一。方案: 1. **唯一代码源**:小强容器里的 quanxiel 目录 git clone 自 Gitea,运行入口只认这个目录,不手写副本 2. **每次运行前自动 git pull**:cron 脚本先 `git fetch origin && git reset --hard origin/main`(或 pull),再执行导入;仓库有新代码(新表/新模块)自动生效 3. **表结构自动同步**:init_database() 从 schema.sql 建表,新增期货表只需在仓库加表定义+导入函数,下次运行自动建表导入 4. **可追溯/可回滚**:每次运行记录 commit hash 到日志和 issue 评论;若新代码跑挂,自动回退到上一个可用 hash 并告警(保留 last-good 标记) 5. 可选增强:Gitea webhook 推更新通知(先不做,每日 pull 足够) 结论:只要爸爸的改动推送到 Gitea main 分支,小强下次运行自动用最新代码,保证统一。
Author
Owner

📝 操作步骤(2026-08-14 爸爸要的:给小强配 Tushare token + 数据库写账号 + .env)

第 0 步:准备两个值

  1. Tushare Token:登录 https://tushare.pro → 右上角头像 → 「个人主页」→「接口TOKEN」→ 复制(需 120 积分以上才能用日线等接口)
  2. 数据库写账号密码:自己定一个 ≥16 位随机强密码(不要和 postgres 密码相同)

第 1 步:新建数据库写账号(群晖终端/Container Manager,用 postgres 超级用户)

# 找到 PG 容器名
sudo docker ps | grep -i postgres
# 进入 psql(容器名按实际替换)
sudo docker exec -it <pg容器名> psql -U postgres -d quant_db

然后粘贴执行:

CREATE ROLE xiaoqiang_w LOGIN PASSWORD '你的强密码';
GRANT CONNECT ON DATABASE quant_db TO xiaoqiang_w;
GRANT USAGE ON SCHEMA public TO xiaoqiang_w;
GRANT CREATE ON SCHEMA public TO xiaoqiang_w;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO xiaoqiang_w;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO xiaoqiang_w;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO xiaoqiang_w;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO xiaoqiang_w;
\q

说明:importer 要建表(init_database)所以要 CREATE;要写数据所以给表/序列全部权限;但仍是非超级用户的低权限专用账号。

第 2 步:小强容器里准备 quanxiel 仓库(如已 clone 可跳过)

# 检查有没有
sudo docker exec -u node openclaw-1 bash -c 'ls /home/node/ | grep quanxiel'
# 没有就 clone(仓库地址已带凭据)
sudo docker exec -u node openclaw-1 bash -c 'cd /home/node && git clone http://shellway:61a8b37694492208a3431c92080ee57496dfecf8@192.168.27.11:3579/shellway/quanxiel.git'

第 3 步:写 .env(关键!路径是 quantitative_data/.env)

sudo docker exec -u node openclaw-1 bash -c 'cat > /home/node/quanxiel/quantitative_data/.env <<EOF
QUANT_DB_HOST=192.168.27.11
QUANT_DB_PORT=5438
QUANT_DB_NAME=quant_db
QUANT_DB_USER=xiaoqiang_w
QUANT_DB_PASSWORD=你的强密码
TUSHARE_TOKEN=你的tushare_token
EOF
chmod 600 /home/node/quanxiel/quantitative_data/.env'

第 4 步:装依赖 + 验证

sudo docker exec -u node openclaw-1 bash -c 'pip install tushare pandas psycopg2-binary sqlalchemy python-dotenv'
# 验证配置读取
sudo docker exec -u node openclaw-1 bash -c 'cd /home/node/quanxiel/quantitative_data && python3 -c "from config import DB_CONFIG, TUSHARE_TOKEN; print(DB_CONFIG); print(\"token前8位:\", TUSHARE_TOKEN[:8])"'
# 验证数据库连接
sudo docker exec -u node openclaw-1 bash -c 'cd /home/node/quanxiel/quantitative_data && python3 -c "from importer import get_pg_connection; c=get_pg_connection(); print(\"DB连接OK\", c.get_backend_pid()); c.close()"'

三条命令都成功=配置完成。之后增量脚本部署我来跟进。

⚠️ 注意

  • 密码含特殊字符(!@#)时,第 3 步 heredoc 用 'EOF' 引起来不受影响,放心填
  • 若 DB 连接报权限/来源错误,需检查 PG 的 pg_hba.conf 是否放行 Docker 网段(之前 xiaoqiang 账号方案里有记录)
  • token 别发群里,自己复制粘贴即可
## 📝 操作步骤(2026-08-14 爸爸要的:给小强配 Tushare token + 数据库写账号 + .env) ### 第 0 步:准备两个值 1. **Tushare Token**:登录 https://tushare.pro → 右上角头像 → 「个人主页」→「接口TOKEN」→ 复制(需 120 积分以上才能用日线等接口) 2. **数据库写账号密码**:自己定一个 ≥16 位随机强密码(**不要**和 postgres 密码相同) ### 第 1 步:新建数据库写账号(群晖终端/Container Manager,用 postgres 超级用户) ```bash # 找到 PG 容器名 sudo docker ps | grep -i postgres # 进入 psql(容器名按实际替换) sudo docker exec -it <pg容器名> psql -U postgres -d quant_db ``` 然后粘贴执行: ```sql CREATE ROLE xiaoqiang_w LOGIN PASSWORD '你的强密码'; GRANT CONNECT ON DATABASE quant_db TO xiaoqiang_w; GRANT USAGE ON SCHEMA public TO xiaoqiang_w; GRANT CREATE ON SCHEMA public TO xiaoqiang_w; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO xiaoqiang_w; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO xiaoqiang_w; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO xiaoqiang_w; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO xiaoqiang_w; \q ``` > 说明:importer 要建表(init_database)所以要 CREATE;要写数据所以给表/序列全部权限;但仍是非超级用户的低权限专用账号。 ### 第 2 步:小强容器里准备 quanxiel 仓库(如已 clone 可跳过) ```bash # 检查有没有 sudo docker exec -u node openclaw-1 bash -c 'ls /home/node/ | grep quanxiel' # 没有就 clone(仓库地址已带凭据) sudo docker exec -u node openclaw-1 bash -c 'cd /home/node && git clone http://shellway:61a8b37694492208a3431c92080ee57496dfecf8@192.168.27.11:3579/shellway/quanxiel.git' ``` ### 第 3 步:写 .env(关键!路径是 quantitative_data/.env) ```bash sudo docker exec -u node openclaw-1 bash -c 'cat > /home/node/quanxiel/quantitative_data/.env <<EOF QUANT_DB_HOST=192.168.27.11 QUANT_DB_PORT=5438 QUANT_DB_NAME=quant_db QUANT_DB_USER=xiaoqiang_w QUANT_DB_PASSWORD=你的强密码 TUSHARE_TOKEN=你的tushare_token EOF chmod 600 /home/node/quanxiel/quantitative_data/.env' ``` ### 第 4 步:装依赖 + 验证 ```bash sudo docker exec -u node openclaw-1 bash -c 'pip install tushare pandas psycopg2-binary sqlalchemy python-dotenv' # 验证配置读取 sudo docker exec -u node openclaw-1 bash -c 'cd /home/node/quanxiel/quantitative_data && python3 -c "from config import DB_CONFIG, TUSHARE_TOKEN; print(DB_CONFIG); print(\"token前8位:\", TUSHARE_TOKEN[:8])"' # 验证数据库连接 sudo docker exec -u node openclaw-1 bash -c 'cd /home/node/quanxiel/quantitative_data && python3 -c "from importer import get_pg_connection; c=get_pg_connection(); print(\"DB连接OK\", c.get_backend_pid()); c.close()"' ``` 三条命令都成功=配置完成。之后增量脚本部署我来跟进。 ### ⚠️ 注意 - 密码含特殊字符(!@#)时,第 3 步 heredoc 用 'EOF' 引起来不受影响,放心填 - 若 DB 连接报权限/来源错误,需检查 PG 的 pg_hba.conf 是否放行 Docker 网段(之前 xiaoqiang 账号方案里有记录) - token 别发群里,自己复制粘贴即可

小五:增量脚本已就绪(2026-08-15 10:25)

incremental_import.py 已推送到仓库(commit c5fda08),适配新版 importer(daily_vip 按日全市场 + 财务 vip 接口)。

  • 每日:trade_cal / stock_basic / daily / daily_basic / adj_factor / index_daily 增量
  • --weekly:额外导入财务表(income/balancesheet/cashflow/fina_indicator,按 MAX(end_date) 前推 400 天,幂等)
  • 爸爸已完成:venv 装依赖(/opt/quant-venv)、.env 配置(xiaoqiang_w + token)、三条验证全过

待爸爸操作:小强容器 git pull → dry-run → 手动跑一次 → 挂定时 18:30(建议群晖任务计划)。

⚠️ 注意:新版 importer 用 daily_vip 等 VIP 接口,Tushare 需 5000+ 积分,token 积分不够会报权限错误。

## 小五:增量脚本已就绪(2026-08-15 10:25) **incremental_import.py** 已推送到仓库(commit c5fda08),适配新版 importer(daily_vip 按日全市场 + 财务 vip 接口)。 - 每日:trade_cal / stock_basic / daily / daily_basic / adj_factor / index_daily 增量 - `--weekly`:额外导入财务表(income/balancesheet/cashflow/fina_indicator,按 MAX(end_date) 前推 400 天,幂等) - 爸爸已完成:venv 装依赖(/opt/quant-venv)、.env 配置(xiaoqiang_w + token)、三条验证全过 **待爸爸操作**:小强容器 git pull → dry-run → 手动跑一次 → 挂定时 18:30(建议群晖任务计划)。 ⚠️ 注意:新版 importer 用 daily_vip 等 VIP 接口,**Tushare 需 5000+ 积分**,token 积分不够会报权限错误。

✅ 增量导入部署完成(2026-08-15 13:20)

  • 全部数据补齐到 2026-08-14:daily / daily_basic / adj_factor / index_daily(6指数)✅
  • 期间修复 4 处 Tushare 接口名问题(daily_vip/adj_factor_vip/daily_basic_vip/index_daily_vip → 普通版),教训已入 wiki 踩坑记录
  • 新增:incremental_import.py(增量脚本)、tushare_api_reference.md(接口参考)、tushare_api_check.py(接口自检)、Gitea wiki(5页)
  • 剩余待办:①群晖任务计划挂定时(每日18:30 + 周日财务)②爸爸重置 tushare token(对话中泄露过)
## ✅ 增量导入部署完成(2026-08-15 13:20) - 全部数据补齐到 2026-08-14:daily / daily_basic / adj_factor / index_daily(6指数)✅ - 期间修复 4 处 Tushare 接口名问题(daily_vip/adj_factor_vip/daily_basic_vip/index_daily_vip → 普通版),教训已入 wiki 踩坑记录 - 新增:incremental_import.py(增量脚本)、tushare_api_reference.md(接口参考)、tushare_api_check.py(接口自检)、Gitea wiki(5页) - 剩余待办:①群晖任务计划挂定时(每日18:30 + 周日财务)②爸爸重置 tushare token(对话中泄露过)

🤖 自动增量导入报告(2026-09-17 11:45)

  • 范围: 2026-09-17 ~ 2026-09-17(库内最新: 2026-09-16)
  • 股票基本信息: 已更新 (含退市)
  • 交易日历: 2026-09-17 ~ 2026-09-17
  • 日线行情: 完整
  • 覆盖度校验: ✓ 正常
  • 每日指标: 已更新
  • 复权因子: 5565 只股票
  • 指数日线: 已更新
  • daily 汇总: 4059 个交易日, 最新 2026-09-17
  • 数据库: 192.168.27.11:5438/quant_db
## 🤖 自动增量导入报告(2026-09-17 11:45) - 范围: 2026-09-17 ~ 2026-09-17(库内最新: 2026-09-16) - 股票基本信息: 已更新 (含退市) - 交易日历: 2026-09-17 ~ 2026-09-17 - 日线行情: 完整 - 覆盖度校验: ✓ 正常 - 每日指标: 已更新 - 复权因子: 5565 只股票 - 指数日线: 已更新 - daily 汇总: 4059 个交易日, 最新 2026-09-17 - 数据库: 192.168.27.11:5438/quant_db

🤖 自动增量导入报告(2026-09-18 11:44)

  • 范围: 2026-09-18 ~ 2026-09-18(库内最新: 2026-09-17)
  • 股票基本信息: 已更新 (含退市)
  • 交易日历: 2026-09-18 ~ 2026-09-18
  • 日线行情: 完整
  • 覆盖度校验: ✓ 正常
  • 每日指标: 已更新
  • 复权因子: 5565 只股票
  • 指数日线: 已更新
  • daily 汇总: 4060 个交易日, 最新 2026-09-18
  • 数据库: 192.168.27.11:5438/quant_db
## 🤖 自动增量导入报告(2026-09-18 11:44) - 范围: 2026-09-18 ~ 2026-09-18(库内最新: 2026-09-17) - 股票基本信息: 已更新 (含退市) - 交易日历: 2026-09-18 ~ 2026-09-18 - 日线行情: 完整 - 覆盖度校验: ✓ 正常 - 每日指标: 已更新 - 复权因子: 5565 只股票 - 指数日线: 已更新 - daily 汇总: 4060 个交易日, 最新 2026-09-18 - 数据库: 192.168.27.11:5438/quant_db

🤖 自动增量导入报告(2026-09-21 11:44)

  • 范围: 2026-09-19 ~ 2026-09-21(库内最新: 2026-09-18)
  • 股票基本信息: 已更新 (含退市)
  • 交易日历: 2026-09-19 ~ 2026-09-21
  • 日线行情: 完整
  • 覆盖度校验: ✓ 正常
  • 每日指标: 已更新
  • 复权因子: 5565 只股票
  • 指数日线: 已更新
  • daily 汇总: 4061 个交易日, 最新 2026-09-21
  • 数据库: 192.168.27.11:5438/quant_db
## 🤖 自动增量导入报告(2026-09-21 11:44) - 范围: 2026-09-19 ~ 2026-09-21(库内最新: 2026-09-18) - 股票基本信息: 已更新 (含退市) - 交易日历: 2026-09-19 ~ 2026-09-21 - 日线行情: 完整 - 覆盖度校验: ✓ 正常 - 每日指标: 已更新 - 复权因子: 5565 只股票 - 指数日线: 已更新 - daily 汇总: 4061 个交易日, 最新 2026-09-21 - 数据库: 192.168.27.11:5438/quant_db

🤖 自动增量导入报告(2026-09-22 11:45 UTC)

  • 范围: 2026-09-22 ~ 2026-09-22(库内最新: 2026-09-21)
  • 股票基本信息: 已更新 (含退市,5567 只 + 339 退市)
  • 交易日历: 2010-01-01 ~ 2026-09-22
  • 日线行情 daily: 完整(5554 条)
  • 覆盖度校验: ✓ 正常
  • 每日指标 daily_basic: 已更新(5554 条)
  • 复权因子 adj_factor: 5567 只股票
  • 指数日线 index_daily: 6 个指数
  • daily 汇总: 4062 个交易日, 最新 2026-09-22
  • 备注: 首次运行被中断(SIGTERM),已用 finish_20260922.py 补齐 adj_factor(1902只)与 index_daily,最终校验全部通过。
  • 数据库: 192.168.27.11:5438/quant_db
## 🤖 自动增量导入报告(2026-09-22 11:45 UTC) - 范围: 2026-09-22 ~ 2026-09-22(库内最新: 2026-09-21) - 股票基本信息: 已更新 (含退市,5567 只 + 339 退市) - 交易日历: 2010-01-01 ~ 2026-09-22 - 日线行情 daily: 完整(5554 条) - 覆盖度校验: ✓ 正常 - 每日指标 daily_basic: 已更新(5554 条) - 复权因子 adj_factor: 5567 只股票 - 指数日线 index_daily: 6 个指数 - daily 汇总: 4062 个交易日, 最新 2026-09-22 - 备注: 首次运行被中断(SIGTERM),已用 finish_20260922.py 补齐 adj_factor(1902只)与 index_daily,最终校验全部通过。 - 数据库: 192.168.27.11:5438/quant_db

🤖 自动增量导入报告(2026-09-23 11:42)

  • 范围: 2026-09-23 ~ 2026-09-23(库内最新: 2026-09-22)
  • 股票基本信息: 已更新 (含退市)
  • 交易日历: 2026-09-23 ~ 2026-09-23
  • 日线行情: 完整
  • 覆盖度校验: ✓ 正常
  • 每日指标: 已更新
  • 复权因子: 5568 只股票
  • 指数日线: 已更新
  • daily 汇总: 4063 个交易日, 最新 2026-09-23
  • 数据库: 192.168.27.11:5438/quant_db
## 🤖 自动增量导入报告(2026-09-23 11:42) - 范围: 2026-09-23 ~ 2026-09-23(库内最新: 2026-09-22) - 股票基本信息: 已更新 (含退市) - 交易日历: 2026-09-23 ~ 2026-09-23 - 日线行情: 完整 - 覆盖度校验: ✓ 正常 - 每日指标: 已更新 - 复权因子: 5568 只股票 - 指数日线: 已更新 - daily 汇总: 4063 个交易日, 最新 2026-09-23 - 数据库: 192.168.27.11:5438/quant_db
Sign in to join this conversation.
No labels
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shellway/quanxiel#21