掘金社区

如何回测收盘价买入?Pinned highlighted

k***y@yeah.net 发表在掘金2 2016-04-09 11:57:56

掘金2
1091
4
0

如果用bar.daily则是次日的00:00成交。这应该是bug。即便是bug,此时下单应该是9:25分成交。
如果用bar.14400则是次日的9:30成交。

由于一分钟线和tick数据都不全,且实际上就是用最近一个月的时间内回测也无法正确成交,有bug。
仅仅为了回测收盘价买入,要用到一分钟线或者tick级的数据,也挺浪费资源。

实际上在实盘里,最后14:59分时可以下单的,目前的api是无法下单的,应该有一个获得实时行情的函数,尤其在开收盘集合竞价时,没有tick,只有买一。

用日线回测应该有一个bar结束的函数,这样就可以实现日线结束时下单,但日线结束已经是15:00,正常也不能下单成交。实在不行,应该有一个模拟值,就是强制成交。

不知道还有什么办法可以用日线回测收盘价买入?实在不行,只有自己写函数来虚拟强制成交,写入CSV来看交易记录和资金曲线了。

此外,能不能把日线下载到本地(怕数据泄露可以加密,实际上日线数据的获取不难),这样断网时也可以回测了。回测服务器的压力也会小些。

评论: 4
    1. bar.daily显示00:00成交时因为日线只有日期没有时间部分,这不影响回测结果;另外各市场开盘时间不一,不能假定是9::30

    2. 没明白你的问题。目前6个市场分钟数据都是从2015-01-01开始,tick数据至少有最近两个月以上。无法正确成交是指?

    3. api没有下单时间的限制。

    4. 日线回测,每天只有一条bar,on_bar本身就是通知事件。不太理解你其他描述

    5. 下单时用限价单,价格指定为bar.close就可以了。

    6. 回测的时候数据会缓存到本地,首次回测后反复回测平台会自动加载本地缓存数据。

    2016-04-09 13:54:26
  • 我是认认真真读文档反反复复用了才来问的。大概你们主要客户是机构用户吧,但也不必要如此傲慢。

    你的回答就是一句话,api是开放的,一切都可以用户自己写。我就再写下面这些,然后不会再发帖了。

    你们要觉得自己挺好,请随意。现在这个数据源的不足和几乎没有容错性,上实盘?机构真牛。

    1,收盘买和次日9点半买是不一样的,这里有一个价差,怎么能是不影响呢?拿samples里的案例来说,选定浦发银行时,bar.exchange已经是上交所了,如果是0:00下单,那么就只能用户再写一个函数储存起来,到了9点半再下单,挺麻烦的。如果返回值就是9点半下单,是举手之劳。且为何14400秒的是9点半下单呢?你实际上是有判断的,怎么到了daily就不能假定是9点半了?

    2,我又试了下,回测的时间间隔要大于2天,以sample的案例,如果设定在4月7日9点20到4月8日15点,那么不论是60s的bar还是tick,都不会有成交记录,返回的order.status也是0,但是没有成交记录。如果设定4月6日到4月8日就有了。那么如果做日内的tick或60sbar回测研究,就全都没有记录。

    3,是没有限制,但是也没有什么好办法,onbar实现不了,close的时候已经收盘无法下单了。ontick是可以,我倒无所谓,对你们而言太耗资源。如果可以提供rundaily(14:59:50)那就太好了,每日函数让用户用时间循环自己写,也不是那么友好。

    4,5,你的onbar是这个bar的起点执行的,而不是终点。一般概念上的bar.close,在盘中理论上获得的应该是上一个bar的收盘价才对吧?否则在盘中不就用了未来值?可能我比较愚钝,要么你用代码说话,不用tick,不用第三方api,不自编函数,就用bar实现:每天收盘前,买入300419。要注意的是,深市是集合竞价收盘的,最后两分钟是两个一字,最后一分钟的tick我感觉也有问题。

    说到300419,我发现你们的回测数据,4月7日涨停板是做全部成交处理的,集合竞价也是做全部成交处理的。当然你也可以回答,这些小细节,是API不限制,用户都可以写。

    还有,基金的单价要精确到小数点后三位,现在是两位,没找到哪里能设置,不知道是显示的是两位还是后台也做两位处理。当然,这个我也可以自己写代码从第三方来获得价格。

    文档里提到了本地数据源的使用,但没有细节?

    2016-04-09 16:14:06
  • 感谢您深入的使用和细致认真的反馈,我们很珍视这种交流。实在是太忙,回答问题可能过于简略,忽略了彼此的背景和对系统的了解差异,很抱歉,完全没有傲慢的意思。另外,部分问题描述我也确实没能完全理解,可能需要再解释一下。有些是bug, 比如基金的价格展示问题,已经在fix list中。

    1. “数据源的不足和几乎没有容错性”,可否具体指出?

    2. dailybar.utc_time中只存储日期,不存储时间,所以日线回测显示是的时间0点。前面解释了,没有有意把它设置为9:30是因为掘金支持多市场,每个市场的开盘时间不一样,比如期货夜盘的开盘时间是晚上;其次,这只是时间的显示问题,不影响回测结果,而且只是日线回测,其他频度不会。实盘交易过程中,策略不会基于日线事件来下单,我们没有遇到这样的场景;实盘时可能会基于日线计算指标,实际下单是基于更细粒度的bar或tick驱动。所以不太理解您问题1后续的描述。

    3. “回测时间间隔要大于两天”,我们确认一下,如果是这样那是bug。能提供可重现问题的代码+参数最好。

    4. 掘金的bar时间是前开后闭,以1分钟股票行情为例,期间是09:30 - 14:59,14:59的bar实际是15:00才会生成。所以没理解您的描述:“实际上在实盘里,最后14:59分时可以下单的,目前的api是无法下单的”

    5. 用日线回测时,买入价是可以用当日收盘价买入,用bar.close+限价单即可;实盘或仿真的时候,下单时应该会使用当前价(last tick中获取),而不是bar的价格,对吧?

    6. 回测参数中有transact_ratio,可以控制成交比率。

    7. “基金精确到小数点后3位”,界面目前显示的2位,这个是已知的问题,下个版本将修改;计算使用原始数据,不影响结果。

    8. 关于本地数据源使用,掘金提供的是api,非侵入式的。策略师完全可以按照自己的需求在策略中混用掘金api和其他api+数据。但掘金api本身是使用掘金自有的数据。

    以上,希望对理解有所帮助。再次感谢。

    2016-04-11 03:39:28
  • 给认真点个赞:)

    2016-04-11 03:43:33

Looks like your connection to 掘金量化社区 - 量化交易者的策略交流学习社区 was lost, please wait while we try to reconnect.