← 返回工具目录 · 全部教程

A股日线/快照本地自动落库,开机自启

系列·本地复盘篇 02 — 自选股行情每天自动进库,断电漏跑开机补上,复盘数据从此不断档

📖 本篇是《本地 AI 复盘系统》第 2 篇,前置:本地 Python 环境与 SQLite 准备; 数据接口的细节(限频/复权/中文列名)同站akshare 数据实操讲得更深,可对照读。

01 · 脚本:读自选清单,增量落库

先建一个自选清单 D:/quant/scripts/stocks.txt,一行一个代码,写你真正持有的和盯着的票 (几十只以内最舒服):

# update_daily.py — 每天收盘后跑一次
import sqlite3, time
from pathlib import Path
import akshare as ak
import pandas as pd

ROOT = Path("D:/quant")
DB = ROOT / "astock.db"
codes = [c.strip() for c in (ROOT / "scripts/stocks.txt").read_text().splitlines() if c.strip()]

conn = sqlite3.connect(DB)
for code in codes:
    # 库里最新日期的下一天接着拉,天然增量
    row = conn.execute("SELECT MAX(date) FROM daily WHERE code=?", (code,)).fetchone()
    start = (pd.Timestamp(row[0]) + pd.Timedelta(days=1)).strftime("%Y%m%d") if row[0] else "20240101"
    df = ak.stock_zh_a_hist(symbol=code, period="daily",
                            start_date=start, end_date="20991231", adjust="qfq")
    if df is None or df.empty:
        continue
    df = df.rename(columns={"日期": "date", "开盘": "open", "最高": "high",
                            "最低": "low", "收盘": "close", "成交量": "volume"})
    for _, r in df.iterrows():
        try:
            conn.execute("INSERT INTO daily VALUES(?,?,?,?,?,?,?)",
                         (code, str(r["date"])[:10], r["open"], r["high"],
                          r["low"], r["close"], r["volume"]))
        except sqlite3.IntegrityError:
            pass                     # 已存在 -> 跳过(幂等)
    time.sleep(0.5)                  # 限频礼貌
conn.commit(); conn.close()
print("done", len(codes))

手动跑一次 python -X utf8 update_daily.py,用 DB Browser 打开库确认有数据。

02 · 挂 Windows 任务计划程序

先用一条命令注册(管理员 PowerShell),想用图形界面就搜"任务计划程序"照同样的参数点:

schtasks /Create /TN "astock-daily" /SC WEEKLY /D MON,TUE,WED,THU,FRI /ST 18:00 ^
  /TR "D:\quant\.venv\Scripts\python.exe -X utf8 D:\quant\scripts\update_daily.py" ^
  /F

注册完在"任务计划程序"里打开这条任务的属性,改三个默认值:

macOS 用户等价方案:crontab -e 加一行0 18 * * 1-5 /Users/you/quant/.venv/bin/python /Users/you/quant/scripts/update_daily.py

03 · 日志:出了问题看这里

任务计划程序不会告诉你脚本崩没崩,把输出重定向到日志文件(改 /TR 参数, 或直接用 bat 包装):

@rem run_update.bat
@echo off
cd /d D:\quant
.venv\Scripts\python.exe -X utf8 scripts\update_daily.py >> logs\update_%date:~0,4%%date:~5,2%%date:~8,2%.log 2>&1

任务的 /TR 改成指向这个 bat。每次改任务后右键"运行"实测一次,别等收盘才发现没跑。

04 · 验证与日常维护

05 · 避坑清单

🤖 数据自动进库了,下一篇让 AI 每天收盘后替你写复盘笔记:

下一篇:收盘后自动生成 AI 复盘笔记 →

教程不构成任何投资建议;接口行为以 akshare 当前版本为准。