AI驱动的新闻交易机器人
在这篇博客中,我会向你们展示我在创建一个基于新闻的交易机器人时的思考过程。我会展示我是如何构建它的,并提供代码。

一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | AVAX | FTM | OK
对于任何提问的人,我总是说ProfitView的一大特点是它的灵活性。它是一个算法交易平台,但你可以用它做任何你想做的事情。你可以构建任何你想要的东西。你可以自动化任何你想要的东西。你可以用它来做任何你想要的事情。
为了展示这种灵活性,我决定构建一个基于新闻的交易机器人。它必须简单易懂,同时具有吸引力。它必须能够被开发成一个复杂的交易策略。
在这篇博客中,我会向你们展示我在创建这个机器人时的思考过程。我会展示我是如何构建它的,并提供代码。你可以把它作为你自己更严肃的新闻机器人的模板。
我将展示的系统只是一个起点,但它可以实时读取新闻并生成可以赚钱的交易信号——所有这些都不到25行代码。
1、思考问题
在确定具体的实现之前,我想探索新闻来源和分析方法的选择。这个过程和结果同样重要,值得分享我是如何找到一个简单的可行解决方案的。
我希望这个机器人能够预测普通交易者对某种特定加密货币的方向和情绪强度,就像他们在即将进行交易时所感受到的一样。毫无疑问,他们阅读的新闻会对他们的决策产生强烈影响。我需要一个定量的衡量标准来反映这种感觉。我希望它是简单的,这样可以快速部署。它还需要运行得快,以便实现实时应用。我还希望它是免费的(或非常便宜的)。
2、评估新闻来源
对于基于新闻分析的交易机器人来说,第一个挑战是找到一个可靠且及时的新闻来源。以下是我的探索:
2.1 抓取Google新闻
我的第一个想法是使用Google新闻。其算法符合我的目标:Google会跟踪人们正在关注的内容,并推送最相关的新闻。
然而,直接抓取它带来了挑战:
- 动态内容:Google新闻的文章是通过JavaScript动态加载的,需要使用像Selenium或Playwright这样的工具。使用它们会变得复杂且缓慢。
- 速率限制:频繁抓取可能会触发CAPTCHA或被封禁。
- 开销:管理无头浏览器引入了复杂性。
2.2 新闻API
接下来,我探索了结构化的新闻API,例如:
- NewsAPI.org:提供基于关键词的查询,但免费使用有严格限制,付费计划价格昂贵。
- GDELT API:免费且全面,但在尝试使用时我发现它没有返回任何结果。可能是请求过载?
2.3 RSS Feed
我记得存在RSS Feed。然后我想到Google新闻本身也有RSS Feed。这应该能给我一个一致、免费且完全合法的新闻来源。我发现了一个简单的Python库——feedparser——来解析RSS Feed。这似乎是一个很好的解决方案——至少目前是这样。
3、确定情感
有了新闻来源后,下一步是找到一个量化交易方向和强度的方法。我所寻找的是所谓的“情感”。我的目标是运行一个交易机器人——当然使用我们的产品ProfitView。Position类型的机器人似乎是最合适的。它接受一个介于-1.0到1.0之间的数字,并根据这个数字来决定交易的大小和方向。-1.0表示强烈的卖出,0.0表示中立,1.0表示强烈的买入。
我的第一个想法是使用LLM——我订阅了OpenAI。其“mini”模型看起来很合适,因为它们是为此类任务设计的:快速重复分析短文本。但我认为我也应该看看专门的情感分析系统。
我尝试了VADER情感分析和TextBlob库。最初我很受鼓舞。VADER非常快,默认输出是一个介于-1.0到1.0之间的分数。TextBlob也很快。但是它们的机制在没有上下文的情况下评分。查看一些结果时,我发现有些语言合理地被解释为负面,但在比特币的背景下实际上是正面的。
例如,查看以下标题:
标题 | VADER | TextBlob | GPT |
---|---|---|---|
微软股东将投票表决是否投资比特币提案 | 0.0 | 0.0 | 0.7 |
比特币上涨的背后有一个简单的事实:供应有限 | -0.23 | -0.16 | 1.0 |
持有比特币的ETF现在成为加密货币的最大持有者,超过了创造者中本聪 | 0.0 | 0.0 | 0.7 |
萨尔瓦多缩减比特币梦想以达成13亿美元IMF协议 | 0.402 | 0.0 | -0.7 |
微软投票显然是比特币的机会。然而,VADER和TextBlob都将其解读为中立。供应有限对比特币来说是积极的,但VADER和TextBlob将其解读为负面。同样,ETF的大规模增持是积极的,而萨尔瓦多缩减比特币计划以达成IMF协议显然是负面的。在这种情况下,VADER和TextBlob无法理解上下文并得出错误结论。
尽管如此,使用OpenAI也有一些困难。它不是免费的。使用最新的迷你模型每百万个标记的成本仅为几分钱,这并不算坏。但它相对较慢。我的折衷方案是将标题合并成一个字符串并发送给模型。这种方法虽然稍微不那么准确,但速度快且成本低。
4、部署机器人
我们使用ProfitView来部署和运行机器人。你可以通过这个链接自行注册,这使得部署和管理变得容易。这是代码——也可以在GitHub上找到:
from profitview import Link, logger, cron
from openai import OpenAI
from dotenv import load_dotenv
import feedparser
import os
load_dotenv()
class Signals(Link):
OPENAI_CLIENT = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
@cron.run(on='1m')
def check_news(self):
self.signal('bitmex', 'XBTUSD', size=self.predict('Bitcoin'))
def predict(self, coin):
feed = feedparser.parse(
f"https://news.google.com/rss/search?q={coin}&tbs=qdr:h")
google_feed_query = f"""
评估这些新闻标题,它们与加密货币{coin}相关,请考虑其发布日期和时间以确保相关性。提供一个介于-1.0和1.0之间的浮点数,-1.0表示极端负面,0.0表示中立,1.0表示极端正面。
提供仅数字,不要附加其他文字。
"""
google_feed_query += "".join([
f"""发布时间: {entry.published}. 标题: {entry.title}
""" for entry in feed.entries])
response = self.OPENAI_CLIENT.chat.completions.create(
model = "gpt-4o-mini",
response_format={ "type": "text"},
messages=[{"role": "system",
"content": "你是一名加密货币交易专家。"},
{"role": "user", "content": google_feed_query}])
prediction = float(response.choices[0].message.content)
logger.info(f"{prediction=}")
return prediction
由于使用了额外的库,有必要注册一个ProfitView 活跃交易员账户。有了这个账户,你可以通过SSH进入你的容器并使用pip install
安装这些库(如feedparser
和openai
)。我还使用dotenv
从环境中加载OpenAI API密钥。
这个机器人现在已经可以在BitMEX上使用——你可以通过这个链接使用它。这可能需要你被列入白名单。如果你想尝试,请发送电子邮件至support@bitmex.com。
5、使用机器人进行交易
部署后,机器人立即开始抓取新闻、分析情感并执行交易。表现如何?在正常情况下,它能有效跟随新闻趋势,并倾向于保持正向PnL。然而,在出现重大新闻(如萨尔瓦多意外寻求IMF贷款)时,它对情绪变化的反应太慢。因此,在部署时设置止损(以及可能的止盈)非常重要。

