除了陷阱之外,了解回测器通常由四个基本组成部分组成是很有帮助的。它们通常情况下都会出现于回测器中。因此,一个回测器包括以下内容: 作为一组数据的接口的数据处理程序 一个根据数据生成做多或者做空信号的策略 一个生成订单并管理损益(也成为“PnL”)的投资组合 一个执行处理程序,它将订单发送给经纪人并收到“挂单”或者股票已经被购买或者出售的信号 除了这四个组成部分之外,还有更多你可以添加到你的回测器中,这取决于策略的复杂性。你完全可以不局限于这四个组成部分。但是,在这个初学者教程中,你只需要关注将这些基本的组成部分在代码中运行。 如上所述,一个回测器由一个策略、一个数据处理程序,一个投资组合和一个执行处理程序组成。你已经实现了上述策略,并且你也有了可以访问数据处理程序的入口. 通过运用pandas-datareader 或者Pandas库将保存在Excel里面的数据导入到Python。接下来需要执行的组件则是执行处理程序和投资组合。 但是,由于你刚刚开始,你不会专注于实现执行处理程序。取而代之的是,你将在下面看到如何开始创建一个可以生产订单并管理损益的投资组合: 首先,你将创建一个initial_capital 变量来设置初始资本值和新的DataFrame positions。你再一次地从另外的DataFrame复制索引(index)。在此处,是signals DataFrame。因为你想要考虑生成信号的时间范围。 接下来,你在DataFrame中创建了一个名为AAPL的新列。在信号为1的时候,短移动平均线跨越长移动平均线(大于最短移动平均窗口),你将购买100股。信号为0的时候,由于操作100*signals['signal']的结果,最终结果将为0。 创建一个新的DataFrame portfolio 来存储敞口仓位的市值。 接下来,你创建一个DataFrame来储存仓位(股票数量)的差异 然后真正的回溯测试开始:你创建了一个名为holdings的新列到portfolio DataFrame里。用来储存你购买的仓位或者你购买的股数乘以调整后的收盘价(‘Adj Close’ price)。 你的portfolio还包含了一个cash列,这是你剩下可以花费的资金: 它是通过你的初始资金减去持有量(你用于购买股票的钱)计算的。 你还将在portfolio DataFrame中添加一个total列,其中包含你的现金和你股票拥有价值之和 最后,你还将添加一个returns列到你的投资组合里,你将在其中储存回报收益。 代码可以在这里被找到。 作为你的回溯测试的最后一个练习,通过Matplotlib的帮助可视化投资组合的价值或者显示多年来的portfolio['total'] 和你回溯测试的结果: 在这里找到代码。 请注意,对于本教程,回测器的Pandas代码以及交易策略以你可以轻松地用交互式来浏览的方式组成。在现实生活的应用程序中,你可能会选择一个包含类并更加面向对象的设计,其中包含所有的逻辑。你可以在这里找到带有面向设计的与移动平均交叉策略相同的示例或者查看此演示文稿。 你现在看到如何用Python流行的数据操作包Pandas来实现一个回溯测试器。但是,你也可以看到,很容易犯错,而且这可能不是每次使用最万无一失的选项:因为你需要从头开始构建大部分组成部分,即使你已经利用Pandas来获取结果。 这就是为什么使用一个回溯测试平台是很常见的,例如为你的回溯器选择Quantopian。Quantopian是一个免费的,以社区为中心,用于建立和执行交易策略的托管平台。它由一个名为zipline用于算法交易的Python库支持。你可以在本地调用库,但为了这个初学者教程的目的,你将用Quantopian来编译和回测你的算法。在你进行此操作之前,请确保你首先进行注册了并登录。 接下来,你可以很简单地开始。点击“新算法”(New Algorithm)来开始编写你的交易算法,或选择一个已经被编码的例子,让你更好地了解你正在处理的事情 :) 让我们从简单开始并制作一个新的算法,但仍然遵循移动平均交叉的简单示例,这是你能在ziplineQuickstart guides中找到的标准示例。碰巧这个例子与上一节中实现的简单交易策略非常相似。但是,atv,你看到的下面代码块中以及上面截图中的结构与本教程中迄今为止所看到的结构有一些不同,即你有两个开始工作的定义,及initialize() 和handle_data()。 在这里找到代码。 (责任编辑:本港台直播) |