Recent released features
- 接入DolphinDB
- 优化对分钟及Tick级别的支持
- 接入DolphinDB表达式计算
参看DolphinDB官方说明单节点部署与升级
同时依赖python下的dolphindb包
pip install dolphindb此部分代码在qlib/data/backend/ddb_qlib下,详见:qlib-ddb
创建DolphinDB库
from qlib.data.backend.ddb_qlib import create_qlib_table
from qlib.data.backend.ddb_qlib.schemas import QlibTableSchema
# 连接格式
uri = "dolphin://admin:123456@localhost:8848"
# 创建特征数据表
create_feature_daily_table(uri)
# 创建股票信息表
create_instrument_table(uri)
# 创建交易日历表
create_calendar_table(uri)或者直接使用脚本,这样直接使用ddb默认连接创建,也可以使用--ddb_uri参数指定
cd /qlib-ddb/examples/初始创建ddb数据库
python test_ddb_op.py --clean_db True导入数据 如果是WIND数据库可以直接从mysql同步过来
from .ddb_operator import cinit_qlib_ddb_from_mysql
ddb_uri: str = "dolphin://admin:123456@localhost:8848"
mysql_uri: str = "mysql+mysqlconnector://root:123456@localhost:3306/windDB"
# 测试导入初始数据
init_qlib_ddb_from_mysql(ddb_uri, mysql_uri)或者使用脚本从WIND数据库同步数据到DolphinDB数据库,如果没参数则使用默认连接,这里有两个参数--ddb_uri和--mysql_uri,可以自行指定。
cd /qlib-ddb/examples/初始创建ddb数据库
python syn_mysql_to_ddb.py 使用D.features获取数据或进行表达式计算
import qlib
from qlib.constant import REG_CN
from qlib.data import D
import pandas as pd
# 初始化qlib
uri = "dolphin://admin:123456@localhost:8848"
qlib.init(database_uri=uri,region=REG_CN)
# 获取股票池
pool = D.instruments("ashares")
codes:List[str] = D.list_instruments(pool, as_list=True)
print("股票池:")
print(codes[:10])
# 获取日历
calcendar = D.calendar()
print("交易日历:")
print(calcendar[-10:])
# 根据表达式计算
D.features(
codes,
start_time="2021-01-01",
end_time="2024-04-12",
fields=["Ref($S_DQ_ADJCLOSE, -2)/Ref($S_DQ_ADJCLOSE, -1) - 1"],
)使用QlibDataLoader计算alpha158因子
from qlib.contrib.data.loader import Alpha158DL
from qlib.data.dataset.loader import QlibDataLoader
conf = {
"kbar": {},
"price": {
"windows": [0],
"feature": ["OPEN", "HIGH", "LOW", "VWAP"],
},
"rolling": {},
}
alpha158:List[List] = Alpha158DL().get_feature_config(conf)
# 获取因子表达
alpha158_expression = alpha158[0]
# 获取因子名
alpha158_names = alpha158[1]
# 因子计算
qdl:QlibDataLoader = QlibDataLoader(config=(alpha158_expression, alpha158_names))
dataset:pd.DataFrame = qdl.load(instruments=codes, start_time="2021-01-01", end_time="2023-12-31")由于qlib.data.backend.ddb_qlib的设计是为了支持DolphinDB的表达式计算,所以可以直接使用D.ddb_features进行计算,对应的qlib.data.backend.ddb_qlib.ddb_scripts中写入了WorldQuant 101 Alpha 因子指标、国泰君安 191 Alpha 指标和Alpha158因子指标的表达式计算脚本,可以直接使用。
其中WQAlpha1表示WorldQuant 101 Alpha 因子中的1号因子,gtjaAlpha1表示国泰君安 191 Alpha 中的1号因子,qlib158Alpha1表示Alpha158因子中的1号因子。
D.ddb_feature(
instruments=codes,
field=[
"WQAlpha1($close)",
"$high",
"gtjaAlpha1($open, $close, $volume)",
"qlib158Alpha1($open,$close)",
],
start_time="2020-01-01",
end_time="2023-12-31",
freq="day",
)