晶羽科技-解读点评影视小说作品

微信
手机版

Python炒股致富(python炒股机器人)

2022-01-21 06:07 作者:python小白社区 围观:

引子:

什么是动量?

动量是证券价格或数量加速的速度,即价格变化的速度。简而言之,它指的是特定资产价格变动的变化率,通常定义为变化率。在技术分析中,动量被认为是震荡指标,用于帮助确定趋势。

动量交易的基础

投资者可以将动量用作交易技术。一旦动量交易者看到股票价格,收益​​或收入加速增长,交易者通常会在该股票上做多或做空头寸,希望其动量将继续向上或向下。该策略依赖于股票价格的短期变动,而不是基本价值。

当应用时,投资者可以根据资产价格趋势的强度进行买卖。如果交易者想使用基于动量的策略,那么他会在已经上升的股票或资产中持有多头头寸。如果股票下跌,他会做空头寸。动量投资不是传统的交易哲学(低买高卖),而是寻求低卖低买或高买高卖。动量型投资者没有确定延续或反转的模式,而是关注最新价格下跌所创造的趋势。

可以将其视为火车的动力。火车启动时会加速,但移动缓慢。在行程中间,它停止加速,但以更高的速度行进。在旅行结束时,火车由于减速而减速。对于动量投资者而言,火车行驶的最佳部分是在火车以最高速度行驶时的中间位置。

动量投资者喜欢追逐业绩。他们试图通过投资以一种或另一种趋势发展的股票来获得alpha回报。上升趋势的股票称为热门股票。根据一段时间内的增长情况,有些比其他的更热。下跌的股票很冷。

动量工具

动量投资者的一些工具有助于定义趋势,例如趋势线。趋势线是在给定时间段内从高价到低价绘制的线,反之亦然。如果线上升,则趋势上升,动量投资者购买股票。如果趋势线下降,则趋势下降,动量投资者卖出股票。

这样,动量投资纯粹是一种技术指标。尽管“动量”可以指基本的绩效指标,例如收入和收益,但最常用于指代历史资产价格作为技术指标。

动量交易的风险

就像其他任何交易方式一样,动量交易也存在风险。通过使用这种技术,您应该知道自己是在市场上其他人的支持下进行交易,并且永远无法保证价格趋势。并始终为发生意外的撤消或更正做准备。发生这种情况的原因可能是意外消息或市场上投资者情绪的变化。

下面,将要创建的Python交易机器人的基本原理是,在一夜之间买入持有许多不同的股票,并在早上出售它们。(这样的策略旨在捕获有时更容易承受的股票有时会经历的重大隔夜波动。)

在这个例子中,偏爱最近经历增长的股票,也就是那些势头强劲的股票。具体而言,将股票在过去五天内的变化乘以今天的交易量高于昨天的标准差的数量。Python使此操作变得容易,只要写代码,一切都自动化了。利用Alpaca API 的一系列bar对象来获取股票历史数据。进入选股逻辑-对所有股票进行评级后,构成样本投资组合。

这里的“投资组合”参数只是一个浮动金额,其中包含您账户的现金余额。

Python早用早致富:用Python构建美股动量自动交易机器人

美股交易机器人

完整代码

本例使用的运行该策略的工具是Alpaca API和Python SDK。关键代码如下。(完整的Python脚本请关注公众号"Python大大",发送“python股票致富”获取)

import alpaca_trade_api as tradeapiimport pandas as pdimport statisticsimport sysimport timefrom datetime import datetime, timedeltafrom pytz import timezonestocks_to_hold = 150 # 最多200#仅考虑价格在此范围内的股票。max_stock_price = 26min_stock_price = 6# API datetimes will match this format. (-04:00 represents the market's TZ.)api_time_format = '%Y-%m-%dT%H:%M:%S.%f-04:00'#根据交易量与前5天的偏差对股票进行评估,并#动量。返回将股票代码映射到评级和价格的数据框。#注意:如果algo_time为None,则API当前的默认行为#作为`end`将被使用。我们将其用于实时交易。def get_ratings(symbols, algo_time):    .........    return ratings[:stocks_to_hold]def get_shares_to_buy(ratings_df, portfolio):     ...........    return sharesdef backtest(api, days_to_test, portfolio_amount):    ........    return portfolio_amount#进行回测时使用,以了解我们的投资组合本应有多少#值得我们购买之后的一天。def  get_value_of_assets(api,shares_bought,on_date):     ..........    return total_valuedef run_live(api):    .......if __name__ == '__main__':    api = tradeapi.REST()    if len(sys.argv) < 2:        print('Error: please specify a command; either "run" or "backtest <cash balance> <number of days to test>".')    else:        if sys.argv[1] == 'backtest':            # #使用提供的参数运行回测会话            start_value = float(sys.argv[2])            testing_days = int(sys.argv[3])            portfolio_value = backtest(api, testing_days, start_value)            portfolio_change = (portfolio_value - start_value) / start_value            print('Portfolio change: {:.4f}%'.format(portfolio_change*100))        elif sys.argv[1] == 'run':            run_live(api)        else:            print('Error: Unrecognized command ' + sys.argv[1])

要运行它,您需要申请一个免费的Alpaca交易帐户,然后以下命令来安装API库:

pip install alpaca-trade-api

投资组合的性能测试

