Expanded Rqalpha Data and Event Source by Fxdayu
介绍
rqalpha是一款开源的基于事件驱动的交易执行引擎,其架构高度解耦,支持各种mod拓展。
本mod主要拓展了rqalpha数据源和事件源,数据源共有3种方案,前2种为公司内部使用, 分别基于mongodb和bcolz的压缩格式文件,外部很难接入。最新加入第3种对接tushare-pro开源财经数据源(感谢米哥), 使用起来非常方便。
特点
- 依托于tushare-pro的数据服务,只要有网络通畅就可以进行回测和实时交易,无需额外数据文件下载或数据库搭建
- 使用简单,只需安装、激活此mod,加入相应配置,并在quantos得到使用tushare-pro数据服务的权限即可
- 支持按多种时间频率获取数据
*d | 任意天,1d,5d等 |
*h | quantos数据暂未实现 |
*m | 任意分钟,1m,5m,10m等 |
- 内置简单的数据缓存(Beta)
安装
$ pip install git+https://github.com/xingetouzi/rqalpha-mod-fxdayu-source.git
$ rqalpha mod install fxdayu_source
用例
strategy.py
# -*- coding: utf-8 -*-
import itertools
import os
from rqalpha.api import *
import pandas as pd
from rqalpha.utils.datetime_func import convert_dt_to_int
from rqalpha import run
def init(context):
logger.info("init")
context.s1 = "000001.XSHE"
update_universe(context.s1)
context.fired = False
def before_trading(context):
pass
def handle_bar(context, bar_dict):
bar = bar_dict[context.s1]
print(bar)
assert bar.datetime == context.now
lengths = [5]
frequencies = ["1m"]
for l, f in itertools.product(lengths, frequencies):
# print(pd.DataFrame(history_bars(context.s1, 5, "1d", include_now=True)))
df = pd.DataFrame(history_bars(context.s1, l, f))
print(df)
assert len(df) == l
assert convert_dt_to_int(context.now) == df["datetime"].iloc[-1]
if not context.fired:
# order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
order_percent(context.s1, 1)
context.fired = True
config = {
"base": {
"start_date": "2016-06-01",
"end_date": "2016-06-05",
"accounts": {"stock": 100000},
"frequency": "1m",
"benchmark": None,
"strategy_file": __file__
},
"extra": {
"log_level": "verbose",
},
"mod": {
"sys_analyser": {
"enabled": True,
# "report_save_path": ".",
"plot": True
},
"sys_simulation": {
"enabled": True,
# "matching_type": "last"
},
"fxdayu_source": {
"enabled": True,
"source": "quantos",
"quantos_user": "139xxxxxxxx", # 填入您的quantos用户名
"quantos_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 填入您的quantos Token
# 其他配置参数
}
}
}
if __name__ == "__main__":
# 您可以指定您要传递的参数
run(config=config)
运行strategy.py可以看到结果,没有发生AssertionError表示能够正常读取数据。
$ python strategy.py
配置选项
选项 | 默认值 | 适用数据源类型 | 含义 |
---|---|---|---|
fxdayu_source.enabled | "quantos" | 通用 | 行情源类型,可选值为"mongo","bundle","quantos" |
fxdayu_source.bundle_path | None | bundle | bundle数据文件位置,默认取"~/.fxdayu/bundle", 可以用环境变量覆盖,取值为"$FXDAYU_ROOT/bundle" |
fxdayu_source.mongo_url | "mongodb://localhost:27017" | mongo | mongodb数据库地址 |
fxdayu_source.enable_cache | True | 通用 | bool型,是否开启分页读取缓存优化功能(缓存优化适用于回测)。 |
fxdayu_source.cache_length | 1000 | 通用 | 当开启缓存优化时,指定单页缓存的条目数 |
fxdayu_source.quantos_url | "tcp://data.quantos.org:8910" | quantos | 可选,tushare服务器地址,默认不需要配置 |
fxdayu_source.quantos_user | None | quantos | 必填,quantos用户名,可以从环境变量QUANTOS_USER传入 |
fxdayu_source.quantos_token | None | quantos | 必填,quantos Token,可以从环境变量QUANTOS_TOKEN传入 |
说明
由于此mod使用了一些原来内部方案中的代码,故没有单独作为独立的模块。暂时不打算走正常的发布流程(旧的代码短期内可能有很大改动),也不会发布到pypi,只分为master和dev分支,master为稳定分支,dev为开发分支, 功能变更将按日期写入changelog中。
加入开发
欢迎提交各种Issue和Pull Request。