RQAlpha 增量运行 Mod
启用该 Mod 后,可以增量运行回测,方便长期跟踪策略而不必反复运行跑过的日期。
可以每天根据当日数据只运行当天的回测,节约计算资源,方便跟踪大量的策略。
目前自带两种持久化模式,可以通过 CsvRecorder 将状态持久化到磁盘上,或者通过 MongodbRecorder 将状态保存在数据库。
# 关闭增量运行 Mod
$ rqalpha mod disable incremental
# 启用增量运行 Mod
$ rqalpha mod enable incremental
{
"strategy_id": "1",
# 是否启用 csv 保存 feeds 功能,可以设置为 MongodbRecorder
"recorder": "CsvRecorder",
# 持久化数据输出文件夹
"persist_folder": None,
# mongodb
"mongo_url": "mongodb://localhost",
"mongo_dbname": "rqalpha_records",
}
使用默认的文件持久化
rqalpha run -f ~/strategy.py -s 2017-09-01 -e 2017-10-01 --account stock 100000 -l verbose --persist-folder ~/strategy-persist/strategy-1/
# 接着上次运行继续增量运行回测
# 此时传入的 account 信息会被持久化的数据覆盖
rqalpha run -f ~/strategy.py -s 2017-10-02 -e 2017-11-01 --account stock 100000 -l verbose --persist-folder ~/strategy-persist/strategy-1/
使用数据库持久化
rqalpha run -f ~/strategy.py -s 2017-10-16 -e 2017-10-20 --account stock 100000 --recorder MongodbRecorder --mongo-url mongodb://localhost --strategy-id 1
# 接着上次运行继续增量运行回测
# 此时传入的 account 信息会被持久化的数据覆盖
rqalpha run -f ~/strategy.py -s 2017-10-21 -e 2017-10-30 --account stock 100000 --recorder MongodbRecorder --mongo-url mongodb://localhost --strategy-id 1
读取 csv
import pandas as pd
portfolio_df = pd.read_csv("~/strategy-persist/strategy-1/portfolio.csv")
bm_portfolio_df = pd.read_csv("~/strategy-persist/strategy-1/bm_portfolio.csv")
trade_df = pd.read_csv("~/strategy-persist/strategy-1/trade.csv")
读取 mongodb
import pandas as pd
import pymongo
db = pymongo.MongoClient(mongo_url)["rqalpha_records"]
pd.DataFrame(db["portfolio"].find_one({"strategy_id": '1'}, {"data": 1, "_id": 0})["data"])
pd.DataFrame(list(db["trade"].find({"strategy_id": '1'}, {"_id": 0})))