Thanks to visit codestin.com
Credit goes to github.com

Skip to content

hugo2046/qlib-ddb

 
 

Repository files navigation

Python Versions Platform PypI Versions Upload Python Package Github Actions Test Status Documentation Status License Join the chat at https://gitter.im/Microsoft/qlib

📰 What's NEW!   💖

Recent released features

TODO

  • 接入DolphinDB
  • 优化对分钟及Tick级别的支持
  • 接入DolphinDB表达式计算

使说明

1.首先部署DolphindD

参看DolphinDB官方说明单节点部署与升级

2.依赖

同时依赖python下的dolphindb包

pip install dolphindb

3.建立DolphinDB库用于Qlib连接

此部分代码在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 

4.使用Qlib

4.1 使用DolphinDB作为数据源

使用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")

4.1 使用D.ddb_features进行计算

由于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",
)

更多qlib模型可以加入星球

image

About

将DolphinDB接入Qlib

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.3%
  • Other 0.7%