提交 readme
This commit is contained in:
@@ -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} 的停牌检查失败,继续输出报告")
|
||||
|
||||
Reference in New Issue
Block a user