如何使用 Python 创建个人AI 交易系统?

本文描述了一个使用Python和ARIMA模型构建的自动化股票交易系统,通过实时数据抓取、简单预测模型和连接经纪商API实现交易决策,最终部署在AWSLambda上并通过Telegram监控交易情况。
摘要由CSDN通过智能技术生成

几周前,我和一个朋友随意聊天,他说他一直在交易。“如果某只股票上涨超过一个小时左右,而我已经超过了1%的利润门槛,那么我就会卖出,”他说,“这是我一直遵循的个人规则之一”。撇开这些规则中轻微的伪科学方面不谈,我理解了他所说的意思:遵循这些规则意味着检查手机的次数要达到天文数字。

于是我开始想:**有没有可能让这家伙心目中的规则自动化?**实际上,是否有可能自动化一套更理智的规则,所以我让系统为我做交易?

获取一些实时、精细的股票价格数据:理想情况下,每隔一分钟。越富有越好——我们将使用雅虎财经,更多细节将陆续公布。

我们将为系统添加一些人工智能风味,而不是一套个人规则。完全披露:我绝不是时间序列分析方面的专家,那里已经有很多关于如何训练神经网络进行交易的教程,我真的不想在这样的玩具系统中过度设计,所以让我们保持简单:一个非常基本的 ARIMA 模型现在可以了。

在这一点上,我们将获得来自算法的数据和预测,因此我们应该能够决定是卖出、买入还是持有;我们需要与我们的经纪人联系才能实际执行操作。我们将使用 RobinHood 和 Alpaca。

差不多就是这样——系统已经完成了。我们最不需要的就是将其部署在某个地方,在我们的例子中是 AWS,并监控活动。我选择在每次我的系统执行操作时向群组发送 Telegram 消息。

我们需要什么?

  • Python 3.6 和一些库。

  • 具有管理员权限的 AWS 账户,用于存储和部署。

  • Node.js,仅用于设置用于部署的无服务器框架。

  • 一个Telegram帐户,用于监控。

财务回测中的过拟合

事不宜迟,让我们开始第一部分:获取数据。

获取数据

获取数据并不容易。几年前,有一个官方的雅虎财经API,以及像谷歌财经这样的替代品——可悲的是,两者都已经停产多年了。但别担心,市场上仍然有很多替代品。我的个人要求是:

**免费:**对于生产系统,我肯定会将这个要点更改为廉价的替代品,但对于玩具系统或概念验证,无论您想怎么称呼它,我都希望它是免费的。

**高限制率:**理想情况下没有限制,但每分钟超过 500 次点击就足够了。

**实时数据:**某些 API 提供的数据略有延迟,例如 15 分钟。我想要真正的交易——我能得到的最接近股票的实时价格。

**易用性:**再说一遍,这只是一个 POC。我想要最简单的一个。

考虑到这个列表,我选择了旧的雅虎财经 API 的非官方替代品。请记住,对于一个真实的系统,并基于提供的令人敬畏的列表yfinance

帕特里克·柯林斯,我肯定会选择 Alpha Vantage API——但现在让我们保持简单。

该库由 Ran Aroussi 开发,用于在官方 API 关闭时访问雅虎财经数据。引用自 GitHub 存储库,yfinance

自从雅虎财经停用其历史数据API以来,许多依赖它的程序都停止了工作。

yfinance 旨在通过提供一种可靠的、线程化的和 Python 的方式来从雅虎财经下载历史市场数据来解决这个问题。

对我来说已经足够了。它是如何工作的?首先,我们需要安装它:

然后我们可以使用 Ticker 对象访问所有内容:

这种方法非常快,平均略高于 0.005 秒,并返回有关股票的大量信息;例如,包含 123 个字段,包括以下内容:google.info

这些方法中的大多数都返回 DataFrame 对象中的数据,因此我们需要稍微使用它才能获得我们想要的任何内容。现在,我只需要一段时间内的股价信息;该方法是实现此目的的最佳方法。我们可以选择周期或间隔日期,数据频率低至一分钟 - 请注意,只有当周期小于 60 天时才可用,并且每个请求只允许获取 7 天的 1m 粒度数据。间隔为1m的最后一个条目的转置数据如下:dividendssplitsbalance_sheetearningspandashistory

我们可以看到它是如何按日期时间编制索引的,每个条目都有七个特征:该分钟内股价的四个固定点(开盘价、最高价、最低价和收盘价)加上成交量、股息和股票分割。我将只使用低值,所以让我们保留该数据:

最后,由于我们将只使用最后一天的数据,因此让我们重新索引数据帧以删除日期和时区组件,并仅保留时间:

看起来不错!我们已经知道如何从中获取最新信息——我们稍后会用它来为我们的算法提供信息。但为此,我们需要一个算法来喂养:让我们进入下一部分。yfinance

添加 AI

我在这里要做的是拟合一个非常简单的 ARIMA 模型来预测股价的下一个值;把它想象成一个虚拟模型。如果你想用它来做真实的交易,我建议你寻找更好、更强大的模型,但要注意:如果它很容易,每个人都会这样做。

首先,让我们将 DataFrame 拆分为 train 和 test,这样我们就可以使用测试集来验证虚拟模型的结果——我将保留最后 10% 的数据作为测试集:

