14.3 基于MATLAB的策略回测模板样例

14.3 基于MATLAB的策略回测模板样例

本节给出一个复杂一些的基于MATLAB的策略回测模板样例,读者只需对该模板稍加改造,就可以用来回测其他策略。

14.3.1 模板结构

策略回测模板由三部分组成:数据准备、回测计算和策略评价。

数据准备部分的主要功能是从数据库中提取数据并进行整理。数据存储在SQLServer数据库中,通过ODBC进行连接。本模板中使用的数据为期货数据,每个品种的每个周期对应一张表,如阻888_M15表示螺纹钢连续数据,周期为15分钟。每张表中有7 个字段,分别为日期时间(Date)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Yolume)和持仓量(Openlnterest) 。

回测计算部分的主要功能是对策略进行仿真测试,包括定义主要参数和变量、指标计算、开仓平仓和止损止盈等内容。首先,对策略回测需要用到的主要参数和变量进行定义,虽然这不是必需的,但能使使用者做到心中有数。然后做一些预计算, 如一些指标的计算。最后,利用预计算的数据进行仿真计算,包括开仓、平仓、止损和止盈等。策略评价部分是对回测计算部分的总结,该部分能自动将交易记录和资产损益情况输出到外部Excel中, 并通过计算净利率等一系列指标进行交易汇总。

14.3.2 相关回测变量和指标的定义

在回测实现中, 会涉及一些相关的变量和指标, 具体的定义如表14-1表示。

14.3.3 策略描述

待回测的交易系统基于布林通道原理是一个趋势追踪系统。布林通道(BolingerBands)以该指标的创立者约翰·布林(John Bollinger)的姓命名,是研判价格运动趋势的一种技术分析工具。一般而言,价格的运动总是围绕某一价值中枢(如均线、成本线等)在一定范围内波动,布林线指标在上述条件的基础上引进了"价格通道"的概念,其认为价格通道的宽窄随着价格波动幅度的大小变化,而且价格通道具有变异性,会随着价格的变化自动调整。当价格突破上轨时,说明价格有向上的动力;当价格跌破下轨时, 说明价格有向下的动力。为了过滤掉一些虚假信号,本策略用ROC指标进行过滤。

ROC(Rate of Change)指标又叫变动速率指标, 是一种研究价格变动动力大小的中短期技术分析工具。ROC指标是利用物理学上的加速度原理,以当前Bar的收盘价和N周期前的收盘价作比较,通过计算价格在某一段时间内收盘价变动的速率, 应用价格的波动来测量价格移动的动量,衡量多空双方买卖力量的强弱, 达到分析预测价格的趋势及是否具有转势意愿的目的。

本策略为非多即空策略(正反手策略),暂不进行止损止盈设计,入场及出场条件为:ROC大于0且价格突破布林带上轨就开多仓;ROC小于0且价格跌破布林带下轨就开空仓。其中Boll指标和ROC指标可由BOLL.m和ROC.m两个函数实现。

BOLL.m函数的MATLAB代码如下:

ROC.m函数的MATLAB代码如下:

更多有关技术分析的指标讲解和MATLAB代码可以参考本书其他章节和如下帖子:

《MATLAB技术分析指标工具箱(近40个函数)》, http://www.matlabsky.com/thread-42365-1-l.html。

14.3.4 数据准备

模板通过ODBC连接SQL Server数据库,连接前需要配置数据源,下述代码中的"Futures matlab"即配置的数据源。这里待使用的数据己经事先从数据库读取好存储在data.mat文件中,可直接载入。

MATLAB实现代码如下:

测试数据为螺纹钢(R)主力连续15分钟周期数据,数据抬头为日期时间、开盘价、最高价、最低价、收盘价、成交量和持仓量,测试数据部分截图如图14-4所示。

14.3.5 回测计算

首先需要定义回测相关的主要参数和变量。需要说明的是,这里的参数本质上也是变量,只不过单独进行某一回测时其取值不变(常量)。MATLAB的相关代码如下:

定义好参数和变量后,就可以使用BOLL.m和ROC.m函数事先计算好布林指标和ROC指标,方便后续交易仿真过程的使用。代码如下:

下面进行的是回测的核心过程一一对真实投资过程的仿真模拟。这个过程要比前面的简单均线系统复杂很多,重点是交易信号的生成和通过仓位变量的检测进行交易记录的生成和权益的计算。具体代码如下:

    

14.3.6 策略评价

得到回测计算之后,可以得到每次交易的开仓价、平仓价、静态权益和动态权益等数据,接下来要做的就是利用这些数据生成相关评价指标,对策略效果进行评价。

首先,对仿真交易结果进行汇总,并将各指标输出到外部Excel文件的"交易汇总"工作表中。其中绩效计算的部分代码如下:

最终生成的"交易汇总"工作表如图14-5所示。

其次,输出交易记录到外部Excel文件。交易记录记录了每次交易的详细情况,包括买卖类型、商品名称、时间周期、建仓时间、建仓价格、平仓时间、平仓价格、数量、交易成本、净利、累计净利、收益率和累计收益率等信息。最终生成的"交易记录"工作表如图14-6所示。

再次, 输出资产变化到外部Excel文件。资产变化记录了资产汇总及资产变化明细,具体包括期初资产、期末资产、交易盈亏、最大资产、最小资产、交易成本合计、多头保证金、空头保证金、可用资金、动态权益和静态权益等信息。最终生成的"资产变化"工作表如图14-7所示。

最后,对结果进行画图,井自动保存为图形文件。模板画了7个图形,分别为布林带图、交易盈亏曲线及累计成本图、交易盈亏分布图、权益曲线图、仓位及回撤比例图、多空对比图和收益多周期统计图, 分别如图14-8~图14-14所示。

交易标的(螺纹钢RB)的行情图及相应的技术指标的图形展示可以方便结合记录进行交易信号的查看和校对。

交易盈亏曲线和累计成本的对比可以方便查看成本对整体资金流的影响,这点在进行成本压力测试中很重要。

通过交易盈亏分布图可以直观地看出回测系统的类型(趋势类、震荡类),势类策略都是小亏大盈,具有一定的尾部分布。

最大回撤是需要重点关注的交易系统评价指标, 通过该指标可以查看模型的风险暴露时间段, 进而进行策略的调校和完善。通过多头和空头的盈亏对比图,可以考察模型在多空行情中的节奏把握是否对称。多周期的收益统计图可以更好地观察模型在不同周期上的收益情况,观察单独某一年交易系统的收益情况可以看出模型的收益情况趋势及模型的生命周期长短。