易得程序化提供了强大的策略评测系统,不但支持传统的公式策略测试,还创新性地解决了全市场测试资金分配和仓位管理的难题、并提出了自动化测试的概念和实现方法。满足程序化交易投资者的单品种测试、全市场测试、多策略多品种测试、参数优化、自动化测试等多种测试需求。
对于技术指标、条件选股、五彩K线等信号类指标公式、因为公式内一般都没有指定交易指令,只有信号或者指标线,易得评测系统为这类公式提供了丰富的入场规则和出场条件设置。
而对于交易系统公式,因为公式内部一般都指定了Buy、Sell等交易指令,所以其所有的交易规则按公式策略内部逻辑严格执行。
除此之外,易得回测系统还是提供了交易系统费率保证金、滑点成本、成功率规则、测试方向等丰富个性化选项。
最后,系统还提供了全面的测试报告图表,用户还可以自定义测试报告项目的输出展示项。
首先,我们先介绍一下测试系统几个重要的概念:单品种测试和全市场测试、全市场测试的资金管理、自动化参数优化测试。
这里首先介绍一下单品种测试和全市场测试的概念。两者的差别在于资金的分配和使用,而不是说测试的时候加入了单只还是多只测试品种。比如测试的设定资金是100万,单品种测试是为每只品种投入100万,而全市场测试是对所有品种的总投入是100万。所以说,单品种测试可以设置多只品种,全市场测试也可以设置多只品种。
例如:策略测试设置时加入了10只品种,那么单品种测试为每只品种分别投入100万,实则总投入资金是1000万;而全市场测试是为10只品种总投入资金100万,根据10只品种的开仓信号时间先后进行资金分配。
所以,单品种测试是将一份资金重复分配到每个品种上,评测策略在每个品种的的独立表现。全市场测试是将一份总资金按交易信号先后统一分配到多个品种,评测策略在全市场中的综合交易表现。
前面我们提到,全市场测试是使用指定的总资金,按多只品种的交易信号时间先后顺序进行开仓平仓交易,观察其在全市场中的综合交易表现。
因为资金是有限的,想要尽可能模拟出历史当时的真实情形,自然就涉及到资金分配管理、仓位管理、持仓数量管理等诸多问题。易得在众多股软中首次提出了回测资金管理的概念和实现方法,在空仓、非空仓的不同情况下,按开仓品种数量等条件提供了丰富的资金仓位管理办法。
1) 在空仓的情况下,按同时符合新开仓条件的品种数量,允许每只品种按等分比例资金、固定比例、固定资金、不再开仓的方式进行资金分配。
2) 在非空仓的情况下,按符合新开仓条件的品种数量、已持有品种数量等条件,允许等分比例资金、固定比例、固定资金、持有品种平均资金、不再开仓等多种方式进行资金分配。
3) 支持最大持有品种数量限制。
4) 支持多品种同时开仓数量限制,以及开仓的顺序和规则。
自动化参数优化测试,首先得从参数优化说起。当你的公式中有多个参数时,您可以设定各个参数的取值区间和变化步长,使用参数优化功能对您公式中的参数配对进行排列组合,计算出各种参数组合的交易表现,按您的要求选出最佳的参数组合。
比如最简单的均线交易系统,在一段时间内,两根多少日的均线交叉产生的信号能获取最大收益呢?参数优化就是为您解决这个问题的。
上面我们讲了参数优化是预先设定好了参数取值区间和变化步长,得出的最优解是在该区间范围内的。但如果在区间以外还有更优的参数组合呢?自动化参数优化测试的提出就是用来解决该问题的。
自动化测试是对参数区间进行不断的边界探索和扩展延伸,自动调整变化步长,最终为用户选出最佳的参数组合。从而提高系统的自动化水平,减少人工干预,为参数优化带来最佳的体验。
自动化测试的主要特性:
1) 设定优化总次数,自动调整参数步长。
2) 边界探索,不断地在最优解的边界以外自动扩展参数区间,寻找更优解。
3) 二次优化,取最优解的每个参数的最小值和最大值为新的取值区间,进行二次优化测试。
启动单策略测试的方法有两个,一个是从主菜单“策略”-“策略测试系统”进入;另一个在管理面板公式树的右键菜单“系统测试”进入。
策略与数据页面用于选择测试的公式和参数、以及数据周期。使用数据根数是指在测试时间段之前取多少根数据参与计算,确保测试时间段内每根K线都能计算出正确结果。比如测试时间段2010.1.1-2020.1.1,那么系统取数据是从2010.1.1日之前的N根数据取起。
这里需要注意的是,测试是在本地客户端完成,所以需要确保本地数据的齐全方能测试出正确的结果。测试前自动补齐数据勾选项,可以在测试之前自动下载补齐所选所有品种运行周期的数据。下载完成后再自动启动测试运行,这样确保数据齐全完整。当然您也可以通过数据下载功能预先补齐所需的历史数据。
”附加数据”按钮来补充指定品种或周期的数据。其主要作用在于:在我们的策略中,经常需要跨品种或跨周期的数据引用,所以这里可以指定附加数据的补齐,使得跨品种跨周期的数据也能自动补齐。
仅补充当日数据(不补历史数据),是指如果用户每天都通过收盘作业保存了历史数据或者刚下载过历史数据,自动下载的时候仅补齐当日缺失的数据,这样可以提高效率。
入场规则定义了测试时间段、指标类公式的开仓规则、连续信号处理方法、买卖时机和价位。
这里开仓规则中的资金分配,如果在全市场测试中设置了仓位的资金管理,那么首选是按全市场测试中设置仓位的资金管理进行分配资金,在这里的设置中再进行简单的分配。因为这里的分配规则只能根据信号的产生进行简单分配不能根据仓位的不同进行差异化分配。
买卖时机与价位的设置是指测试中交易的买卖价格,可以指定本周起还是次周期的K线价格。其中只有平仓才能设置为盘中触位价。
这里给出了指标类公式丰富的出场规则设置,如目标利润、最大损失等,还可以指定自定义的公式作为平仓条件,以及设置每种平仓条件的平仓比例。
平仓条件的计算价,是指按该价格进行平仓条件的计算,并不等于平仓的交易价格。平仓的交易价格需在上一节的买卖时机和价位中设置。
这里可以指定测试模式是单品种测试还是全市场测试。单品种测试的设置比较简单,指定的投入资金额是为每只品种分别投入的资金,也就是每只品种的资金是相互独立的。
测试方向的设置可以是多头测试或者空头测试,多头测试相当于开多的操作,空头测试也就是开空的操作。
全市场测试的设置比较复杂,指定的投入资金额是为所有品种总共投入的总资金。
全市场测试可以限制最多同时持有品种数,见上图1号标签。
多只品种同时满足开仓条件时的处理规则,见上图2号标签。支持全部开仓、或指定最多同时开仓品种数;同时给出优先选择的规则。
在上图3号标签和4号标签区分别设定了空仓时和非空仓时的资金管理分配方法。我们可以添加多个分配方案,系统将按顺序选择第一个符合的方法执行。下面将详细讲解。
1) 空仓时的资金分配
空仓时,允许按符合新开仓条件品种数的个数,分配每只新品种资金。分配的方法有:等分比例资金、固定比例、固定资金、不再开仓。
2) 非空仓时的资金分配
非空仓时,允许根据符合新开仓条件品种数、已持仓的品种数、两者相加的个数、分配每只新品种的资金。分配的方法有:等分比例资金、固定比例、固定资金、持仓品种平均资金、min(持仓品种平均资金, 等分比例资金)、max(持仓品种平均资金, 等分比例资金)、不再开仓。
具体含义可以查看图中的名词解释。
对于交易系统公式,只能按单品种模型进行测试。因为交易系统不能使用全市场测试,如要进行全市场测试,请改写成技术指标或条件选股公式。
交易系统公式的所有交易规则按公式策略逻辑执行,所以在以上2-7节中的入场出场规则、全市场测试设置等页面都不会出现。
这里支持自定义策略执行的资金、费率、保证金率,以及设置测试对象,您可以加入任意只品种进行测试。成功率设置指定了交易信号成功率的判断标准。
如果在左上方勾选了“使用系统默认保证金费率”,就使用系统的默认配置数据。如果不勾选,那么就可以自由设置。
费率可以按成交额的百分比收取或者按成交量来收取。
滑点成本是指在测试的交易价格中,对于交易信号的下单价格会按品种最小变动单位顺价几个点位的价格,以便委托更容易成交。对于市价委托无效。
比如,下单执行价格是10.0元,品种最小变动单位是0.02元,设定了滑点成本开仓平仓都是2个变动价位。那么对于不同下单指令,最终下单价格会有调整:
开多:10.0 + (0.02 * 2) = 10.04元
平多:10.0 - (0.02 * 2) = 9.96元
开空:10.0 - (0.02 * 2) = 9.96元
平空:10.0 + (0.02 * 2) = 10.04元
固定合约乘数,勾选是指忽略各个品种的标准合约乘数,使用固定一个数值。没有勾选则使用品种标准的合约乘数。
我们知道交易下单所需资金的计算是价格*下单量*合约乘数*保证金比例。有些品种如AU黄金的合约乘数是1000,或者价位较高。如果虚拟资金为100万,某些策略在历史数据的计算过程中可能很快将虚拟资金耗完,导致后续不能再开仓。固定合约乘数可以忽略这些限制让策略更好地验证执行。
勾选允许零股买卖可以不按最小手数交易,允许零股买卖。
此页面列出了上面各节进行的测试设置的摘要,建议在开始测试前检查设置是否有误。
“设置统计显示列”按钮可以自定义测试指标项作为报告的显示项,显示项在报告中可以在列表中进行排序,并且可以按显示项作为默认的参数优化项。
在设置好所有测试配置后,点击下方的“开始”按钮,经过运行后很快就能为您呈现出测试报告。
测试报告页中分为摘要、报告、明细、分布、收益等页面。从多个角度呈现出测试的结果。
净利润: 全部交易的盈亏综合,已扣除手续费
净利润率: 净利润/总投入
总盈利: 全部盈利交易的利润总和,已扣除手续费
总亏损: 全部亏损交易的利润总和,包含手续费
交易次数: 总交易次数,多次开仓一次平仓也记作一次交易
胜率: 盈利交易次数/总交易次数
年均交易次数: 总交易次数/测试时间长度(年)
亏损交易次数: 获利的交易数量/亏损的交易数量(盈利/亏损交易次数)
盈利交易次数: 获利的交易数量
最大单次盈利: 所有交易中最大的一次盈利
最大单次亏损: 所有交易中最大的一次亏损
平均盈利: 总盈利/盈利交易次数
平均亏损: 总亏损/亏损交易次数
平均利润: 总利润/总交易次数
平均盈利/平均亏损: >1表示盈利交易的获利数额较大;<1表示亏损交易的损失额较大
最大连续盈利次数: 单只品种连续盈利交易的次数
最大连续亏损次数: 单只品种连续亏损交易的次数
交易平均周期数: 从开仓到平仓所经历的周期数的平均长度
盈利交易平均周期: 所有盈利交易的平均持仓周期数
亏损交易平均周期: 所有亏损交易的平均持仓周期数
盈利系数: (盈利-亏损)/(盈利 +亏损),分布在-1到 +1之间,数字越大越好
最大浮动盈利: 按持仓浮动盈亏计算的最大盈利,随持仓股价变动
最大浮动亏损: 按持仓浮动盈亏计算的最大亏损,随持仓股价变动
最大浮动盈亏差: 最大浮动盈利-最大浮动亏损
总投入: 初始投入资金数
有效投入: 总投入中实际用于购买证券的资金数
年回报率: 按复利计算的年收益率
年有效回报率: 用有效投入计算的年收益率
多头简单开仓持有回报: 测试首周期开多仓,到最后周期平仓所得到的收益
多头开仓持有年回报率: 测试首周期开多仓,到最后周期平仓所得到的年收益率
空头简单开仓持有回报: 测试首周期开空仓,到最后周期平仓所得到的收益
空头开仓持有年回报率: 测试首周期开空仓,到最后周期平仓所得到的年收益率
总交易额: 所有开仓平仓交易额,不包括交易费
交易费: 全部开仓平仓的交易费
交易费/利润: 交易费与利润的比例
测试周期数: 测试时间段的周期数,在日线上就是交易日数量
平均仓位: 测试周期内平均每周期的仓位
最大仓位: 测试周期内每周期的最大仓位
平均持仓量: 平均每周期持有证券数量
最大持仓量: 最大持有证券数量
多头交易次数: 多头方向交易次数,多次开仓一次平仓也记作一次交易
多头盈利次数: 多头方向获利的交易数量
多头胜率: 多头方向盈利次数/多头方向交易次数
多头盈亏比: 多头方向获利的交易数量/多头方向亏损的交易数量
空头交易次数: 空头方向交易次数,多次开仓一次平仓也记作一次交易
空头盈利次数: 空头方向获利的交易数量
空头胜率: 空头方向盈利次数/空头方向交易次数
空头盈亏比: 空头方向获利的交易数量/空头方向亏损的交易数量
无仓周期数: 测试时间内无仓的周期数
无仓周期比例: 无仓周期数/测试周期数
最长无仓周期: 最长的一次无仓周期
平均无仓周期: 无仓周期数/无仓次数
成功率: 价格在目标周期内最大涨幅达到目标利润的概率
信号数量: 满足开仓条件的总数量
年均信号数量: 满足开仓条件的总数量/测试时间长度(年)
五日获利概率: 条件满足后第5周期,价格比开仓价有获利的概率
十日获利概率: 条件满足后第10周期,价格比开仓价有获利的概率
二十日获利概率: 条件满足后第20周期,价格比开仓价有获利的概率
目标周期获利概率: 条件满足后的目标周期,价格比开仓价有获利的概率
夏普率: 夏普比率-绩效评价标准化指标
MAR比率: 收益风险比(MAR比率)
最大回撤额: 资产曲线的最大回撤金额
最大回撤幅度: 资产曲线的最大回撤百分比
最大回撤时间: 资产曲线的最大回撤所在周期时间
测试品种数: 公式策略测试包括的品种总数
测试时间: 测试时间段
多策略测试是建立在单策略测试的基础上,用户可以按单策略的配置添加任意个测试方案到列表中。
多策略测试的主要目的在于对列表中的多个策略方案进行一键测试,将结果按“设置显示列”中自定义的测试指标项展示在列表中。可以在列表中对各个测试指标项进行排序,方便用户对多个策略进行对比评价,还可以查看各个单策略的详细测试报告。
通过主菜单的“策略”-“多策略测试管理”调出。
左下方的添加、修改、删除、清空、全选、反选、复制按钮,我们可对列表的单策略配置进行操作。“一键测试”按钮可以对于列表中勾选的单策略进行一次性测试,将测试结果展示于列表。
“设置显示列”可自定义列表的测试指标项,支持导出、导入等功能。
重置开始结束日期,是指对列表中所有的单策略测试进行统一的测试时间段设置,方便对多策略的同期表现进行对比。
让我们重温一下前面“概念简介”中的参数优化的解释:当你的公式中有多个参数时,您可以设定各个参数的取值区间和变化步长,使用参数优化功能对您公式中的参数配对进行排列组合,计算出各种参数组合的交易表现,按您的要求选出最佳的参数组合。
易得程序化提供了强大的参数优化功能,支持多核优化,不限优化次数,参数关系优化,自动化测试等特性。具有运算速度快,占用内存资源少的特点。
在优化结果的呈现上,支持列表式和热力图式两种方式,更重要的是,可以通过“自定义显示列”来个性化设定需要优化的指标项。
在策略测试系统,当我们完全设置好要测试的各项配置后,点击下方“参数优化”按钮,即可进入参数优化功能。此时,参数优化的测试将按刚才的策略测试系统的各项配置进行。
进入参数优化界面后,在参数列表中勾选需要进行优化的参数,并设置好最小值、最大值、步长。最小值和最大值也就是参数优化的区间,步长是每次优化后该参数的递增步长值。当勾选了参数后,我们可以在列表的左下方看到优化次数。
至此,我们直接点击“立即优化”按钮即可开始参数优化的计算。当然,为了用户能获得更好的优化体验,易得还提供更多的选项配置:
“自动化测试”选项为您开启自动化测试的设置,我们在下一章节为您详细介绍。
“加入优化队列”按钮将该优化设置加入队列队列,我们在后面章节为您详细介绍。
“自定义显示列”按钮可以自定义优化报告中所要对比的指标项。
“运算数据常驻内存”是指将需测试的品种的数据常驻在内存,这样不用每次优化都需去磁盘读取数据。推荐一直勾选该选项能获取更快的优化速度。
“多核优化”是指启动CPU的多核进行并行运算。推荐一直勾选该选项能获取更快的优化速度。
“启动虚拟内存”,当你需要大量计算并且计算机物理内存有限的情况下,可以启动虚拟内存帮您获得更大的内存空间。一般不建议勾选,因为使用虚拟内存会拖慢系统运行速度。
“多核优化自动断开行情连接”,是为了在盘中数据变化是,不让实时行情数据影响测试数据,造成优化的数据有差异。一般盘后做优化可以忽略此设置。
“省内存模式”是指不记录每次优化的交易明细等数据,只记录测试报告结果。如果需要交易明细数据,可以在测试报告界面中“刷新测试”,重新获得全过程的交易信号明细数据。强烈推荐勾选次选项,不然物理内存将很快被耗尽。
“启用参数关系优化”勾选后会出现参数关系设置区,我们可以设置参数之间的逻辑关系,满足设置条件参数组合将不做优化测试,提高优化速度。比如两根均线的金叉死叉,在这两个参数相同的情况是不会出现交叉的,所以可以过滤掉这种参数组合。
“列表式”优化报告为我们列出了所有参数组合的各项指标项,可以对各个指标项进行排序。双击列表可以查看该参数组合的详细测试报告。
通过“保存参数”按钮,可以将选中参数组合设置为公式的默认参数。
“保存结果”按钮将优化结果写入文件,在主菜单“策略”-“打开策略测试文件”-“打开参数优化报告”中重新打开。也可以支持导出Excel文件。
“热力图式”优化报告通过选择其中两个优化参数作为X轴方向和Y轴方向,通过高亮的颜色变化,平面化地向我们展示了X方向和Y方向两个参数各种排列组合的的表现。我们可以通过颜色高亮发现各个区域的不同表现,还可以通过上方的蓝色“划定优化区”按钮来选定特定区域,进行再次优化。双击热点图的分布点可以查看该参数组合的详细测试报告。
我们可以在右上角设置选择不同的X方向Y方向组合;在右下角切换不同的指标项数据。双击热力图中的每个区域节点,可以查看该参数的具体测试报告。
点击蓝色“设置”字体,可以自定义热力图颜色,和原点位置。
在“概念简介”章节我们已经介绍够自动化测试的基本概念,通过对参数区间进行不断的边界探索和扩展延伸,自由调整变化步长,最终为用户选出最佳的参数组合。从而提高系统的自动化水平,减少人工干预,为参数优化带来最佳的体验。
在参数优化功能界面,我们勾选“自动化测试”选项,即可进入自动化测试方案设置界面,如果设置确定后,即意味着本次参数优化测试按自动化方案进行。
设置成功后,在参数列表中会增加“自动步长”、“最小极限”、“最大极限”3个数据列。自动步长是指按方案的设置自动计算得出,在自动化测试中将替代原步长,原步长值将失效。最小最大极限是参数的边界探索中的极限值,超过该极限值将停止扩展探索。
这里我们看到自动化方案有3个可选项:优化总次数限制、边界探索、二次优化。下面我们按上图的设置来讲解方案的说明。值得注意的是,这里的指标项“净利润率”下拉选择列是可以通过自定义以显示列进行自由选择设置的。
上图中的方案说明如下:
点击“参数优化”界面的“立即执行”按钮,将启动自动化的测试,您可以通过下图看到自动化测试的执行过程。当然,您也可以通过“列表式”、“热力图式”查看最后一次参数优化测试的结果报告。
参数优化队列是建立在单个参数优化的基础上,用户可以将任意个参数优化的配置加入优化队列。
优化队列的主要目的在于对队列中的多个优化方案进行一键优化,将优化结果保存成优化报告格式文件(.opt)或者将结果保存成excel格式文件(.csv)。
在参数优化的界面,点击“加入优化队列”按钮,点击后出现参数优化队列设置,这里可以设置名称,支持Excel表格(.csv)格式文件和优化报告(.opt)格式文件两种结果保存方式。可指定结果文件加入日期后缀,和设置保存路径。
通过主菜单的“策略”-“策略参数优化队列”调出。
左下方的删除、清空、全选、反选、上移、下移、复制按钮,用户可对列表的优化项目进行操作。“一键优化”按钮可以对于列表中勾选的优化项目进行一次性优化测试,将优化测试结果保存到指定的文件。
重置开始结束日期,是指对列表中所有的优化测试进行统一的测试时间段设置,方便对多策略的同期表现进行对比。