#!/bin/bash # 每日数据增量(C-S3 实走用):raw 真实价 + qfq 前复权,最近 N 天 → NAS。 # # 跳过 v1 daily_all_update(新浪源接口坏 KeyError:date,C-S3 不用 daily mixed)。 # raw/qfq 用 raw_redownload.py(akshare 新浪 stock_zh_a_daily,全量 29600 已验证)。 # 15min baostock 增量 = 分期项(默认跳,日内策略落地时加)。 # # env: # DAYS=5 增量回看天数(C-S3 实走需当日,5 天兜底停牌/补缺) # STOCK_LIST=... 全市场 csv(默认 data_cache/stock_info) # SKIP_RAW=1 跳 raw 增量 # SKIP_QFQ=1 跳 qfq 增量 set -uo pipefail # 不用 -e:单只失败不退(raw_redownload 内部已容错记 fail) NAS=sanguo-nas ROOT="$(cd "$(dirname "$0")/../.." && pwd)" LOCAL=${STOCK_MOUNT:-$ROOT/data_cache/daily_update} # 持久目录(不进 /tmp,重启不丢) SL=${STOCK_LIST:-$ROOT/data_cache/stock_info/stock_basic_info_raw_20260326_113530.csv} SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" DAYS=${DAYS:-5} START=$(python3 -c "import datetime;print((datetime.date.today()-datetime.timedelta(days=$DAYS)).isoformat())") mkdir -p "$LOCAL/raw" "$LOCAL/qfq" echo "=== $(date) 每日增量 start=$START DAYS=$DAYS ===" cd "$SCRIPT_DIR" # 拉 stock_info(代码列表)若本地缺 if [ ! -f "$SL" ]; then mkdir -p "$(dirname "$SL")" rsync -az "$NAS:/volume1/stock/A股数据/stock_info/" "$(dirname "$SL")/" || true fi # 1. raw 增量(C-S3 撮合真实价,adjustflag=3 / akshare adjust="") if [ "${SKIP_RAW:-0}" != "1" ]; then echo "=== 1. raw 增量(最近 $DAYS 天 → $LOCAL/raw)===" STOCK_LIST="$SL" RAW_DIR="$LOCAL/raw" SLEEP=0.5 \ python3 raw_redownload.py --all --start "$START" --adjust "" || echo " raw warn(单只失败已记)" fi # 2. qfq 增量(C-S3 warmup 信号,无除权缺口) if [ "${SKIP_QFQ:-0}" != "1" ]; then echo "=== 2. qfq 增量(最近 $DAYS 天 → $LOCAL/qfq)===" STOCK_LIST="$SL" RAW_DIR="$LOCAL/qfq" SLEEP=0.5 \ python3 raw_redownload.py --all --start "$START" --adjust qfq || echo " qfq warn(单只失败已记)" fi # 3. rsync 推 NAS(raw_dir + qfq_dir) echo "=== 3. rsync → NAS ===" rsync -az "$LOCAL/raw/" "$NAS:/volume1/stock/A股数据/日线数据/raw/" || echo " raw push warn" rsync -az "$LOCAL/qfq/" "$NAS:/volume1/stock/A股数据/日线数据/qfq/" || echo " qfq push warn" echo "=== 完成 $(date) ==="