ricequant / rqalpha

A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities
http://rqalpha.io
Other
5.36k stars 1.61k forks source link

持久化文件没有trade? #152

Closed dongyi closed 7 years ago

dongyi commented 7 years ago

1. RQAlpha的版本

2. Python的版本

3. 是Windows/Linux/MacOS or others?

4. 您出现问题对应的源码/或者能复现问题的简易代码 以及对应的配置

5. 您出现的错误堆栈日志信息

持久化目录里只有broker,core,event_source,global_vars, portfolio, universe, user_context,可以把最后输出的trade(交易记录)加进去不?

ps. 可否参数指定输出的目录? pps. realtime stock参数设置成fq 1m 但是实际执行还是3秒一次, 这是feature还是bug?

dongyi commented 7 years ago

还有就是希望能持久化每日的portfoliol里的净值变化, 回测时候这部分是analyser模块记录在临时变量里的,实盘的时候如果中断/恢复 就看不到净值变化了

wh1100717 commented 7 years ago

@dongyi 有trade啊 https://github.com/ricequant/rqalpha/blob/master/rqalpha/mod/rqalpha_mod_sys_analyser/mod.py#L59

https://github.com/ricequant/rqalpha/blob/master/rqalpha/mod/rqalpha_mod_sys_analyser/README.rst#模块配置项 参数配置中 report_save_path 就是指定输出的目录的。

portfolio 里面的 unit_net_value 就是净值。 如果你做了persist, resume的时候应该是会被恢复的才对....

dongyi commented 7 years ago

不好意思没表达清楚 你说的这个是report的csv文件吧 , 我指的是persist/strategy下面这些 用jsonpickle存储的文件,我刚运行了一下还是没有trade这个文件,另外几个文件都是在实时更新的, 也产生了trade事件。

我说净值的意思是我想要记录净值的变化,现在只有记录当前净值,如果我自己记录变化的话,在pause/resume的时候就比较麻烦

wh1100717 commented 7 years ago

@dongyi analyser 的pickle 也是有记录trades的 但是刚才看了一下 你这个运行 paper trading, 这个执行逻辑和回测是不一样的。

analyser 是回测全部运行完以后统一进行pickle导出的。 paper trading 没有所谓的结束,所以analyser不适用。

如果你想要在PT 阶段实时获取这些数据,需要自行扩展,这个其实也不复杂,简单来说,就是注册事件,在事件处理函数中获取你需要的数据,然后直接存储到数据库/文件中。

你需要的 persist 额外的内容,也是可以做到的,可以参考一下这个issue https://github.com/ricequant/rqalpha/issues/52

或者看一下 系统自带的 persist 是如何实现的。

https://github.com/ricequant/rqalpha/blob/master/rqalpha/main.py#L262

不过Persist 这块未来可能会重构,提供更简单的通用的持久化接口。

dongyi commented 7 years ago

@wh1100717 好的谢谢

han14466 commented 4 years ago

请问这个大家是如何在PT中实现的trade历史记录和portfolio历史记录的持久化?我目前是在DiskPersistProvider中当portfolio == key的时候多append一个文件。trade目前发现没有实现set_state和get_state方法,这个是不是要自己实现一下,然后注册到persist_helper.register中呢?