用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现及相关经济分析

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

关键词:大型语言模型(Large Language Models, LLMs)、A股市场、新闻评分、股票收益、有效市场假说

引言

近年来,机器学习人工智能的迅速发展对各个领域产生了深远影响,特别是在金融市场,数据挖掘神经网络专家系统等算法在金融安全、风险管理等方面取得了巨大进展。自然语言处理(Natural Language Processing, NLP)领域的发展尤为迅速,大型语言模型(Large Language Models, LLMs)在各个领域展示了强大的能力和潜在应用。

在此背景下,本文利用LLMs对2022年11月至2023年10月的新闻简报进行分析,评估新闻对中国A股市场中股票价格的影响。借鉴Lopez-Lira和Tang(2023)的方法,我们对股票进行每日新闻评分,计算评分与股票收益之间的相关性,并基于这些评分进行回测。此外,我们比较了不同的新闻来源,将新闻分为基本面新闻市场新闻,并分别计算相关性和回测策略。我们还分析了有效市场假说在A股市场的有效性。

此外,我们比较了ChatGPT、通义千问和百川智能给出的答案,通过回测评估它们的股票预测能力。最后,我们比较了仅做多和仅做空策略的结果,揭示了市场对负面新闻更加敏感。

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

数据

我们使用来自两个不同来源的历史新闻数据:新浪财经的股票板块新闻标题和金十数据的新闻快讯。

新浪财经

新浪财经根据各上市公司分类了历史新闻。我们爬取了2023年4月至2023年9月期间沪深300指数成份股的新闻标题,共收集了13,076条新闻。

提示词

忘记你之前的所有指令。假装你是
一位金融专家。你是一位具有股票
推荐经验的金融专家。以下这个新闻
标题,对于***短期的股价影响是正
面还是负面?请回答“正面”或者“负
面”或者“不确定”。
*********(新闻标题)

金十数据

相比之下,金十数据包括了更全面的新闻,涵盖财经、经济、国内外政治、政策等。我们爬取了2022年11月至2023年9月的新闻快讯,共约31万条。经过处理,我们匹配到涉及A股市场全部上市公司的37,162条相关快讯,涉及4,091家公司,作为本文的主要数据来源。

提示词

忘记你之前的所有指令。假装你
是一位金融专家。你是一位具有股
票推荐经验的金融专家。下面{}中的
新闻,对于***短期的股价影响是正

面还是负面?只回答“正面”或者“负面”或者“不确定”。
{*********}(新闻快讯)

模型比较

我们在研究中使用了三个大型语言模型:ChatGPT-3.5通义千问百川智能。以下通过两个示例来说明这些模型的能力。

示例1

提示词

忘记你之前的所有指令。假装你是
一位金融专家。你是一位具有股
票推荐经验的金融专家。下面{}中
的新闻,对于上海钢联短期的股价
影响是正面还是负面?在一行回答“
正面”或者“负面”或者“不确定”,并
在第二行给出简短说
明。{上海钢联发布的数据显示,
今日部分锂电材料报价下跌,电池
级碳酸锂跌2500元/吨,均价报58万
元/吨,工业级碳酸锂跌2500元/吨,
均价报56.5万元/吨。}

ChatGPT

不确定。
这则新闻提到了上海钢联发布的锂电材
料报价下跌,但没有提供足够的信
息来明确判断对上海钢联短期股价的
正面或负面影响。影响股价的因素可能
包括市场预期、需求和供应情况等,
需要更多背景信息来做出准确的判断。

通义千问

负面。
上海钢联发布的数据显示,今日部分
锂电材料报价下跌,这可能会对上海钢联
的股价产生负面影响,因为上海钢
联的主要业务之一是锂电材料的生产和
销售。此外,碳酸锂价格的下跌可能会
导致上海钢联的盈利能力下降,从而影响其股价。

百川智能

负面。
这个新闻对上海钢联的短期股价是负面的,
因为锂电材料的下跌可能会影响到
公司的业绩和股价表现。

分析

上海钢联主要提供钢铁信息服务,逐渐扩展到其他大宗商品的数据服务。而上述新闻实际上是上海钢联发布的锂电材料价格信息,并未涉及公司自身的具体信息。可以看到,ChatGPT给出了“不确定”的答案,而通义千问和百川智能错误地将锂电材料价格下跌与上海钢联的业绩直接联系起来。

示例2

提示词

忘记你之前的所有指令。假装你是一位
金融专家。判断以下新闻是关于股票行情的吗?
华东医药:子公司HDM1002片临床试验申请获批

ChatGPT

否。

通义千问

是。

百川智能

是。

分析

ChatGPT再次给出了正确的答案,而百川智能和通义千问未能给出预期的回答。在后续研究中,我们使用ChatGPT来区分基本面新闻和市场(股价相关)新闻。


相关性分析