如果我们绘制它,我们得到:

现在,让我们使用训练数据拟合模型并获取预测。请注意,模型的超参数是固定的,而在现实世界中,您应该使用交叉验证来获得最佳参数——查看这个关于如何使用 Python 网格搜索 ARIMA 超参数的精彩教程。我使用 5、0、1 配置,并在训练数据结束后立即获取该时刻的预测:

让我们看看我们的虚拟模型表现如何:

这还不错——我们可以使用它。有了这些信息,我们可以根据我们想做的任何事情来定义一组规则,比如如果它上涨,就持有,如果它下跌,就卖出。我不打算详细说明这部分,因为我不想让你们起诉我说你失去了所有的钱,所以请继续定义你自己的一套规则。同时,我将解释下一部分:连接到代理。

连接到代理

正如您可能已经猜到的那样,这部分在很大程度上取决于您使用的经纪人。我在这里介绍两个经纪人,RobinHood 和 Alpaca;原因是他们俩:

有一个可用的公共 API(官方或非官方)。

不要收取交易佣金。

根据您的账户类型,您可能会有一些限制:例如,如果您的账户余额低于 3 美元,RobinHood 在 5 天内只允许 25000 笔交易;Alpaca 允许更多的请求,但每个 API 密钥每分钟仍有 200 个请求的限制。

RobinHood

有几个库封装了 RobinHood API,但遗憾的是,据我所知,它们中没有一个是官方的。Sanko 的库是最大的库,在 GitHub 上有 1.5k 颗星,但它已经停产;LichAmnesia’s 延续了 Sanko 的道路,但到目前为止只有 99 颗星。我将使用robin_stocks库,在撰写本文时,该库有 670 多颗星。让我们安装它:

并非所有操作都需要登录,但大多数操作都需要登录,因此在执行任何其他操作之前登录很有用。RobinHood 需要 MFA,因此有必要进行设置:转到您的帐户,打开双因素身份验证,并在询问您要使用的应用程序时选择“其他”。您将看到一个字母数字代码,您将在下面的代码中使用该代码:

买入或卖出非常简单:

查看文档,了解高级用法和示例。

Alpaca

对于 Alpaca,我们将使用该库,该库在 GitHub 中拥有 700 多颗星。要安装:alpaca-trade-api

登录帐户后,您将获得 API 密钥 ID 和密钥;两者都需要登录:

提交订单比使用 RobinHood 稍微复杂一些:

就是这样!请注意,以纯文本形式保留您的凭据是一件非常非常糟糕的事情 - 不过别担心,我们将在下一步切换到环境变量,这要安全得多。现在,让我们将所有内容部署到云中并对其进行监视。

部署和监视

我们将在 AWS Lambda 中部署所有内容。显然,对于生产系统来说,这不是最佳选择,因为 Lambda 没有存储,我们希望将经过训练的模型存储在某个地方,例如在 S3 中。但是,现在就可以了——我们将安排 Lambda 每天运行,每次都使用当天的数据训练模型。出于监控目的,我们将设置一个 Telegram 机器人,该机器人将发送一条消息,其中包含要采取的行动及其结果。请注意,AWS Lambda 在特定限制内是免费的,但请注意配额,以防您想要发送大量消息。

待办事项清单上的第一件事是创建一个机器人。我遵循了 Telegram 的官方指示:

在 Telegram 中搜索用户**@BotFather**。

使用该命令并选择机器人的名称和用户名。\newbot

获取令牌并将其存储在安全的地方,您很快就会需要它。

下一步:部署。有几种方法可以部署到 Lambda。我将使用无服务器框架,因此让我们安装它并创建一个模板:

这将创建一个包含三个文件的文件夹:、 和 。无服务器文件定义部署:运行内容、运行时间和方式。处理程序文件将包含要运行的代码:scheduled_tg_bot.gitignoreserverless.ymlhandler.py

需要更改为希望机器人与之交互的组、频道或对话的 ID。在这里,您可以找到如何从频道获取 ID,以及从组中获取 ID 的方法。CHAT_ID

现在,我们将定义如何运行代码。打开并写入:serverless.yml

此代码告诉 AWS 我们想要的运行时类型,并从我们自己的环境中传播 Telegram 令牌,因此我们不必部署它。之后,我们将 cron 定义为每天 UTC 时间 21:00 运行该函数。

剩下的唯一办法就是获取 AWS 凭证,并在部署之前将它们与令牌和其他变量一起设置为环境变量。获取凭据相当容易:

在 AWS 控制台中:

  • 转到我的安全凭证 — 用户 — 添加用户。

  • 选择用户名,然后选择“编程访问”。

  • 下一页:选择“直接附加现有策略 - AdministratorAccess”。

  • 复制访问密钥 ID 和秘密访问密钥并存储它们。

就是这样。现在,让我们导出 AWS 凭证和 Telegram 令牌。打开终端并写入:

在本地安装必要的软件包,最后将所有内容部署到 AWS:

大功告成!机器人将在每天 UTC 时间 21:00 为我们交易,并向我们发送执行的操作。

希望我的分享对大家有帮助!欢迎加入我们的社区,与同行共成长!

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值