88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
import argparse
|
|
from datetime import datetime, timedelta
|
|
|
|
from stock_config import TUSHARE_TOKEN
|
|
|
|
|
|
def parse_yyyymmdd(value):
|
|
try:
|
|
return datetime.strptime(value, "%Y%m%d").date()
|
|
except ValueError as exc:
|
|
raise argparse.ArgumentTypeError("日期格式应为 YYYYMMDD") from exc
|
|
|
|
|
|
def to_yyyymmdd(date_value):
|
|
return date_value.strftime("%Y%m%d")
|
|
|
|
|
|
def to_iso_date(date_value):
|
|
return date_value.strftime("%Y-%m-%d")
|
|
|
|
|
|
def run_stage(name, func, *args):
|
|
print(f"\n========== {name} 开始 ==========")
|
|
result = func(*args)
|
|
if result is False:
|
|
raise RuntimeError(f"{name} 执行失败,流程已停止")
|
|
print(f"========== {name} 完成 ==========")
|
|
|
|
|
|
def main():
|
|
today = datetime.now().date()
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description=(
|
|
"按 basic -> cal_date -> daily -> limit_up -> limit_list_d "
|
|
"-> second_board_profit_cache 顺序同步股票数据"
|
|
)
|
|
)
|
|
parser.add_argument(
|
|
"--date",
|
|
type=parse_yyyymmdd,
|
|
default=today,
|
|
help="同步单日数据,格式 YYYYMMDD;未指定时默认今天",
|
|
)
|
|
parser.add_argument("--start-date", type=parse_yyyymmdd, help="区间开始日期,格式 YYYYMMDD")
|
|
parser.add_argument("--end-date", type=parse_yyyymmdd, help="区间结束日期,格式 YYYYMMDD")
|
|
parser.add_argument("--skip-basic", action="store_true", help="跳过股票基础信息同步")
|
|
args = parser.parse_args()
|
|
|
|
start_date = args.start_date or args.date
|
|
end_date = args.end_date or args.date
|
|
|
|
if start_date > end_date:
|
|
raise SystemExit("开始日期不能大于结束日期")
|
|
|
|
start_yyyymmdd = to_yyyymmdd(start_date)
|
|
end_yyyymmdd = to_yyyymmdd(end_date)
|
|
limit_start = to_iso_date(start_date - timedelta(days=1))
|
|
limit_end = to_iso_date(end_date)
|
|
|
|
if not args.skip_basic:
|
|
from basic import sync_stock_basic
|
|
|
|
run_stage("basic 股票基础信息", sync_stock_basic)
|
|
|
|
from cal_date import run as run_cal_date
|
|
from daily import run as run_daily
|
|
from limit_list_d import run as run_limit_list_d
|
|
from limit_up import analyze_and_save_limits
|
|
from second_board_profit_cache import run as run_second_board_profit_cache
|
|
|
|
run_stage("cal_date 交易日历", run_cal_date, start_yyyymmdd, end_yyyymmdd, TUSHARE_TOKEN)
|
|
run_stage("daily 日行情", run_daily, start_yyyymmdd, end_yyyymmdd)
|
|
run_stage("limit_up 涨停/炸板", analyze_and_save_limits, limit_start, limit_end)
|
|
run_stage("limit_list_d 原始涨跌停数据", run_limit_list_d, start_yyyymmdd, end_yyyymmdd)
|
|
run_stage(
|
|
"second_board_profit_cache 二板获利缓存",
|
|
run_second_board_profit_cache,
|
|
start_yyyymmdd,
|
|
end_yyyymmdd,
|
|
)
|
|
|
|
print("\n全部流程执行完成")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|