现在,让我们创建一个$ 1,000,000的虚拟投资项目,按照我们制定的规则,看看它会如何表现。规则包括:
模拟时,请记住:
这里是回溯检验方式: 我们的投资组合的价值在六年间大约增长了10%。考虑到任何一笔交易仅涉及所有投资总额的10%,这样的表现并不差。 请注意,这个交易策略并不会触发我们的止损指令。难道这意味着我们不需要止损指令吗?要回答这个问题并不简单。毕竟,如果我们选择了另一个不同的股价来判断是否卖出股票,止损指令可能真的会被触发。 止损指令会被自动触发,且不会询问为什么指令被触发。这意味着股价的真实变化与短暂波动都有可能触发止损指令,而后者我们更为关心,因为你不仅要支付订单费用,而且还无法保证以指定的价格卖出股票,这可能会使你的损失更大。同时,你交易股票的走势仍在继续,如果止损指令不被触发,你甚至可以从中获利。也就是说,止损指令能够帮助你保持自己的情绪,继续持有股票,即使它已经失去了自己的价值。如果你无法监控或快速访问你的投资组合,例如在度假时,它们也能发挥作用。 我曾提供了一些关于赞成和不赞成止损指令的链接,但从现在起,我不会要求我们的回溯检验系统来解释它们。虽然不太现实(我相信具有工业强度的系统应该考虑止损规则),但这简化了回溯检验任务。 更为现实的投资组合不会将投资总额的10%押注在一只股票上。更现实的做法是考虑在多只股票上投资。涉及多家公司的多笔交易可能会在任何时刻进行,并且大多数投资项目会选择股票交易,而不是现金。既然我们将在多只股票上投资,只有当移动均线交叉(不是因为止损)时才退出仓位,那么我们需要改变回溯检验的方式。例如,我们将使用pandas中的DataFrame来记录所有考虑到的股票的买卖订单,前面的循环代码也需要记录更多的信息。 我已经编写了为多只股票创建订单数据的函数,以及一个执行回溯检验的函数。 475行×3列 475行×9列 一个更为现实的投资组合投资了十二只(科技)股票,最终的资产增长达到了100%左右。这很好吗?表面上看起来并不糟糕,但我们会看到我们可以做得更好。 基准测试回溯检验只是评估交易策略有效性性的一部分。我们会对策略进行基准测试,或者与其他的可行(通常是众所周知的)策略进行比较,以确定我们所能达到的效果。 当你评估一个交易系统时,有一个策略你一定要与它比较,除了少数互惠基金与投资管理人,这个策略的效果是最好的:买入并持有SPY指数基金。有效市场假说声称,任何人都无法击败市场。因此,投资者应该一直购买反映市场结构的指数基金。SPY指数基金是一种交易所买卖基金(一种在市场上交易的类似股票的互惠基金),其值可以有效地代表了标准普尔500指数中股票的价值。通过买入并持有SPY指数基金,我们实际上可以尝试将回报与市场匹配,而不是去击败它。 以下是我获取的关于SPY的数据,以及简单地买入和持有SPY指数基金获得的收益。 买入和持有SPY指数基金的效果优于我们的交易系统,至少优于我们现在初期的系统,而且,我们甚至没有说明,考虑到费用我们这个更加复杂的策略有多么的昂贵。考虑到机会成本和与主动投资策略相关的费用,我们不应该采用这样的策略。 我们怎样才能提高我们系统的性能呢?对于初学者来说,我们可以尝试投资多样化。我们之前考虑的所有股票都属于科技公司,这意味着如果科技行业表现不佳,我们的投资项目也会受影响。我们可以开发一个能够做空股票或看跌押注的系统,这样,我们就可以利用市场上各个走向。我们还可以寻找一种能够预测股价变化的方法。但是,无论我们做什么,都必须击败这个基准测试;否则,我们的交易系统中始终会存在着机会成本。 还存在着其他的基准测试策略,如果我们的交易系统击败了"买入和持有SPY"这个策略,那么我们可以与这些策略进行比较。这类的交易策略包括:
(我最早在这里知道了这些策略。)普遍的经验仍然成立:对于一个包含大量活跃交易的复杂交易系统,如果一个涉及指数基金且不进行频繁交易的简单策略击败了它,那么不要使用这个复杂系统。实际上,这是一个难以满足的要求。 最后一点,假设你的交易系统确实在回溯检验中击败了所有的基准策略。回溯测试是否能预测未来的表现?不太可能。回溯检验存在着过拟合的倾向,所以,仅仅是回溯检验预测的上涨并不意味着未来会保持上涨。 总结虽然这篇教程以一个令人沮丧的观点结尾,但是请记住,有效市场假说有很多的批判者。我自己的看法是,随着交易变得越来越算法化,击败市场将变得更加困难。也就是说,击败市场仍然是有可能的,尽管互惠基金似乎还做不到(但是请记住,互惠基金表现得如此糟糕的部分原因,是交易所伴随的费用,但这不是指数基金关注的关注点)。 这篇教程非常简短,只涉及一种策略类型:基于移动平均线的交易策略。在实践中存在和使用着许多其他的交易信号。此外,我们并没有深入讨论有关做空股票、货币交易或者股票期权。尤其是股票期权的形式非常丰富,能够提供许多不同的方式来押注股票的走势。你可以在《Python衍生分析:数据分析,模型,仿真,校准与对冲》一书中了解更多关于衍生品(包括股票期权和其他衍生品)的信息,(对于犹他州立大学的学生)这本书可以在犹他州立大学图书馆中找到。 另一个资源(我写这篇教程时参考的文献)是O"Reilly出版的图书《Python金融分析》,也可以在犹他州立大学图书馆中找到。 请记住,我们可能(甚至很常见)在股市中亏钱。同样,我们也很难在其他领域获得像股市那样的回报,任何投资策略都应该谨慎对待投资。这篇教程的目的是介绍评估股票交易与投资的入门知识,我希望大家能够继续探索这些想法。 问题问题1基于移动均线交叉,设计一个本篇教程中描述的交易策略(你不需要考虑止损指令)。挑选至少15只自2010年1月1日就存在的股票。根据所挑选出的股票回溯检验你的策略,并模拟一个投资项目,与SPY指数基金的效果进行对比。 你能够击败市场吗? 问题2实际上,每一笔交易都需要缴纳佣金。了解佣金的收取机制,并修改本文中的backtest()函数,使其能够模拟多种佣金制度(固定费用,投资金额的百分比等)。 此外,我们的均线交叉策略在两条均线交叉时会导致交易信号被触发。我们希望通过以下两种方式之一,确保信号触发机制更加健壮: 当移动均线相差固定金额时,触发交易 当移动均线相差一定数值的(滚动)标准差时,触发交易,标准差根据如下公式定义:
一旦进行了这些修改,重复问题1,此外,还包括一个在模拟投资项目效果时切实可行的佣金方案(可参考某个经纪公司的做法),以及移动均线间相差的能够触发交易信号的固定金额或标准差数值。 问题3我们并没有建立一个能够做空股票的交易系统。做空交易的手段很巧妙,因为做空的损失是无限大的(另一方面,多头仓位**了损失最多为购入资产的总值)。这里可以了解更多关于做空交易的信息。然后可以修改函数backtest()使其支持做空交易。这个函数会怎么决定如何进行做空销售,包括做空多少股份以及在进行其他交易时如何评估做空的股票?我们将这个问题留给你来决定。提示一点,做空股票的份额在函数内部可通过负数表示。 一旦完成了这些,重复问题1,或许还需要使用到问题2实现的功能。 英文原文:https://ntguardian.wordpress.com/2016/09/26/introduction-stock-market-data-python-2/ 本文转载于微信公众号: Python程序员(pythonbuluo),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|