新增一键运行功能
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
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 顺序同步股票数据"
|
||||
)
|
||||
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_up import analyze_and_save_limits
|
||||
|
||||
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)
|
||||
|
||||
print("\n全部流程执行完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user