新增列数据
This commit is contained in:
+21
-5
@@ -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()
|
||||
|
||||
# 开始日期:计算从该日期的下一个交易日开始
|
||||
|
||||
Reference in New Issue
Block a user