Loading ...

发明者量化 模拟级别回测机制 说明

Author: 小小梦, Created: 2017-02-07 13:04:57, Updated: 2019-09-05 18:00:46

发明者量化 模拟级别回测机制 说明


  • 1、回测架构

    发明者量化 的回测 中 策略程序是完整的控制流程,程序是在按照一定的频率不停的轮询。各个行情、交易 API 返回的数据也是按照调用时刻,模拟实际运行时的情况。属于on Tick 级别, 并非其它 回测系统的 on Bar 级别。更好的支持了 基于 Ticker 数据的策略的回测(操作频率较高的策略)。

  • 2、模拟级别回测 和 实盘级别回测 的区别

    • 模拟级别回测

      模拟级别回测是 按照回测系统的底层K线数据 , 按照一定算法 在给定的底层K线 Bar 的 最高价、最低价、开盘价、收盘价的数值构成的 框架内,模拟出ticker数据插值到这个Bar的时间序列中(该 Bar 的周期中 从开始到结束,的时间序列就是模拟出的ticker数据)。

    • 实盘级别回测

      实盘级别回测是 真实的ticker 级别数据 在Bar的时间序列中。对于基于ticker 级别数据的策略来说,使用实盘级别回测更贴近真实。 实盘级别回测,ticker是真实记录的数据,并非模拟生成。

  • 3、模拟级别回测机制–底层K线

    实盘级别回测没有底层K线选项(因为ticker 数据都是 真实的,不用底层K线 来模拟生成)。 模拟级别回测中,基于K线数据 模拟生成的ticker。 这个 K线数据 就是 底层K线。在实际使用 模拟级别回测中,底层K线周期 必须小于策略运行时 调用API 获取K线的周期。 否则,由于底层K线周期较大,生成的ticker 数量不足,调用 API 获取指定周期的K线时,数据会有失真的情况。在使用大周期K线 回测时,可以适当调大 底层K线周期。

  • 4、底层K线 如何生成 ticker 数据

    底层K线生成 模拟ticker 的机制 和 MT4 是一样的: 相关链接

    img img img img

  • 5、生成ticker 数据的算法代码

    把底层K线数据 模拟出 tick 数据的具体算法:

function recordsToTicks(period, num_digits, records) {
    // http://www.metatrader5.com/en/terminal/help/tick_generation
    if (records.length == 0) {
        return []
    }
    var ticks = []
    var steps = [0, 2, 4, 6, 10, 12, 16, 18, 23, 25, 27, 29]
    var pown = Math.pow(10, num_digits)

    function pushTick(t, price, vol) {
        ticks.push([Math.floor(t), Math.floor(price * pown) / pown, vol])
    }

    for (var i = 0; i < records.length; i++) {
        var T = records[i][0]
        var O = records[i][1]
        var H = records[i][2]
        var L = records[i][3]
        var C = records[i][4]
        var V = records[i][5]
        if (V > 1) {
            V = V - 1
        }
        if ((O == H) && (L == C) && (H == L)) {
            pushTick(T, O, V)
        } else if (((O == H) && (L == C)) || ((O == L) && (H == C))) {
            pushTick(T, O, V)
        } else if ((O == C) && ((O == L) || (O == H))) {
            pushTick(T, O, V / 2)
            pushTick(T + (period / 2), (O == L ? H : L), V / 2)
        } else if ((C == H) || (C == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.382), (C == L ? H : L), V / 2)
        } else if ((O == H) || (O == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.618), (O == L ? H : L), V / 2)
        } else {
            var dots = []
            var amount = V / 11
            pushTick(T, O, amount)
            if (C > O) {
                dots = [
                    O - (O - L) * 0.75,
                    O - (O - L) * 0.5,
                    L,
                    L + (H - L) / 3.0,
                    L + (H - L) * (4 / 15.0),
                    H - (H - L) / 3.0,
                    H - (H - L) * (6 / 15.0),
                    H,
                    H - (H - C) * 0.75,
                    H - (H - C) * 0.5,
                ]
            } else {
                dots = [
                    O + (H - O) * 0.75,
                    O + (H - O) * 0.5,
                    H,
                    H - (H - L) / 3.0,
                    H - (H - L) * (4 / 15.0),
                    H - (H - L) * (2 / 3.0),
                    H - (H - L) * (9 / 15.0),
                    L,
                    L + (C - L) * 0.75,
                    L + (C - L) * 0.5,
                ]
            }
            for (var j = 0; j < dots.length; j++) {
                pushTick(T + period * (steps[j + 1] / 30.0), dots[j], amount)
            }
        }
        pushTick(T + (period * 0.98), C, 1)
    }
    return ticks
}

所以,在使用模拟级别回测时 会出现 时间序列上的价格 跳动。


More

psNOehs 收盘价不可能小于0的,判断C大小的else语句是不是有些多余?

小码哥 BTC的回测时间只能从2015年2月开始吗?可以回测更长时间吗?

FangBei 模拟回测的周期里面,1小时之后就直接是1天了,为什么没有2小时,4小时,6小时,12小时,这些常用的周期?

期货程序化 回测时间太短 完全体现不出策略的好坏

小小梦 呃 怕有时候 交易所给的数据有问题。

小小梦 模拟级别回测 tick 数据是 根据 K线框架生成的,这个帖子上有 生成算法。 如果想更精确一点的 ,使用 实盘级别回测。

zrcahyx 模拟盘的话,底层k线周期对策略影响非常大,请问什么样的底层k线周期更解决实盘呢

小码哥 恩,那的确比较少见。 不过相对来说,需要回测这么长时间的策略应该都是都是中长线的交易吧?

xingbuxing okcoin一天的k线还是比较好弄的。关键分钟和逐笔的

小码哥 只爬了K线图的, OKCoin, 1day做海龟的回测

xingbuxing 你有btc之前的历史数据吗?

小小梦 这个暂时还不行。

小码哥 那可以支持我自己导入一些历史数据来跑吗?

小小梦 之前的数据 没有了,暂时只到这个时间点。

小小梦 回测系统 设定了 一些 比较常用的周期,如果 需要任意周期的K线 可以看下 “策略广场” 有一些 可以转换 K线周期的模版 。

小小梦 商品期货的数据是从13年开始的,一般的策略应该是足够的。