采用真实合约数据进行交易系统历史回测实现思路(日线周期)

Discussion in 'Philosophy and Strategy' started by yonkim, Oct 19, 2009.

  1. 指数合约数据是经过平滑处理的结果,回测效果与实际交易效果有时会有较大差别(可以用指数数据进行初步测试考验系统的获利能力);
    采用连续合约数据产生交易系统信号,在合约换月时会产生大的缺口,其使得交易信号严重变形,尤其是均线类信号。
    采用真实合约数据进行交易系统历史回测则是真实的效果,缺点是很难实现而且比较麻烦,但并非没有可能,实现思路如下:
    (以豆粕为例)
    1、 交易一月份合约,将一月份合约数据作为图表的DATA0,叠加其他月份合约作为DATA1、DATA2….;
    2、 交易系统信号过滤:
    判断一月份合约是否为主力合约,判断依据是:比较所有月份合约当天成交量或近三天成交量的平均值,当天成交量或近三天成交量的平均值最大者是主力合约,当一月份合约成交量或近三天成交量的平均值为所有月份合约最大者时一月份合约就是主力合约;
    3、 采用DATA0数据产生交易系统信号,过滤一月份为非主力合约时期的信号,在测试报告中只产生一月份为主力合约时期的信号,测试后保存测试报告;
    4、 重复上述1到3步,产生其他月份合约的测试报告并保存
    5、 测试报告汇总
    如果是在TB中实现的话,目前只能手工合并计算各月份合约测试报告形成总的测试报告;
    其他方法:
    采用TradeStation平台产生单月合约测试报告,配合RINA SYSTEM可以合并产生总的测试报告;
    或者,采用MultiCharts内置的Portfolio Backtester投资组合测试功能均可以自动产生总的交易系统测试报告
    对交易系统测试精益求精的朋友可以试试
     
  2. 会有一些问题:
    一、移仓问题,比如一月份不是主力合约了,系统还未出平仓信号时;
    二、开仓问题,系统移到下一个主力合约时从哪个合约哪个Bar开始计算?从现在的主力合约计算那肯定不对!
     
  3. 一、移仓问题,比如一月份不是主力合约了,系统还未出平仓信号时;
    移仓问题:在实际交易中是不可避免的,比如当一月份不是主力合约了,现在主力合约是五月合约,进行换月移仓,平掉一月合约按原开仓方向开仓五月合约;
    另一种可行的方法时:主力合约换月时,原主力一月份合约继续持有到系统出平仓信号(信号根据原主力一月份合约数据产生),同时,一当现在的主力合约五月合约发出开仓信号就开仓五月合约
    二、开仓问题,系统移到下一个主力合约时从哪个合约哪个Bar开始计算?从现在的主力合约计算那肯定不对!
    开仓信号问题:所有月份合约本身的交易信号都是根据各自的数据产生,只不过是增加了一个多合约横向对比判断当前合约是否为主力合约的过滤条件,确保开仓时当前合约是主力合约,过滤掉当前合约不是主力合约时候的开仓信号
     
  4. 交易系统历史回测数据的选择和生成都需要根据你自己的策略来做调整的,市场上那些“连续合约数据”基本上都不适合的。
    如果你是短线交易策略,那直接采用“真实合约数据”就可以了,一般只需要增加了交易活跃度过滤,比如成交量或持仓量选择合约过滤。

    如果是长线或中线趋势交易测试,采用“加权指数连续合约数据”可以作为策略的连续数据,这个“加权指数合约连续数据”可以采用将同品种的不同月份的合约的数据通过给加权来生成(以成交额和成交手数)。

    对于那个持仓头寸净多/净空值,也以用同品种不同月份的综合值为宜,而不宜采用单合约持仓净多/净空值
     
  5. 这在不涉及资金管理的策略上是可行的,但对于涉及资金管理的策略,比如海龟,就不合适了。