提交 readme

This commit is contained in:
2025-12-18 16:24:44 +08:00
parent 549f00f119
commit ac669ecf33
6 changed files with 934 additions and 32 deletions

View File

@@ -280,8 +280,8 @@ def check_stock_suspended(ts_code, check_date):
检查股票在指定日期是否停牌
:param ts_code: 股票代码,如'688800.SH'
:param check_date: 检查日期格式YYYYMMDD
:return: (is_suspended, suspend_dates, latest_suspend_start) -
is_suspended表示是否停牌suspend_dates表示停牌日期范围latest_suspend_start表示最的停牌开始日期
:return: (is_suspended, suspend_dates, earliest_suspend_start) -
is_suspended表示是否停牌suspend_dates表示停牌日期范围earliest_suspend_start表示最的停牌开始日期
"""
try:
# 为了确保获取完整的停牌信息查询范围扩大1个月
@@ -297,7 +297,7 @@ def check_stock_suspended(ts_code, check_date):
suspend_dates_list = []
is_suspended = False
latest_suspend_start = None
earliest_suspend_start = None # 改为最早的停牌开始日期
# 检查指定日期是否在任何停牌期间内
for _, row in suspend_df.iterrows():
@@ -308,9 +308,9 @@ def check_stock_suspended(ts_code, check_date):
# 如果suspend_type为'S',表示该日停牌
if suspend_type == 'S':
# 更新最的停牌日期(仅在实际停牌时更新
if latest_suspend_start is None or trade_date > latest_suspend_start:
latest_suspend_start = trade_date
# 更新最的停牌日期(取最小值
if earliest_suspend_start is None or trade_date < earliest_suspend_start:
earliest_suspend_start = trade_date
# 保存停牌日期
suspend_dates_list.append(trade_date)
@@ -326,9 +326,9 @@ def check_stock_suspended(ts_code, check_date):
suspend_start = row['suspend_date']
suspend_end = row['resume_date']
# 更新最的停牌开始日期
if latest_suspend_start is None or suspend_start > latest_suspend_start:
latest_suspend_start = suspend_start
# 更新最的停牌开始日期(取最小值)
if earliest_suspend_start is None or suspend_start < earliest_suspend_start:
earliest_suspend_start = suspend_start
# 如果恢复日期为None或00000000表示尚未复牌
if not suspend_end or suspend_end == '00000000':
@@ -344,8 +344,8 @@ def check_stock_suspended(ts_code, check_date):
elif 'ts_code' in row and 'trade_date' in row:
# 处理其他格式的单日停牌数据
trade_date = row['trade_date']
if latest_suspend_start is None or trade_date > latest_suspend_start:
latest_suspend_start = trade_date
if earliest_suspend_start is None or trade_date < earliest_suspend_start:
earliest_suspend_start = trade_date
suspend_dates_list.append(trade_date)
logger.info(f"股票 {ts_code}{trade_date} 处于停牌状态")
@@ -361,7 +361,7 @@ def check_stock_suspended(ts_code, check_date):
if not is_suspended:
logger.info(f"股票 {ts_code}{check_date} 未处于停牌状态")
return is_suspended, suspend_dates, latest_suspend_start
return is_suspended, suspend_dates, earliest_suspend_start
except Exception as e:
logger.error(f"检查股票停牌状态失败 {ts_code} {check_date}: {str(e)}")
return None, "", None
@@ -579,7 +579,7 @@ def check_market_data(online_check=Config.DEFAULT_ONLINE_CHECK):
continue
# 进行停牌检查
is_suspended, suspend_dates, latest_suspend_start = check_stock_suspended(ts_code, check_date)
is_suspended, suspend_dates, earliest_suspend_start = check_stock_suspended(ts_code, check_date)
# 更新文件信息
file_info['is_suspended'] = '' if is_suspended else '' if is_suspended is not None else '检查失败'
@@ -588,17 +588,22 @@ def check_market_data(online_check=Config.DEFAULT_ONLINE_CHECK):
if is_suspended is True:
logger.info(f"股票 {ts_code} 当前处于停牌状态")
if latest_suspend_start is not None:
# 检查最新行情是否是停盘那天
if latest_date == latest_suspend_start:
logger.info(f"股票 {ts_code} 的最新行情日期 {latest_date} 停牌开始日期 {latest_suspend_start} 一致,不输出报告")
if earliest_suspend_start is not None:
# 检查最新行情日期是否等于或晚于停牌开始日期
if latest_date >= earliest_suspend_start:
logger.info(f"股票 {ts_code} 的最新行情日期 {latest_date} >= 停牌开始日期 {earliest_suspend_start},数据完整,不输出报告")
continue # 跳过输出报告
else:
logger.info(f"股票 {ts_code} 的最新行情日期 {latest_date} 停牌开始日期 {latest_suspend_start} 不一致,开始更新数据")
logger.info(f"股票 {ts_code} 的最新行情日期 {latest_date} < 停牌开始日期 {earliest_suspend_start},开始更新数据")
# 更新数据到最新
update_stock_data(ts_code)
# 更新最新日期为停牌开始日期
file_info['latest_date'] = latest_suspend_start
update_success = update_stock_data(ts_code)
if update_success:
# 重新读取文件获取最新日期
file_path = Config.DATA_DIR / f"{ts_code}_daily_data.txt"
updated_latest_date = get_latest_trade_date(file_path)
if updated_latest_date:
file_info['latest_date'] = updated_latest_date
logger.info(f"股票 {ts_code} 数据更新成功,最新日期: {updated_latest_date}")
# 继续输出报告,因为已经更新了数据
elif is_suspended is None:
logger.warning(f"股票 {ts_code} 的停牌检查失败,继续输出报告")