分享

qlib从入门到精通(一)

 sywjnew 2024-03-20 发布于辽宁

1、安装:

pip install pyqlib

pyqlib依赖的包比较大,它的定位不只是一个量化开发包了,而是一个量化平台。

从数据存储,指标计算,量化模型,回测,模型,结果分析等都有完整的覆盖。

  1. >>> import qlib
  2. >>> qlib.__version__
  3. 0.8.6

特别说明,它依赖pytorch和lighgtGBM,一个是深度学习框架,一个是传统机器学习的前沿,说明这个框架定位AI量化平台是非常合适的。

2、数据准备

python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

scripts/get_data.py这个安装完成pip包是没有的,我从github上直接下载整个代码包,搁到开发环境中,一是里边有示例,脚本,二来这份代码还是值得好好读一读的。

把代码包下载到qlib-main里,当前目录创建文件夹:data,

使用如下命令,下载A股所有的日线数据(有没有包含退市的?)

python qlib-main/scripts/get_data.py qlib_data --target_dir ./data/cn_data --region cn 

  1. import qlib
  2. # region in [REG_CN, REG_US]
  3. from qlib.constant import REG_CN
  4. provider_uri = "./data/cn_data" # target_dir
  5. qlib.init(provider_uri=provider_uri, region=REG_CN)

把provider_uri指定我们的数据目录即可。

可以直接从数据中把某几支股票的数据读出来,返回来是一个复杂索引的pandas的dataframe,与我们自有的分析生态可以很好的结合,纯粹把qlib的数据层当做数据库也不错,由于是本地及内存计算,所以速度很快:

  1. data = D.features(["sh600519"], ['$close'], start_time="20200101")
  2. print(data)
  3. data['$close'].plot()
  4. import matplotlib.pyplot as plt
  5. plt.show()

建立自己的数据——以可转债为例。

先通过tushare把400多支可转债的日线数据下载到本地csv,

 

  1. python scripts/dump_bin.py dump_all --csv_path ~/.qlib/csv_data/my_data --qlib_dir ~/.qlib/qlib_data/my_data --include_fields open,close,high,low,volume,factor
  2. python qlib-main/scripts/dump_bin.py dump_all --csv_path ./cb_quotes --qlib_dir ./data//cb_data --include_fields open,close,high,low,volume,factor --symbol_field_name ts_code --date_field_name trade_date
  3. #使用--symbol_field_name可以指数symbole列,--date_field_name可以指定date列

筛选出可交易的列表:

比如昨天收盘价在120块以下的可转债的列表。

  1. expressionDFilter = ExpressionDFilter(rule_expression='$close<130')
  2. instruments = D.instruments(market='all', filter_pipe=[expressionDFilter])
  3. instu = D.list_instruments(instruments=instruments, start_time='2022-08-02', end_time='2022-08-03', as_list=True)
  4. print(instu)

这里的表达式,可以使用各种复合计算:

比如就是 ”收盘价比前一天收盘价高“

expressionDFilter = ExpressionDFilter(rule_expression='$close>Ref($close,1)')

假如我们这700多支转债是存在mongo库里,我们要先筛选出日期。然后对这些日期计算 今天收盘比昨天高这个规则。而且可以是一段时间如此的。

这里就很难预先计算了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多