在构建交易算法时,您可能会遇到的障碍之一就是弄清楚如何测试其性能。历史数据可能很难收集,并且将其集成到代码中可能会造成混淆。这就是为什么你应该考虑创建一种可保持算法回测的初衷。注意:过去的表现并不代表将来的结果。

Python早用早致富:用Python构建美股动量自动交易机器人

投资组合的性能测试

测试设计

就像在软件开发中一样,您应该以构建“ 可测试代码 ” 的思维方式编写交易脚本。如果您不是从策略上编写原始代码,则测试可能要比编写代码花费更长的时间-编写脚本时要考虑回测。

编写影响回测的脚本的关键要素是时间要素。将交易逻辑函数中的时间作为参数,以便您的测试代码可以在需要时“重置时钟”。

获取数据

此示例中的所有数据均由Alpaca API提供。

要查找定价数据,请使用股票的柱形端点和资产端点。

现在,脚本收集了传递到评估代码中的数据,并使用该数据来确定要抓取的数据片段。将能够使用相同的代码进行纸面交易运行的回测。

什么时候测试?

回测将需要一些专门的代码-它需要遍历多天的数据,将其传递到交易逻辑中并跟踪结果。它不会在测试期间实际买卖股票,因此只需要记住每天的数据,然后计算第二天的估计结果即可。

要考虑的另一件事是如何跟踪市场开放的日子-测试市场关闭的一天(例如圣诞节或周末)会发生什么,这对您没有任何好处!为了简化此操作,请使用Alpaca的Calendar API。

运行测试

拥有交易账户后,就可以使用了。转至票据交易仪表板,然后在右侧显示“您的API密钥”的位置查看。

与往常一样,请确保您的API密钥安全!如果您丢失了它们或认为它们可能已受到威胁,则可以随时在仪表板上重新生成它们。

生成API密钥后,您将获得一个如下所示的面板。获取这些键并将它们设置为环境变量,以便您的脚本可以自动连接到Alpaca API。如下设置环境变量:

APCA_API_BASE_URLAPCA_API_KEY_IDAPCA_API_SECRET_KEY

如果需要设置变量的帮助,请转到Alpaca文档中的“操作方法”部分。

现在已经设置了变量,可以添加一个性能指标—例如,您可以将该算法的性能与同一时间段内S&P 500的性能进行比较。(如果购买和持有的表现要好于您的策略,则表明可能想尝试调整一些东西。)

回测完成后,打印出S&P 500的性能视图。

*提醒,这是一个示例,仅用于说明目的。*

设置好环境变量并下载了脚本后,就可以运行以下测试:

python overnight_hold.py backtest 100000 30

该算法将在最近30天内开始运行,并以100,000美元的样本投资组合为起点。看看-它是怎么做的?

Python早用早致富:用Python构建美股动量自动交易机器人

量化测试

根据观察,大部分较大的收益来自将大量投资组合投资到一只股票上,该股票在10月14日的收益非常大。这是一个非常冒险的策略,但是在某些情况下,像这样,它是有回报的。

*请记住,过去的表现并不代表将来的结果。*

在一个月内击败市场并不是一个强有力的信号,表明该算法将继续保持高性能。另外,该算法冒着很大的风险才能实现这些收益。但这是一个开始,并至少提供一个要测量的数字。

实时股票交易

对脚本进行正向测试。它可以每天运行,在模拟交易账户中执行订单。您可以在Alpaca仪表板运行时观看其性能。(您也可以轻松地切换到实时交易:只需将环境变量设置为与真实经纪帐户相关联的变量即可。但是,在实际经纪帐户中尝试之前,请考虑测试书面交易策略以查看其策略以及其工作原理。)

在此示例中,对事物进行了设置,以使算法仅应在市场关闭和打开之前和之后分别每天买卖一次。使用Alpaca Clock API来管理此问题,因为它将处理周末,节假日以及迟开或早关等问题。在算法和指定的API之间,您将能够向Alpaca API发送买卖命令。您可以将其用于纸币交易,或者,如果您有真实经纪人帐户,则可以使用类似于真实交易的方式。

下载脚本并准备运行它后,请使用以下命令:

python overnight_hold.py run

高级注意事项

1.生存偏见

在此示例中,回测是非常少的(它旨在作为更多的切入点)。仅使用测试中当前有效的股票列表(如本例中所示)会导致生存偏差,从而影响您的结果。从Alpaca API检索股票列表时,您只会看到今天列出的股票代码。被退市的股票通常在退出市场之前表现不佳(在不使用股票的情况下回测中产生了“击败市场”的错误感觉)。这就是为什么在上面的示例中,该测试仅进行了30天的测试-当时很少有公司被退市,因此,更改库存清单的影响应降至最低。

考虑到这一点,如果您希望改善测试策略,那么好的第一步将是获取上市股票报价器的历史视图。包括Google在内的许多资源都可以向您显示。

2.速度

您可能已经注意到的另一个问题是测试速度很慢。如果要测试对策略的调整和/或微调参数,则可能需要几分钟才能看到结果。每天下载一次数据,将其保存到磁盘中,然后在运行测试时引用该文件(而不是API),将会更快。

3.其他指标

截至目前,该算法的性能仅与S&P 500进行了比较。但是,回测时您可能还会查看许多其他指标。例如,您可能还希望将亏损与您选择的指数进行比较,或者计算夏普比率,以使您的策略所显示的风险回报率更加清晰。

最后的想法

如果您对回测,建议的调整,问题或对后续文章的要求还有其他想法,请发表评论!

相关文章