掘金社区
我之前尝试一小段策略代码的效果——用pycharm开始运行策略回测,然后修改一小段代码,再运行一次。(由于运行一个策略回测需要1分钟左右,所以这两次运行有40s左右同时在运行的时间),导致的结果是数据缓存坏了!!就是直接的数据错了,被程序修改了。
导致后来我一个个的运行策略的时候,结果也是非常诡异的,需要将gmcache中的文件删除,重新运行一次代码才获得了正常的结果。
查询google之后我发现这是因为多线程同时在操作这段数据的时候可能会修改该数据。我认为你们的数据应该设置为只读的,或者用其他方式来解决该问题。
@bidong @Bwlee
评论: 3
-
第一次回测策略时,策略是一边在线获取数据回测,一边将数据缓存起来。这样,第二次及以后回测时,可以高效的反复使用缓存数据。
如果在第一次回测没有结束时,又跑同一个策略的其他实例,两个实例同时写数据,会将缓存写乱。这是没办法避免的。
所以guideline是:
- 确保第一次运行完成后,再并发运行策略。
- 策略放到不同的目录,这样各有各的缓存
- 不要使用缓存
-
您好,看懂您的解释了。不过有没有很简单的办法将数据设定为只读呢?比如说在windows系统下直接将对应的缓存文件属性设定为只读怎么样?
-
问题的关键是在缓存没写完,策略1判断没写完或继续写,策略2同理会继续写。我们沟通一下,看有没对用户更友好的方式。谢谢