ChatGPT新闻评分

我们利用相关性分析验证LLMs对新闻的评估是否与对应股票的实际走势一致。具体而言,我们定义股票  在交易日前的新闻评分 

  • ? 将ChatGPT的回答映射为数值:正面为1,不确定为0,负面为-1。

  • ? 如果一家公司在同一天有多条新闻,取平均值。

  • ? 对于非连续交易日,新闻评分计算为多日平均。

因此,我们有:

股票日收益

股票收益的计算分为两种情况:

  1. 1. 如果新闻在交易日的开盘时间(9:30-15:00)发布,则对应的股票收益为:

其中, 为当天收盘价, 为下一交易日收盘价。

  1. 1. 如果新闻在非开盘时间发布,则对应的股票收益为:

其中, 为下一交易日开盘价。

不同回答的统计

在ChatGPT的73,726个回答中,共有34,284个正面回答(46.5%),11,177个负面回答(15.2%)。我们计算有好消息和坏消息的股票的平均收益:

评分
评分

可以看到,有坏消息的股票平均下跌幅度明显大于有好消息的股票平均上涨幅度。

相关系数

我们使用皮尔逊相关系数计算ChatGPT新闻评分序列  与股票日收益  之间的相关性:

对于新浪财经的新闻数据,我们得到:

对于金十数据的新闻数据,我们得到:

分析

尽管两个新闻数据源在时间跨度、公司数量、新闻类型和数量上存在显著差异,但统计得到的相关性非常接近。这表明新闻与股票价格之间存在普遍的相关性,不受不同金融体系、媒体环境甚至不同时间段的影响。


有效市场假说

有效市场假说(Efficient Market Hypothesis, EMH)认为,在一个有效的证券市场中,价格完全反映所有可获得的信息。EMH有三种形式:

  1. 1. 弱式有效市场:市场价格已经完全反映了证券的所有历史信息。

  2. 2. 半强式有效市场:价格完全反映了公司运营前景的所有公开可得信息。

  3. 3. 强式有效市场:价格完全反映了公司运营的所有信息,包括公开和未公开的内部信息。

新闻分类

我们使用ChatGPT将金十数据的历史新闻分为基本面新闻市场新闻

提示词

忘记你之前的所有指令。假装你是一位金融专家。下面{}中的新闻中,关于的部分是股价新闻还是基本面新闻?只回答“股价”或者“基本面”。{***}(新闻快讯)

示例1

【行情】午后中字头个股继续大幅走强,
中铁装配20CM涨停,中国交建、中国中冶、
中国联通、中钢国际等多只个股涨停.

ChatGPT:

股价

示例2

【比亚迪纯电动巴士获挪威大单】
近日,比亚迪与北欧最大公交运营商
Nobina签订64台大巴订单,这批车辆
计划于2023年第二季度交付,在挪威
Nedre Glomma地区投入运营。

ChatGPT:

基本面

相关性检验

我们对分类后的新闻进行相关性分析,分别计算基本面新闻和市场新闻的相关性。

相关系数结果

模型 基本面新闻 市场新闻
ChatGPT -0.0116 0.0350
通义千问 -0.0068 0.0378
百川智能 -0.0145 0.0124

分析

我们发现市场新闻与股价的相关性显著高于基本面新闻。这表明在A股市场,公司特定的基本面新闻对股票价格的影响较小,股票价格更可能受到宏观经济和政策因素的影响。

此外,市场新闻的正相关性表明A股市场存在趋势延续的现象,即上涨趋势可能继续上涨,下跌趋势可能继续下跌。

根据以上分析,我们可以得出结论,在短期内,A股市场不符合弱式有效市场假说。


股票投资策略

我们可以基于LLMs对新闻的评分设计交易策略,直观地了解不同新闻类型与资产价格之间的关系。

交易策略

  1. 1. 盘前策略:在每个交易日开盘前,汇总前一交易日收盘后发布的所有新闻。对于有新闻且没有持仓的股票,计算LLM给出的平均评分。根据平均评分决定投资方向:评分大于0,开盘买入;评分小于0,开盘卖出;评分等于0,不交易。当日收盘平仓。

  2. 2. 盘后策略:在每个交易日收盘前,汇总当日开盘后发布的所有新闻。对于有新闻的股票,计算LLM给出的平均评分。根据平均评分决定投资方向:评分大于0,收盘买入;评分小于0,收盘卖出;评分等于0,不交易。下一交易日收盘平仓。

持仓:采用等权策略,资金(1元)在当天有新闻的所有股票中平均分配。

基于ChatGPT的策略表现

我们首先考察基于ChatGPT新闻评分的策略表现,对仅做多、仅做空和多空结合的情形进行统计,并与上证指数进行比较。

未分类新闻的回测结果