在BitMEX上部署时,止损可以在机器人配置中设置。

尽管这个版本只是一个起点,但它展示了自动化的新闻驱动交易信号的强大功能。
6、总结与未来计划
我学到了什么?
- 从简单开始: 自动化交易不需要复杂的基础设施。有时,最小化的解决方案就能很好地工作。
- 快速迭代: 通过测试不同的新闻来源和情感模型,我可以快速识别哪些有效并丢弃无效的部分。
- AI的优势: OpenAI的GPT模型在理解微妙情感方面表现出色,使其非常适合此应用场景。
接下来做什么?
为了改进这个机器人,我计划:
- 回测:通过回顾历史比特币价格与当时的新闻情感,验证这种方法的有效性并测试变体。
- 校准:应该有可能基于历史数据训练模型以提高准确性。
- 更多新闻来源:不仅仅依赖Google新闻,我将添加更多的新闻来源和更具体的加密金融来源。
- 更好的情感分析:LLMs表现良好,但仍有改进的空间。他们可以被应用的方式。我将尝试更复杂的 sentiment 分析。
- 与其他交易机器人集成:结合基于新闻的信号与其他交易机器人应该能提高结果。
你可以在这个GitHub 仓库中探索完整的项目,包括我的 Jupyter 笔记本实验。
这个项目证明了人工智能和自动化对交易员来说变得多么容易获得。用不到 25 行代码,我们就把实时新闻变成了可操作的交易信号。虽然这只是个开始,但它为更高级的策略和见解打开了大门。
让我们一起塑造交易的未来。
原文链接:What I Learned When Building an AI News Trading Bot
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。