资源行业动态如何用 Python 开发算法交易机器人

如何用 Python 开发算法交易机器人

2020-02-06 | |  121 |   0

原标题:如何用 Python 开发算法交易机器人

来源:AI 研习社          链接:https://www.yanxishe.com/TextTranslation/2285


随着云计算的兴起,免佣金交易api的兴起,使得普通人有可能运行自己的算法交易策略。你只需要一条小”蟒蛇“(python)和一点运气。我将向您展示如何使用Alpaca在Google云平台


(GCP)上运行一个。一如既往,所有代码都可以在我的GitHub页面上找到。



你首先需要的是一些数据。这里有一些免费的数据来源,当然也有花钱的来源。我将使用免费的TD-Ameritrade API。接下来你需要的是一个交易平台,你可以通过API提交无佣金交易。



为此我要用 Alpaca 。  Alpaca  还允许纸面交易(假币),这样我们就可以在野外测试我们的策略,而不会让我们的家庭破产。然后你只需要一种方法来自动运行你的机器人并存储/检索数


据。为此,我们将使用GCP,因为这是我所熟悉的,但是任何云平台(AWS、Azure等)都可以正常工作。


  01.png


你当然需要一个交易策略。这篇文章是关于建立一个框架来运行一个交易策略,所以这里的策略本身并不重要,也不是重点。出于演示目的,我将使用动量策略,在过去125天内寻找动量最大的股票,并每天进行交易。



你不应该盲目地使用这一策略,而不进行彻底的回溯测试。我必须强调的是,别在我这里寻找投资建议,因为你很可能会后悔的。


数据

你首先需要的是一个股票的世界。我会用纽约证交所上市的所有股票。为了得到这些股票的符号,我们将从eoddata.com上获取它们。然后我们可以从TD-Ameritrade API请求这些股票符号的数据。


一旦我们有了数据,我们将把它存储在一个BigQuery(BQ)表中,这样我们可以在以后的策略中得到它。这一切都将运行在一个云函数中,然后我们可以安排在每个工作日市场收盘后运行,以获得最新收盘价。


我将API凭证存储在云存储上的文本文件中,因此它们不是硬编码的。我们只是通过一个API调用从那里检索它们。然后我们得到日期来检查市场是否开放。然后我们刮去纽约证交所股票的符号,并将它们传递给TD-Ameritrade API以获取当天的数据。

02.png

  然后我们通过API将这些数据存储在BQ表中,以便稍后用于我们的bot。

03.png

我只使用了收盘价,但是API返回的数据要多得多,所以最好全部存储。我创建了一个名为“equity_data”的数据集,该表将被称为“daily_quote_data”。如果表不存在(即,第一次这样做),表将被创建,然后每天,新的数据将被追加到该表。


1580961661200897.png


在GCP中,可以使用此脚本创建一个云函数。若要将此云函数安排在设置的时间运行,只需为触发器选项选择“Cloud Pub/Sub”并创建一个主题。

05.png

然后转到Cloud Scheduler并设置主题以在需要时运行。在这里,我们将它设置为每个工作日东部下午5点运行。频率以unix cron格式设置。有效负载只是一条将被发送的消息,可以是您想要的任何内容,但它是必需的。

06.png

将cloud函数的超时设置为540s的最大值也是一个好主意,这样可以避免超时。这可以在高级选项部分找到。

07.png


这将下载数据,但我们也需要回数据的交易机器人。我在这里使用的端点是'quotes'端点,它不提供历史数据。要获取历史价格数据,必须使用“pricehistory”端点。我在GitHub文件夹中提供了一个名为“get_historical_data.py”的文件。您可以在本地运行该文件,然后将数据帧下载到csv并将其上载到BQ表。


交易机器人


最基本的,交易机器人需要能够达到以下几点:


知道我们有多少钱可以用来交易

获取用于决策的数据

根据决策选择我们想要的股票

买入/卖出股票来更新我们的投资组合