分析

  • ? 仅做多策略在11个月内取得了6.5%的收益。

  • ? 仅做空策略获得了83.9%的收益。

  • ? 相比上证指数的1.2%增长,基于ChatGPT新闻评分的策略取得了显著的超额收益。

基于不同新闻类型的策略表现

基本面新闻

  • ? 仅做多策略最终亏损8.1%。

  • ? 仅做空策略亏损0.27%。

市场新闻

  • ? 仅做多策略取得了20.6%的最终收益。

  • ? 仅做空策略取得了123.2%的最终收益。

模型比较

我们比较了ChatGPT、通义千问和百川智能的策略表现。

收益统计

策略类型 ChatGPT 通义千问 百川智能
全部新闻(仅做多) 6.5% 5.9% 5.6%
全部新闻(仅做空) 83.9% 43.6% 36.4%
基本面新闻(仅做多) -8.1% -11.8% -30.9%
基本面新闻(仅做空) -0.3% 3.5% 27.9%
市场新闻(仅做多) 20.6% 16.6% 46.1%
市场新闻(仅做空) 123.2% 93.2% 11.6%

分析

  • ? 整体表现为ChatGPT > 通义千问 > 百川智能。

  • ? 不同新闻类型的表现为市场新闻 > 全部新闻 > 基本面新闻。

  • ? 持仓限制的整体表现为仅做空 > 多空结合 > 仅做多。


结论

通过相关性分析和回测,我们得出以下结论:

  • 数据来源:不同数据源、时间段和金融市场下,新闻与股票价格的相关性约为0.02,表明二者存在普遍的相关性。

  • 新闻类型:市场新闻与股票价格的相关性显著高于基本面新闻,且基于市场新闻的策略表现更好。

  • 模型表现:ChatGPT在新闻评估和策略表现上优于通义千问和百川智能。

  • 多空策略:仅做空策略表现优于仅做多策略,表明市场对负面新闻更加敏感。


代码示例

数据预处理部分代码示例

备注:完整代码论文复现请加入知识星球获取。

import pandas as pd

# 读取新闻数据
news_data = pd.read_csv('news_data.csv')

# 读取股票价格数据
price_data = pd.read_csv('price_data.csv')

# 合并数据
merged_data = pd.merge(news_data, price_data, on=['stock_id''date'])

# 计算新闻评分
def map_score(answer):
    if answer == '正面':
        return 1
    elif answer == '负面':
        return -1
    else:
        return 0

merged_data['score'] = merged_data['llm_answer'].apply(map_score)

相关性计算部分代码示例

备注:完整代码论文复现请加入知识星球获取。

import numpy as np

# 计算相关系数
epsilon = merged_data['score']
r = merged_data['stock_return']

rho = np.corrcoef(epsilon, r)[01]
print(f"相关系数 rho = {rho}")

回测策略部分代码示例

备注:完整代码论文复现请加入知识星球获取。

# 定义交易策略
def trading_strategy(data):
    positions = []
    for index, row in data.iterrows():
        if row['score'] > 0:
            positions.append({'date': row['date'], 'stock_id': row['stock_id'], 'position''long'})
        elif row['score'] < 0:
            positions.append({'date': row['date'], 'stock_id': row['stock_id'], 'position''short'})
    return pd.DataFrame(positions)

positions = trading_strategy(merged_data)

模型比较部分代码示例

备注:完整代码论文复现请加入知识星球获取。

# 比较不同模型的策略表现
models = ['ChatGPT''通义千问''百川智能']
results = []

for model in models:
    model_data = merged_data[merged_data['model'] == model]
    # 计算收益
    model_return = model_data['strategy_return'].sum()
    results.append({'model': model, 'return': model_return})

results_df = pd.DataFrame(results)
print(results_df)

如果您对本文或相关研究有任何疑问或兴趣,欢迎留言讨论!

希望本篇文章能为大家带来AI+Quant的启发,欢迎加入LLMQuant社区获得更加成熟交流和探讨!

?? 每天2元,加入知识星球你将获得:

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

?? 体系化知识整理

我们用心分享知识,提供由浅入深的体系化资料。

?? 内容

深度论文+完整代码复现|交易策略学习 |入门资料|进阶资料|衍生品资料|顶级名校量化笔记 |投资精选新闻|量化前沿趋势|优质好书|人物专访 |量化大礼包

?? 策略详解:

获取量化策略模型完整代码,支持多平台回测,提升你的实战能力。

? 免费答疑:

来自剑桥大学,对冲基金在职研究员每日解答社区成员问题,高效提升你的知识水平。

用AI根据新闻做投资决策?基于大语言模型新闻评分的投资组合表现|附代码

欢迎加入我们的知识星球,和全球精英一起探索人工智能与量化金融的无限可能!???

  文章内容来自于网络,由百合树AI整理,如有侵权,联系删除。如需开始AI写作请返回主页。

上一篇:

下一篇:

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注