计算最佳模型日期调整为上一交易日
This commit is contained in:
parent
f3971a94ec
commit
5ff6213717
44
lib/tools.py
44
lib/tools.py
@ -844,6 +844,8 @@ def find_best_models(date='', global_config=None):
|
|||||||
best_models = {}
|
best_models = {}
|
||||||
model_id_name_dict = get_model_id_name_dict(global_config=global_config)
|
model_id_name_dict = get_model_id_name_dict(global_config=global_config)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 处理日期输入
|
# 处理日期输入
|
||||||
if not date:
|
if not date:
|
||||||
date = datetime.datetime.now().strftime('%Y-%m-%d')
|
date = datetime.datetime.now().strftime('%Y-%m-%d')
|
||||||
@ -855,8 +857,13 @@ def find_best_models(date='', global_config=None):
|
|||||||
global_config['logger'].error(
|
global_config['logger'].error(
|
||||||
f"日期格式错误,期望格式为 '%Y-%m-%d',实际输入: {date}")
|
f"日期格式错误,期望格式为 '%Y-%m-%d',实际输入: {date}")
|
||||||
return best_models
|
return best_models
|
||||||
|
|
||||||
current_date = datetime.datetime.strptime(date, '%Y-%m-%d')
|
current_date = datetime.datetime.strptime(date, '%Y-%m-%d')
|
||||||
|
|
||||||
|
|
||||||
|
# 上一交易日日期 Last trading day
|
||||||
|
last_trading_day = pd.Timestamp(date) - pd.tseries.offsets.BusinessDay(1)
|
||||||
|
last_trading_day_str = last_trading_day.strftime('%Y-%m-%d')
|
||||||
|
|
||||||
# 计算date对应月的一日
|
# 计算date对应月的一日
|
||||||
first_day_of_month = current_date.replace(day=1)
|
first_day_of_month = current_date.replace(day=1)
|
||||||
# 计算date对应周的周一
|
# 计算date对应周的周一
|
||||||
@ -943,14 +950,13 @@ def find_best_models(date='', global_config=None):
|
|||||||
# 遍历全局配置中的价格列
|
# 遍历全局配置中的价格列
|
||||||
for i, wd in enumerate(global_config['price_columns']):
|
for i, wd in enumerate(global_config['price_columns']):
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'*********************************************************************************************************计算预测{date}的{wd}最佳模型')
|
f'*********************************************************************************************************计算预测{last_trading_day_str}的{wd}最佳模型')
|
||||||
best_models[wd] = {}
|
best_models[wd] = {}
|
||||||
|
|
||||||
if i == 0:
|
if i == 0:
|
||||||
# 计算当前日期的前一工作日日期
|
# 计算当前日期的前一工作日日期
|
||||||
ciridate = (pd.Timestamp(date) -
|
ciridate = last_trading_day_str
|
||||||
pd.tseries.offsets.BusinessDay(1)).strftime('%Y-%m-%d')
|
global_config['logger'].info(f'计算预测{last_trading_day}的次日{last_trading_day}最佳模型')
|
||||||
global_config['logger'].info(f'计算预测{date}的次日{ciridate}最佳模型')
|
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{date}真实价格:{true_price[true_price["ds"] == date]["y"].values[0]}')
|
f'{date}真实价格:{true_price[true_price["ds"] == date]["y"].values[0]}')
|
||||||
price = df[['data_date', wd, 'model_id']]
|
price = df[['data_date', wd, 'model_id']]
|
||||||
@ -965,7 +971,7 @@ def find_best_models(date='', global_config=None):
|
|||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{ciridate}预测最准确的模型名称:{best_models[wd]}')
|
f'{ciridate}预测最准确的模型名称:{best_models[wd]}')
|
||||||
predictresult = query_predict_result(
|
predictresult = query_predict_result(
|
||||||
date, best_model_id, global_config, wd)
|
last_trading_day, best_model_id, global_config, wd)
|
||||||
if predictresult:
|
if predictresult:
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
||||||
@ -976,9 +982,9 @@ def find_best_models(date='', global_config=None):
|
|||||||
|
|
||||||
elif i == 1:
|
elif i == 1:
|
||||||
# 计算五个工作日之前的日期
|
# 计算五个工作日之前的日期
|
||||||
benzhoudate = (pd.Timestamp(date) -
|
benzhoudate = (pd.Timestamp(last_trading_day) -
|
||||||
pd.Timedelta(days=7)).strftime('%Y-%m-%d')
|
pd.Timedelta(days=7)).strftime('%Y-%m-%d')
|
||||||
global_config['logger'].info(f'计算预测{date}的五天前{benzhoudate}最佳模型')
|
global_config['logger'].info(f'计算预测{last_trading_day}的五天前{benzhoudate}最佳模型')
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{date}真实价格:{true_price[true_price["ds"] == date]["y"].values[0]}')
|
f'{date}真实价格:{true_price[true_price["ds"] == date]["y"].values[0]}')
|
||||||
price = df[['data_date', wd, 'model_id']]
|
price = df[['data_date', wd, 'model_id']]
|
||||||
@ -992,7 +998,7 @@ def find_best_models(date='', global_config=None):
|
|||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{benzhoudate}预测最准确的模型名称:{best_models[wd]}')
|
f'{benzhoudate}预测最准确的模型名称:{best_models[wd]}')
|
||||||
predictresult = query_predict_result(
|
predictresult = query_predict_result(
|
||||||
date, best_model_id, global_config, wd)
|
last_trading_day, best_model_id, global_config, wd)
|
||||||
if predictresult:
|
if predictresult:
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
||||||
@ -1004,16 +1010,16 @@ def find_best_models(date='', global_config=None):
|
|||||||
|
|
||||||
elif i in [2, 3]:
|
elif i in [2, 3]:
|
||||||
weeks_ago = 1 if i == 2 else 2
|
weeks_ago = 1 if i == 2 else 2
|
||||||
ago_monday = current_date - \
|
ago_monday = last_trading_day - \
|
||||||
datetime.timedelta(days=current_date.weekday() + 7 * weeks_ago)
|
datetime.timedelta(days=last_trading_day.weekday() + 7 * weeks_ago)
|
||||||
ago_sunday = ago_monday + datetime.timedelta(days=6)
|
ago_sunday = ago_monday + datetime.timedelta(days=6)
|
||||||
ago_date_str = f"{ago_monday.strftime('%Y-%m-%d')} - {ago_sunday.strftime('%Y-%m-%d')}"
|
ago_date_str = f"{ago_monday.strftime('%Y-%m-%d')} - {ago_sunday.strftime('%Y-%m-%d')}"
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'计算预测{date}的前{weeks_ago}周{ago_date_str}最佳模型')
|
f'计算预测{date}的前{weeks_ago}周{ago_date_str}最佳模型')
|
||||||
weektrueprice = true_price[(true_price['ds'] >= date_monday.strftime(
|
weektrueprice = true_price[(true_price['ds'] >= ago_monday.strftime('%Y-%m-%d')) & (true_price['ds'] <= ago_sunday.strftime('%Y-%m-%d'))]['y'].mean()
|
||||||
'%Y-%m-%d')) & (true_price['ds'] <= date)]['y'].mean()
|
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'当周{date_monday.strftime("%Y-%m-%d")}---{date}真实价格的周均价:{weektrueprice}')
|
f'当周{date_monday.strftime("%Y-%m-%d")}---{last_trading_day_str}真实价格的周均价:{weektrueprice}')
|
||||||
|
|
||||||
price = df[['data_date', wd, 'model_id']]
|
price = df[['data_date', wd, 'model_id']]
|
||||||
price = price[(price['data_date'] >= ago_monday) &
|
price = price[(price['data_date'] >= ago_monday) &
|
||||||
(price['data_date'] <= ago_sunday)]
|
(price['data_date'] <= ago_sunday)]
|
||||||
@ -1025,7 +1031,8 @@ def find_best_models(date='', global_config=None):
|
|||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{ago_date_str}预测最准确的模型名称:{best_models[wd]}')
|
f'{ago_date_str}预测最准确的模型名称:{best_models[wd]}')
|
||||||
predictresult = query_predict_result(
|
predictresult = query_predict_result(
|
||||||
date, best_model_id, global_config, wd)
|
last_trading_day_str, best_model_id, global_config, wd)
|
||||||
|
|
||||||
if predictresult:
|
if predictresult:
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
||||||
@ -1039,9 +1046,8 @@ def find_best_models(date='', global_config=None):
|
|||||||
|
|
||||||
elif i in [4, 5, 6, 7]:
|
elif i in [4, 5, 6, 7]:
|
||||||
months_ago = i - 3
|
months_ago = i - 3
|
||||||
current_date_ts = pd.Timestamp(date)
|
|
||||||
last_month_first_day = (
|
last_month_first_day = (
|
||||||
current_date_ts - pd.offsets.MonthBegin(months_ago)).strftime('%Y-%m-%d')
|
last_trading_day - pd.offsets.MonthBegin(months_ago)).strftime('%Y-%m-%d')
|
||||||
last_month_last_day = (pd.Timestamp(
|
last_month_last_day = (pd.Timestamp(
|
||||||
last_month_first_day) + pd.offsets.MonthEnd(0)).strftime('%Y-%m-%d')
|
last_month_first_day) + pd.offsets.MonthEnd(0)).strftime('%Y-%m-%d')
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
@ -1049,7 +1055,7 @@ def find_best_models(date='', global_config=None):
|
|||||||
monthtrueprice = true_price[(true_price['ds'] >= first_day_of_month.strftime(
|
monthtrueprice = true_price[(true_price['ds'] >= first_day_of_month.strftime(
|
||||||
'%Y-%m-%d')) & (true_price['ds'] <= date)]['y'].mean()
|
'%Y-%m-%d')) & (true_price['ds'] <= date)]['y'].mean()
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'当月{first_day_of_month.strftime("%Y-%m-%d")}-{date}真实价格的月均价:{monthtrueprice}')
|
f'当月{first_day_of_month.strftime("%Y-%m-%d")}-{last_trading_day}真实价格的月均价:{monthtrueprice}')
|
||||||
price = df[['data_date', wd, 'model_id']]
|
price = df[['data_date', wd, 'model_id']]
|
||||||
price = price[(price['data_date'] >= last_month_first_day) & (
|
price = price[(price['data_date'] >= last_month_first_day) & (
|
||||||
price['data_date'] <= last_month_last_day)]
|
price['data_date'] <= last_month_last_day)]
|
||||||
@ -1061,7 +1067,7 @@ def find_best_models(date='', global_config=None):
|
|||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'{last_month_first_day}-{last_month_last_day}预测最准确的模型名称:{best_models[wd]}')
|
f'{last_month_first_day}-{last_month_last_day}预测最准确的模型名称:{best_models[wd]}')
|
||||||
predictresult = query_predict_result(
|
predictresult = query_predict_result(
|
||||||
date, best_model_id, global_config, wd)
|
last_trading_day, best_model_id, global_config, wd)
|
||||||
if predictresult:
|
if predictresult:
|
||||||
global_config['logger'].info(
|
global_config['logger'].info(
|
||||||
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
f'最佳模型{best_models[wd]}在{date}预测结果:{predictresult}')
|
||||||
|
@ -557,8 +557,10 @@ if __name__ == '__main__':
|
|||||||
# except Exception as e:
|
# except Exception as e:
|
||||||
# logger.info(f'预测失败:{e}')
|
# logger.info(f'预测失败:{e}')
|
||||||
# continue
|
# continue
|
||||||
global_config['end_time'] = '2025-08-04'
|
global_config['end_time'] = '2025-08-01'
|
||||||
|
global_config['db_mysql'].connect()
|
||||||
predict_main()
|
predict_main()
|
||||||
|
|
||||||
|
# global_config['end_time'] = '2025-08-01'
|
||||||
# push_market_value()
|
# push_market_value()
|
||||||
# sql_inset_predict(global_config)
|
# sql_inset_predict(global_config)
|
||||||
|
Loading…
Reference in New Issue
Block a user