掘金社区

get_indicator等函数在回测模式下应该可用Pinned highlighted

夏沧海 发表在掘金2 2015-08-24 09:35:52

掘金2
2566
11
0

目前mode=4下get_indicator, get_position, get_cash等函数返回无值,on_order_*函数没有效果,这样回测起来效率不高,必须看客户端手工调参数,而且客户端里经常回测结果显示不出来,回测的代码和真实策略的代码并不能完全一样,理想情况下mode改之后策略的代码应该完全不用改就可以,现在我们必须自己考虑回测模式的很多问题,不能完全专注于策略本身。

http://www.myquant.cn/news/ 里说“模式一致:策略模型在回测、仿真、实盘不同阶段,模型仍然保持一致,不需要修改代码。”

我觉得这样的设定并没有做到不区分mode=4和其他情况而不需要修改代码。

希望咱们的技术人员能够尽快解决这个问题吧。
@bidong @Bwlee

评论: 11
  • @xiasummer 非常感谢你的反馈!我简单地解释下目前为什么要这样做。

    目前的回测代码中,如果用了get_indicator, get_position这类的函数,是不会有返回值的,主要是基于两点:

    • 一是模型的回测中,为了提高回测本身的效率,没有逐笔下单成交处理,原因是回测中这样的意义不是特别大,因为回测时的资金、仓位、成交等都是预先假定的,本身就不精确,再用精确地计算,除了降低回测效率,也不能带来什么好处。
    • 二是即使在实盘交易中,我们也不推荐使用这种经常查询持仓、资金或指标的做法,在掘金的策略开发中,通常我们建议的资金和持仓的管理模式,是仅仅在策略启动后的初始化过程中查询一次,然后策略在收到order的状态变化或者是成交回报后,就可以相应地更新对应的仓位,资金方面其实都不用特别地关注和经常地查询,除非策略经常把资金利用率要达到一个相当危险的高度。

    在我的理解中,回测其实是应该分两步来进行的,首先重要的是回测信号的准确率,也就是策略模型在一段过去特定的时间段行情中,发出信号的准确率有多高,是否值得进一步去优化和改进。 然后,就是在这样的信号准确率的基础上,再来考虑如何优化资金的使用效率,或者说通过持仓的管理来获得比较高的收益率。 但实盘和回测中有个最大的不同,就是实盘中的下单会因为有时延导致不能完全成交的情况,这部分逻辑是很难在回测中模拟出来的,只能通过一定的参数设置去近似获得,目前这样的做法主要是为了提高回测效率这个目标,我们这样做导致的策略的代码可能不会完全一致,但基本的策略模型是不用修改的。

    如果要做到回测和实盘交易时的完全的代码一致,需要做以下的修改: 在下单的时候,每次都有相应设定的成交回报,然后更新有持仓和资金的变化,这样只会导致回测效率比较低下,对回测的目的本身而言,其实没有太大的提升,因此我们觉得这样的开销是不值得的。

    不知道这样解释是否可以理解? 或者你有更好的改进方案建议,也欢迎提出来我们看看是否可以更好地提升回测的方案,最后,再次非常感谢你的意见和反馈!

    2015-08-24 10:43:02
  • 您好,谢谢您的回复,不过因为在我们的策略中,跟踪查询仓位变化、指标数值等是重要的组成部分,因此我们希望能够开放这部分功能,或者您能否帮助我们自己在本地实现这一功能。我知道在做回测的时候,相应的交易数据只能比较近似的计算,不过我希望首先是编程上无障碍——不要人为地设置编程的禁区,对于回测而言,我希望能够通过您的客户端 获得行情数据,其他的计算尽量都在本地进行 ,展示当然是可以通过客户端来观察。既然几乎所有计算都是在当地进行的,那么如果计算效率低,我会想办法改进~但是目前我对于自己开发的策略没有想到如何避开上述的函数。

    我自己在开发这些函数的时候,又不知道是不是编程正确。所以如果可以的话,我希望可以获得你们编写get_indicator、get_position、get_cash之类的函数的python或C++代码。

    此致

    2015-08-24 11:07:44
  • [quote="xiasummer, post:3, topic:2148"]
    因为在我们的策略中,跟踪查询仓位变化、指标数值等
    [/quote]

    这样的需求,应该放到仿真交易中做,而不是在回测过程中。

    仿真交易中,策略是由实时行情驱动,发出的委托经由合法性验证、风控管理,然后与实时行情撮合,再清算持仓与资金,最后计算绩效指标,整个过程中每一个环节生成的数据,都会实时推送给策略,策略也可以主动查询这些信息。

    回测的情况有所不同。回测的核心目标,是快速验证策略的大逻辑思路是否正确,看回测绩效结果是否符合预期,从而过滤无效想法。回测主要关注的输出是策略是否在正确的时间发出了委托,以及由此产生的成交、持仓、绩效指标等数据。因此回测一定要快,慢了就无助于快速试错,失去了回测作为初步筛选策略的意义。

    具体实现上,回测并不是把仿真/实盘的过程加速。几点原因:一是这样做非常的慢,回测的历史数据是海量的,每秒可能几万到上百万笔行情处理,生成并推送大量的状态信息给策略处理,性能会指数级下降;二是仿真/实盘阶段,从行情->策略->风控->撮合->清算->绩效是异步过程,而回测必须是同步过程,否则会遇到数据一致性问题,无法得到正确的结果,简单的举个例子,需要保证触发策略交易的行情与撮合时的行情的关联性,还有其他很多细节不赘述;三是,除行情外,还有其他各项数据依赖需要服务支撑。

    因此,回测在实现是是同步批处理的过程:回放指定区间行情->驱动策略产生委托序列->撮合清算产生持仓序列->绩效计算产生各种指标序列等,以上计算过程会结合滑点模型、冲击成本模型、手续费、成交比率等等因子。在这个过程中,不会回推indicator, cash, position的状态变更给策略。

    以上交流,希望能理解这不是人为设置禁区,或者说简单本地计算就可以解决。当然回测上仍然有改善的空间,比如API接口上,我们考虑增加查询回测报告数据接口,策略在回测结束后可以查询回测结果数据,从而提升反复回测的自动化过程;您说的终端有时不能显示报表,应该是bug,下次遇到请截图反馈一下,我们会快速修复。

    2015-08-25 03:01:02
  • 仿真交易固然是未来要做的,但是在建立和验证策略的过程中,回测是不可避免的,缓慢不是问题,问题是不能做到。我们的策略中调用这几个函数并不是经常的事情,但是避不开的。

    如果您无法提供帮助的话,我们只好自己写了~还是谢谢您的帮助~

    2015-08-25 03:04:18
  • 本人也遇到了这样的问题,可能是大家对策略的理解不是非常一致。在策略中,信号的准确率在我看来不是重点,而资金管理和仓位控制对我来说会更为关注,因为其实这有这几方面的配合才能说是一个在统计意义和模式意义上有效的策略。另外,我只是对日级别行情进行操作,我相信这方面的数据回写并不会对效率产生太大的影响。
    或者能否慨率通过配置供选择。考虑到服务器压力,对于需要回写仓位等数据的回测可以进行数据量和计算量的限制。
    以上个人建议,总是还是非常感谢能提供使用离线IDE来编写策略的平台,非常感谢!

    2015-10-24 15:08:52
  • 谢谢建议。我会再评估一块功能。

    2015-10-29 06:36:00
  • 回测计划增加一种新模式,支持回测过程中作流式计算,提供cash/position/indicator等数据(推送,触发回调通知,以及查询支持),作为目前批处理回测模式的补充. 新模式的代价是一定程度的性能损失。

    两种模式回测时可供选择。

    2015-11-18 06:38:37
  • 刚想问,然后自动弹出了相关主题
    查不到position最烦的问题是在T+1的情况,当天买入了,破位止损要自己判断是否能下单,以及在一段时间后,要自己判断能买多少能卖多少,个人觉得加上的话回测会更接近真实情况,当然回测速度也很重要,你们这回测速度挺不错的,希望有个折中的办法。

    另外问问
    1、那个个股收盘的前几分钟没数据应该怎么处理比较好?我做5分钟,但你们没有5分钟回测,只好用1分钟计算够5分钟再处理一笔,但收盘那里处理的比较烦。
    2、strategy_init的subscribe_symbol_list里最多能放多少个逗号?

    PS.希望尽早提供获取列表函数吧😄

    2015-11-24 00:53:02
    1. (mod %5)判断 加上收盘时间检查?
    2. 没限制,至少全市场代码放在一起不会爆掉
    3. 列表函数下一版SDK升级加上吧。目前可以访问: http://forum.myquant.cn/t/c/2496 json格式的,很好解析。
    2015-11-24 03:18:22
  • 1、在on_bar那里不好判断吧,你们的数据同一个票有些是13:57有些13:56结束,(mod %5)没法知道啥时候结束,我现在判断也只能是第二天的数据到了才判断上一天的结束了,处理有点麻烦
    2、good!
    3、thx,之前看过,但不知道叫json格式:D

    2015-11-24 03:50:03
  • 1的情况,如果代码很不活跃,1分钟内没有交易,则不会生成该分钟的bar。

    [quote="c_y, post:12, topic:2148"]
    我现在判断也只能是第二天的数据到了才判断上一天的结束了
    [/quote]

    这样很好啊,解决了问题。

    2015-11-24 04:31:46

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