新增列数据

This commit is contained in:
2026-04-30 17:13:43 +08:00
parent a2b80e9d85
commit 7b8a47ffe6
3 changed files with 24 additions and 8 deletions
+21 -5
View File
@@ -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()
# 开始日期:计算从该日期的下一个交易日开始