如何使得日内策略的回测结果和模拟交易的完全一致?

Discussion in 'MultiCharts' started by zz_zsu, Jul 13, 2011.

  1. 本人最近在使用mc,在进行日内策略(分钟级时间框架)的历史回测时发现一个重大问题:用软件的回测功能(使用最详细的资料,逐笔回测)得出的结果和用模拟账户实时交易得出的结果出入很大。咨询有关mc客服,说是回测和模拟会有一定误差,如果对数据采取1秒1次的回访可以解决这个问题,但是这样一来回测就没有意义了,莫非测试一年的日内数据,要回放一年吗?不知道哪位仁兄可以解决这个问题?有没有其他软件能处理这个问题(比如说ts)?谢谢!
     
  2. 未来当然跟历史不会完全相同,出入在所难免,根本无法解决。
    这一点跟数据采样的时间间隔无关。
     
  3. 二楼可能没有理解我的意思。我当然知道历史和现实不一样,我现在是对我已经用mc+达钱模拟交易过的历史进行回测,因为是模拟,不存在成交价差的问题,所以和回测的结果应该是一致的。我现在是发现二者不一致,不知是为何?按照mc客服的说法,要按照每秒一笔的速度回放才可以完全一样,但是这样对于策略测试就没有了意义。我想问有没有好的解决办法或者好的软件?
     
  4. 这个问题是比较搞。以下是一些自己的经验以作参考。

    [IntraBarOrderGeneration = False/True]
    这个Option可以控制是否用Tick的方式来跟新strategy的计算。默认情况下是False的,也就是不用Tick方式,只是在每一根线Close的时候进行计算。(Close 严格来讲也是不正确的。MC处理的方式是在快到Close时间的前15秒(左右)开始计算。所以此时的结果和BackTest的结果会有15秒的差异

    这种模式[False]下, CurrentBar就是指当前最新的一根线(not closed yet.) 也就是说 用Open[0], Close[0],...[0] 得到的数据是当前这个线的正确数据。这点儿很重要,后边会有差异。
    所以用Next Bar At Price Stop/Limit 下单的结果通常情况下应该是正确的。但是实践中发现一些不符合的地方。具体原因很复杂,我也搞不清楚。因为几乎同样的代码有时候会出现每个tick都重新计算,有时候又只在Closing的时候计算……很郁闷。为了防止使用错误的数据重复计算,现在我已经习惯性的在代码中加以一些限制性的flag了。如果高手知晓其中奥秘请不吝赐教。

    另外在[True]模式下,strategy的计算将以Tick的方式更新。也就是每收到一个Tick数据就计算一遍strategy。这种模式和前一种模式[False]的最主要区别之一在于,CurrentBar的各种数据都等于closing price。(OHLC = Close[0]) ,而Open[1], High[1], ..[1] 的数据确实等于图上第二根线的数据。也就是说,在当前这根线没有close之前,你是没有办法通过简单的Open,High,Low的方式获得当前Bar的正确数据。而且在这种模式下, 不能使用Next Bar At Price Stop/Limit这种方式摆单。

    也许以上是造成backtest和模拟交易存在较大差异的原因中的一部分。如果有出入还请高手不吝赐教。
     
  5. 楼主为啥不根据出入场的价格和时间进行比对呢,这样就能知道问题的原因所在了呀
     
  6. 用Open做交易