Loading ...

关于多周期的策略回测的问题?

Author: caitouwh, Created: 2016-07-20 01:52:04, Updated:

新手请教个关于多周期策略回测的问题。

比如,策略是 观察到价格在 1分钟, 5 分钟 同时发生MACD 金叉时买入。

设计如下程序

主程序 为 程序每分钟循环一次。每次循环都计算1分钟MACD 判断是否金叉 。 数据采集使用的函数,参数为 records = $.GetRecords(exchange, 1) 如果到了5分钟整数倍, 就多计算一次5分钟 MACD ,判断是否金叉。 数据采集函参为 。 records = $.GetRecords(exchange, 5)

循环休息时间 为1 分钟 sleep(60000) // 60秒。

回测时 采用周期律为 1分钟。 但出现的问题是 : 程序在回测时5分钟 MACD 总是计算不对。 而1分钟MACD没有问题。

请教下高手, 这个问题怎么解决?

另外, 如果用 sleep(6000) 设定休息间隔, 会遇到循环体计算时间长, 可能带来无法时间整点对齐 问题。

比如 希望程序唤醒时间是 10:00:00 , 10:01 :00 , 10:02:00 … . 但实际唤醒时间后延到 10:00:02 , 10:01:05 … 这样累计时间误差大。

请高手指点一二。


More

小小梦 您好~! 第一个问题: 暂时回测沙盒 只支持单个K线周期。模拟盘 和 实盘 可以多周期获取数据,这样策略没有问题。只是回测暂时不支持,回测以策略界面设置的K线周期为准,GetRecords 函数加 参数是不起作用的(回测中)。 第二个问题:看上面的描述我理解为 因为程序运行需要时间 ,导致无法按要求在准点准时执行希望的操作。这里面有几个细节。 1、检测1分钟、5分钟的K线金叉 ,是检测 最新K线柱, 还是检测 之前的K线柱(当前周期之前的历史K线)。 因为K线的 最新柱在周期结束前是一直变动的,可能金叉了,下一秒又变成没有金叉。 2、策略中的各种操作虽然很快,但是依然有时间成本的。特别是一些需要等待返回的函数。这个是必然的。 3、其实不用自己维护操作时间,因为K线周期结束后出现新K线柱的时候就是周期的整点时刻(当然这个时间标准是以交易所时间为准。),可以看下交易所的K线图。出现新Bar了就是整周期时刻。 所以不用让程序 Sleep 那么长时间,暂停个500毫秒足够了,让程序不停的轮询就可以了。确保最快拿到最新的数据。

fmzero 用1分钟k回测,取不到PERIOD_D1,你试试

小小梦 ``` function main() { var r1 = exchange.GetRecords(PERIOD_M1) var r2 = exchange.GetRecords(PERIOD_M5) Log(r1[r1.length - 2]) Log(r2[r2.length - 2]) } ``` 测试过 可以。

fmzero 回测时不行

小小梦 本身就是支持多种K线周期的,在GetRecords 调用时,传参数就可以了。

fmzero 回测沙盒 只支持多个K线周期,啥时候可以提上日程呀