新增列数据
This commit is contained in:
+1
-1
@@ -131,7 +131,7 @@ def run(start_date, end_date, token):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description="同步交易日历")
|
parser = argparse.ArgumentParser(description="同步交易日历")
|
||||||
parser.add_argument("--start-date", default="20260429", help="开始日期,格式 YYYYMMDD")
|
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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
run(args.start_date, args.end_date, TUSHARE_TOKEN)
|
run(args.start_date, args.end_date, TUSHARE_TOKEN)
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ def run(start_date, end_date):
|
|||||||
# ===== 输入参数 =====
|
# ===== 输入参数 =====
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description="同步日行情")
|
parser = argparse.ArgumentParser(description="同步日行情")
|
||||||
parser.add_argument("--start-date", default="20260429", help="开始日期,格式 YYYYMMDD")
|
parser.add_argument("--start-date", default="20260430", help="开始日期,格式 YYYYMMDD")
|
||||||
parser.add_argument("--end-date", default="20260429", help="结束日期,格式 YYYYMMDD")
|
parser.add_argument("--end-date", default="20260430", help="结束日期,格式 YYYYMMDD")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
run(args.start_date, args.end_date)
|
run(args.start_date, args.end_date)
|
||||||
|
|||||||
+21
-5
@@ -39,6 +39,7 @@ def init_db(engine):
|
|||||||
`status` TINYINT NOT NULL COMMENT '状态:1-涨停,2-炸板',
|
`status` TINYINT NOT NULL COMMENT '状态:1-涨停,2-炸板',
|
||||||
`limit_price` DECIMAL(16, 4) COMMENT '计算出的理论涨停价',
|
`limit_price` DECIMAL(16, 4) COMMENT '计算出的理论涨停价',
|
||||||
`close` DECIMAL(16, 4) COMMENT '实际收盘价',
|
`close` DECIMAL(16, 4) COMMENT '实际收盘价',
|
||||||
|
`vol` BIGINT COMMENT '成交量',
|
||||||
`market` VARCHAR(20) COMMENT '所属板块',
|
`market` VARCHAR(20) COMMENT '所属板块',
|
||||||
`ak_code` VARCHAR(10) COMMENT 'AKShare-代码',
|
`ak_code` VARCHAR(10) COMMENT 'AKShare-代码',
|
||||||
`ak_name` VARCHAR(50) COMMENT 'AKShare-名称',
|
`ak_name` VARCHAR(50) COMMENT 'AKShare-名称',
|
||||||
@@ -60,9 +61,24 @@ def init_db(engine):
|
|||||||
"""
|
"""
|
||||||
with engine.begin() as conn:
|
with engine.begin() as conn:
|
||||||
conn.execute(text(create_table_sql))
|
conn.execute(text(create_table_sql))
|
||||||
|
ensure_base_columns(conn)
|
||||||
ensure_ak_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):
|
def ensure_ak_columns(conn):
|
||||||
existing_columns = {
|
existing_columns = {
|
||||||
row[0]
|
row[0]
|
||||||
@@ -233,7 +249,7 @@ def merge_ak_limit_pool(final_df, ak_df):
|
|||||||
print(f"⚠️ 有 {int(name_mismatch.sum())} 条记录代码一致但名称不一致,已按代码合并 AKShare 字段。")
|
print(f"⚠️ 有 {int(name_mismatch.sum())} 条记录代码一致但名称不一致,已按代码合并 AKShare 字段。")
|
||||||
|
|
||||||
return merged_df[[
|
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,
|
*ak_columns,
|
||||||
]]
|
]]
|
||||||
|
|
||||||
@@ -251,7 +267,7 @@ def analyze_and_save_limits(start_date, end_date):
|
|||||||
query = text("""
|
query = text("""
|
||||||
SELECT
|
SELECT
|
||||||
d.trade_date, d.symbol, d.ts_code, b.name,
|
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
|
FROM stock_daily d
|
||||||
JOIN stock_basic b ON d.ts_code = b.ts_code
|
JOIN stock_basic b ON d.ts_code = b.ts_code
|
||||||
WHERE d.trade_date > :start_date
|
WHERE d.trade_date > :start_date
|
||||||
@@ -307,7 +323,7 @@ def analyze_and_save_limits(start_date, end_date):
|
|||||||
if not save_df.empty:
|
if not save_df.empty:
|
||||||
final_df = save_df[[
|
final_df = save_df[[
|
||||||
'trade_date', 'symbol', 'ts_code', 'name',
|
'trade_date', 'symbol', 'ts_code', 'name',
|
||||||
'status', 'limit_price', 'close', 'market'
|
'status', 'limit_price', 'close', 'vol', 'market'
|
||||||
]].copy()
|
]].copy()
|
||||||
final_df["trade_date"] = pd.to_datetime(final_df["trade_date"]).dt.date
|
final_df["trade_date"] = pd.to_datetime(final_df["trade_date"]).dt.date
|
||||||
final_df["symbol"] = final_df["symbol"].astype(str).str.zfill(6)
|
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__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description="计算并保存涨停/炸板数据")
|
parser = argparse.ArgumentParser(description="计算并保存涨停/炸板数据")
|
||||||
parser.add_argument("--start-date", default="2026-03-31", 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-29", help="结束日期,格式 YYYY-MM-DD")
|
parser.add_argument("--end-date", default="2026-04-30", help="结束日期,格式 YYYY-MM-DD")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# 开始日期:计算从该日期的下一个交易日开始
|
# 开始日期:计算从该日期的下一个交易日开始
|
||||||
|
|||||||
Reference in New Issue
Block a user