整个云函数比较长,所以我在这里总结一下,可以在我的GitHub上查看完整代码。 如我所提过的,策略在这里并不重要,我使用的是一个简单的动量策略:选择过去125天里动量最大的10只股票。 


首先我们从BQ API中下载历史数据到动量策略的数据结构中:  

08.png

然后我们从Alpaca API中获得当前的仓位和当前的投资组合价值。  他们有一个API包装器,代码中也在使用。认证信息也存储在云存储的文本文件中。需要注意的是,我们使用的基准网址是


用于纸面交易的。你可以在你的文件交易账户中设置任何金额,这里我设置为1万美元。很明显,如果这是你第一次运行,你不会在 Alpaca有任何仓位,所以在你运行云函数之前,先在本地


运行脚本以获取根据你选择的动量股票而得到的初始投资组合。然后发送给 Alpaca API去买股票。我假设你们已经完成这些了。 

09.png

现在我们有了历史数据和需要交易的金额,我们可以根据我们的策略来选择股票。第一步就是找出动量最大的股票。  

10.png

动量计算是从我推荐的Andreas F.Clenow的账面交易演变而来的。它很容易理解,并且有很多不同类型的策略的不同代码示例。


它的工作方式是计算过去125天内每只股票的收盘价对数的线性回归(最小天数是40天)。下一步是更容易与之建立联系。它取回归线斜率的指数(告诉你每天上升或下降的百分比),然后将


其年化(提高到252的幂,即一年中的交易日数)并乘以100。然后乘以r的平方值,这将给解释方差的模型赋予权重。


在我们确定了动量得分最高的前10只股票之后,我们需要决定我们将购买每只股票的数量。投资组合分配本身就是一个完整的主题,所以我不会在这里讨论它,因为它并不重要。为了在这里分配,我使用了pyportfolioopt库。


11.png

  我们现在有一个df,里面有我们想买的股票和数量。现在我们需要根据我们目前的投资组合来确定是否需要出售任何股票。可能是:


我们今天对动量股的选择和配置与昨天完全相同,我们不需要做任何买卖

我们目前的投资组合中有一些股票我们根本不想再持有了

我们今天想买的股票和我们现在持有的一样,但是我们想持有的数量已经改变了(增加或减少)

我们今天想买的一些新股,昨天不在我们的投资组合中

我们需要检查所有这些东西,并做任何必要的销售或购买。首先,我们会检查我们目前的投资组合中是否有我们不再需要的股票。

12.png

现在,我们有了一个数据框,其中包含我们要出售的任何股票和需要出售的数量。 接下来,我们将检查我们当前拥有的任何库存数量是否减少了。 再次,从技术上讲这里可能没有变化,因此我们需要检查是否有变化。 这将为我们提供一个包含所有需要出售股票的最终数据框架。

13.png


现在我们有了待售股票的完整列表(如果有),我们可以将其发送到羊驼API进行订单。


14.png

最后,我们需要查看当前是否有数量增加的新库存,或者是否有今天要购买的昨天没有的新库存。

15.png

如果有需要购买的商品,我们会将这些订单发送到API。

16.png


完成后,最好记录下投资组合。 Alpaca只允许您拥有一个纸面交易帐户,因此,如果您要运行多种算法(应该运行),则应创建一个日志,以便可以自己跟踪它们。 我们可以创建一个策略列,以从其他策略中识别该策略。 然后,我们可以简单地将其添加到另一个BQ表中。

17.png

18.png


下面的SQL查询将为您提供每日总计以及与投资组合的前一天相比变化的百分比。

19.png

那是机器人。 现在,您可以安排它每天在云功能中运行。 这应该为您提供一个运行自己的交易策略的良好框架。


20.png

Frank Busch在Unsplash上拍摄的照片

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:NAS 新方法:用 Petridish 自动搜索最佳神经网络结构

下一篇:智能音箱是怎么察觉你情绪的?

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...