一、概述
公司特定新闻——包括公告、报告、分析师意见和研究成果——对市场情绪以及随后的股价都有影响。新闻评分模块负责新闻采集、分类对股票具有影响力新闻,汇集最近N天内的新闻,确保它能够捕捉到最重要的信息。
二、设计
三、代码
提取每日新闻
def daily_news(self, market_type, stock_list, port, biz_dt):
for i in range(len(stock_list)):
stock = stock_list[i]
code = stock['code']
cn_name = stock['cn_name']
real_market_type = stock['market']
db_agent_name = stock['agent_name']
self._logger.info('start part_daily_news, params code=' + code + ',cn_name=' + cn_name)
if biz_dt is not None:
partition_dt = biz_dt
else:
last_ods_news = self.get_last_ods_news_data(market_type, code)
max_partition_dt = last_ods_news['dt'].split(' ')[0]
partition_dt = max_partition_dt
ods_news_list = self.find_ods_news_content_list_bt_dt(market_type, code, partition_dt)
if len(ods_news_list) == 0:
self._logger.error('query find_ods_news_content_list_bt_dt return empty, params code=' + code + ',cn_name=' + cn_name + ', partition_dt=' + partition_dt)
continue
db_agent_news = self.get_agent_daily_news(real_market_type, code, partition_dt)
if market_type == 'US':
# progress
daily_news_progress = self.get_agent_daily_news_progress(real_market_type, code, partition_dt)
if continue_status == '1':
origin_progress_list = []
if daily_news_progress is not None and daily_news_progress.get('progress') is not None:
origin_progress_list = json.loads(daily_news_progress['progress'])
progress_list = copy.deepcopy(origin_progress_list)
else:
progress_list = []
grouped_list = [ods_news_list[i:i + 1] for i in range(0, len(ods_news_list), 1)]
if len(grouped_list) > 10:
grouped_list = grouped_list[0:10]
prompt = ConstNewsPrompt.daily_news_user_prompt.replace('{{stock}}', code)
pre_prompt = prompt.replace('{{dt}}', partition_dt)
for i in range(len(grouped_list) - 1, -1, -1):
group = grouped_list[i]
key_dt = group[0]['dt']
json_str = json.dumps(group)
prompt = pre_prompt.replace('{{news_data}}', json_str)
output_cont = self.process_prompt_by_api(prompt,
llm_name=db_agent_name, info_list=['gen daily news step', code, key_dt])
if output_cont is None:
self._logger.error('gen daily news data, process_prompt_by_api fail, return None')
continue
item_tuple = [key_dt, output_cont]
progress_list.insert(0, item_tuple)
if len(progress_list) == 0:
self._logger.info('gen daily news data, process_prompt_by_api fail, output_tuple_list len is 0')
continue
# daily news
one_progress_json_str = json.dumps(progress_list, ensure_ascii=False)
prompt = ConstNewsPrompt.one_daily_news_prompt.replace('{{stock}}', code).replace('{{dt}}', partition_dt).replace('{{summary_data_list}}', one_progress_json_str)
one_output_cont = self.process_prompt_by_api(prompt,
llm_name=db_agent_name, info_list=['api daily one news data step', code, cn_name])
if one_output_cont is None:
self._logger.error('gen one daily news data, process_prompt_by_api fail, return None')
continue
record = {'market_type': real_market_type, 'code': code, 'cn_name': cn_name, 'dt': partition_dt, 'progress':one_progress_json_str, 'result': one_output_cont, 'ods_last_dt':ods_last_dt}
self.save_or_update_daily_news(record)
self._logger.info('---finish daily news data,code='+code+',cn_name='+cn_name)
time.sleep(0.5)
self._logger.info('### agent daily news data success')
当前日及历史N天内新闻评分
last_row = self.get_last_agent_daily_news(market_type, code)
partition_dt = last_row['dt']
trade_day_list = self.find_trade_day_limit(market_type, partition_dt, 4)
limt_day_size = len(trade_day_list)
daily_news_list = self.find_agent_daily_news_bt_dt(market_type, code, partition_dt, limt_day_size)
if len(daily_news_list) == 0:
self._logger.error('query daily news data is empty, param code=' + code + ',cn_name=' + cn_name + ', partition_dt=' + partition_dt)
daily_news_last_dt = daily_news_list[0]['ods_last_dt']
db_agent_news = self.get_agent_news(real_market_type, code, partition_dt)
try:
for ele_dict in daily_news_list:
if 'ods_last_dt' in ele_dict:
del ele_dict['ods_last_dt']
start_dt = daily_news_list[-1]['dt']
end_dt = daily_news_list[0]['dt']
json_str = json.dumps(daily_news_list, ensure_ascii=False)
prompt = ConstNewsPrompt.news_result_prompt1.replace('{{stock}}', code).replace('{{dt}}', partition_dt)
prompt = prompt.replace('{{daily_data}}', json_str)
output_cont = self.process_prompt_by_api(prompt,
llm_name=db_agent_name, info_list=['gen news step', code, cn_name])
if output_cont is None:
self._logger.error('gen news result data, process_prompt fail, return None')
except Exception as news_e:
self._logger.error("gpt news error, param code="+code+',exception='+traceback.format_exc())
四、输出结果
以markdown方式输出,以下是转化为html结果。
新闻分析
特大利好:
2024-10-09: 摩根士丹利升级Affirm,强调与苹果的合作。此消息表明苹果在金融科技领域的合作正在扩展,预计将显著提升交易量,对公司的长期收益潜力构成正面影响。
利好:
2024-10-09: 沃伦·巴菲特的3150亿美元投资组合中67%投资于这5只不可阻挡的股票,其中包括苹果。这显示出巴菲特对苹果的强烈信心,可能会增强投资者对苹果股票的信心。
2024-10-09: 伯克希尔·哈撒韦投资组合中的重大AI投资由沃伦·巴菲特强调,其中包括苹果。这表明苹果在AI领域的投资和发展受到重视,预示技术前景的积极发展。
利空:
2024-10-09: 亿万富翁决定出售苹果公司股份。沃伦·巴菲特的伯克希尔·哈撒韦公司出售了价值约800亿美元的一半苹果股份,这可能引发市场对苹果股票的短期卖压。
2024-10-07: Apple Stock Rating Downgraded by Jefferies Due to Overvaluation Concerns。Jefferies将苹果公司的股票评级从“买入”降至“持有”,这可能导致投资者对苹果股票的信心减弱。
中性:
2024-10-08: Nvidia, AMD Lead The Pack, Broadcom Stable, Intel Falters: Analyst's Latest Take。虽然此消息主要关注其他科技公司,但显示了科技行业的整体动态,对苹果公司可能有间接影响。
综合分析
从2024-10-07至2024-10-09的新闻分析来看,苹果公司面临的利好与利空消息相互交织。一方面,沃伦·巴菲特对苹果的大量投资和苹果在金融科技领域的合作预计将对公司未来的增长和股价产生积极影响。另一方面,巴菲特减持苹果股份和Jefferies的评级下调可能短期内对股价产生负面影响。整体而言,利好消息似乎略胜一筹,但市场对于负面消息的反应不容忽视。
新闻面综合评分
综合以上分析,新闻面给予0.150分,此评分反映出虽然存在一定的利空因素,但利好消息的重要性和积极影响在短期内可能对股价有更大的支撑作用。