diff --git a/cal_date.py b/cal_date.py index 546171a..962cae3 100644 --- a/cal_date.py +++ b/cal_date.py @@ -131,7 +131,7 @@ def run(start_date, end_date, token): if __name__ == "__main__": parser = argparse.ArgumentParser(description="同步交易日历") parser.add_argument("--start-date", default="20260429", help="开始日期,格式 YYYYMMDD") - parser.add_argument("--end-date", default="20260429", help="结束日期,格式 YYYYMMDD") + parser.add_argument("--end-date", default="20260430", help="结束日期,格式 YYYYMMDD") args = parser.parse_args() run(args.start_date, args.end_date, TUSHARE_TOKEN) diff --git a/daily.py b/daily.py index 86f5015..ee60c33 100644 --- a/daily.py +++ b/daily.py @@ -148,8 +148,8 @@ def run(start_date, end_date): # ===== 输入参数 ===== if __name__ == "__main__": parser = argparse.ArgumentParser(description="同步日行情") - parser.add_argument("--start-date", default="20260429", help="开始日期,格式 YYYYMMDD") - parser.add_argument("--end-date", default="20260429", help="结束日期,格式 YYYYMMDD") + parser.add_argument("--start-date", default="20260430", help="开始日期,格式 YYYYMMDD") + parser.add_argument("--end-date", default="20260430", help="结束日期,格式 YYYYMMDD") args = parser.parse_args() run(args.start_date, args.end_date) diff --git a/limit_up.py b/limit_up.py index 0f22afe..9e6ec8e 100644 --- a/limit_up.py +++ b/limit_up.py @@ -39,6 +39,7 @@ def init_db(engine): `status` TINYINT NOT NULL COMMENT '状态:1-涨停,2-炸板', `limit_price` DECIMAL(16, 4) COMMENT '计算出的理论涨停价', `close` DECIMAL(16, 4) COMMENT '实际收盘价', + `vol` BIGINT COMMENT '成交量', `market` VARCHAR(20) COMMENT '所属板块', `ak_code` VARCHAR(10) COMMENT 'AKShare-代码', `ak_name` VARCHAR(50) COMMENT 'AKShare-名称', @@ -60,9 +61,24 @@ def init_db(engine): """ with engine.begin() as conn: conn.execute(text(create_table_sql)) + ensure_base_columns(conn) ensure_ak_columns(conn) +def ensure_base_columns(conn): + existing_columns = { + row[0] + for row in conn.execute(text("SHOW COLUMNS FROM `stock_limit_data`")).fetchall() + } + base_columns = { + "vol": "BIGINT COMMENT '成交量'", + } + + for column_name, column_def in base_columns.items(): + if column_name not in existing_columns: + conn.execute(text(f"ALTER TABLE `stock_limit_data` ADD COLUMN `{column_name}` {column_def}")) + + def ensure_ak_columns(conn): existing_columns = { row[0] @@ -233,7 +249,7 @@ def merge_ak_limit_pool(final_df, ak_df): print(f"⚠️ 有 {int(name_mismatch.sum())} 条记录代码一致但名称不一致,已按代码合并 AKShare 字段。") return merged_df[[ - "trade_date", "symbol", "ts_code", "name", "status", "limit_price", "close", "market", + "trade_date", "symbol", "ts_code", "name", "status", "limit_price", "close", "vol", "market", *ak_columns, ]] @@ -251,7 +267,7 @@ def analyze_and_save_limits(start_date, end_date): query = text(""" SELECT d.trade_date, d.symbol, d.ts_code, b.name, - d.high, d.close, d.pre_close, b.market + d.high, d.close, d.pre_close, d.vol, b.market FROM stock_daily d JOIN stock_basic b ON d.ts_code = b.ts_code WHERE d.trade_date > :start_date @@ -307,7 +323,7 @@ def analyze_and_save_limits(start_date, end_date): if not save_df.empty: final_df = save_df[[ 'trade_date', 'symbol', 'ts_code', 'name', - 'status', 'limit_price', 'close', 'market' + 'status', 'limit_price', 'close', 'vol', 'market' ]].copy() final_df["trade_date"] = pd.to_datetime(final_df["trade_date"]).dt.date final_df["symbol"] = final_df["symbol"].astype(str).str.zfill(6) @@ -333,8 +349,8 @@ def analyze_and_save_limits(start_date, end_date): # ============================================================ if __name__ == "__main__": parser = argparse.ArgumentParser(description="计算并保存涨停/炸板数据") - parser.add_argument("--start-date", default="2026-03-31", help="开始日期,格式 YYYY-MM-DD,实际查询为大于该日期") - parser.add_argument("--end-date", default="2026-04-29", help="结束日期,格式 YYYY-MM-DD") + parser.add_argument("--start-date", default="2026-04-29", help="开始日期,格式 YYYY-MM-DD,实际查询为大于该日期") + parser.add_argument("--end-date", default="2026-04-30", help="结束日期,格式 YYYY-MM-DD") args = parser.parse_args() # 开始日期:计算从该日期的下一个交易日开始