使用Qlib 进行数据处理工作流程的示例:
- 用户下载数据并将数据转换为Qlib格式(文件名后缀为.bin)。在此步骤中,通常仅将一些基本数据存储在磁盘上(例如OHLCV)。O (Open):开盘价,即该交易日内第一笔成交的价格。
H (High):最高价,该交易日内成交价格的最高点。
L (Low):最低价,该交易日内成交价格的最低点。
C (Close):收盘价,即该交易日内最后一笔成交的价格。
V (Volume):成交量,该交易日内所有成交的数量总和。 - 基于Qlib的表达式引擎创建一些基本功能(例如“Ref($close, 60) / $close”,最近60个交易日的回报)。可以在此链接找到表达式引擎中支持的运算符。此步骤通常在 Qlib 的Data Loader中实现,它是Data Handler的一个组件。
- 如果用户需要更复杂的数据处理(例如数据标准化), Data Handler支持用户定制的处理器来处理数据(一些预定义的处理器可以在这里找到)。处理器与表达式引擎中的运算符不同。它是针对一些复杂的数据处理方法而设计的,这些方法在表达式引擎的运算符中很难支持。
- 最后,Dataset负责从 Data Handler 处理后的数据中准备模型特定的数据集
数据准备
Qlib专门设计了一个数据结构来管理财务数据,详细信息请参考Qlib论文中的文件存储设计部分。此类数据将以文件名后缀.bin存储(我们将它们称为.bin文件、.bin格式或 qlib 格式)。.bin文件专为金融数据的科学计算而设计。
Alpha360 和 Alpha158 是两套生成交易信号或特征的系统。在量化交易中,这些"Alpha"系统用于捕捉能够预测股票价格变动的模式。
Alpha360 可能包含360个不同的特征,覆盖多种市场情况和交易数据,用来构建全面的交易模型。
Alpha158 则包含158个特征,可能侧重于特定类型的市场数据或技术指标。
此外,Qlib还提供了高频数据集。用户可以通过此链接运行高频数据集示例。
Qlib格式数据集
Qlib提供了现成的.bin格式的数据集,用户可以使用脚本scripts/get_data.py下载China-Stock数据集,如下所示。用户还可以使用 numpy 加载.bin文件来验证数据。成交量数据看起来与实际成交价格有所不同,因为它们经过了调整(调整后的价格)。然后你可能会发现,不同的数据源调整后的价格可能会有所不同。这是因为不同的数据源调整价格的方式可能会有所不同。 Qlib在调整时将每只股票的第一个交易日价格归一化为1。用户可以利用
f
a
c
t
o
r
得到原始交易价格(例如
factor 得到原始交易价格(例如
factor得到原始交易价格(例如close / $factor得到原始收盘价)。
以下是关于Qlib价格调整的一些讨论:
讨论区
# download 1d
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# download 1min
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/qlib_cn_1min --region cn --interval 1min
除了中国股票数据外,Qlib还包括美国股票数据集,可以通过以下命令下载:
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/us_data --region us
运行上述命令后,用户可以分别在该目录下和该目录下找到Qlib格式为 china-stock 和 us-stock 的数据。/.qlib/qlib_data/cn_data/.qlib/qlib_data/us_data
Qlib还提供了脚本scripts/data_collector帮助用户抓取网上最新的数据并转换为qlib格式。
每日频率数据自动更新
建议用户手动更新一次数据(–trading_date 2021-05-25),然后设置为自动更新。
更多可以参考雅虎收集器
每个交易日自动更新数据到“qlib”目录
(只对Linux有效)使用crontab:crontab -e
设置定时任务
python <script path> update_data_to_bin --qlib_data_1d_dir <user data dir>
手动更新数据
python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir <user data dir> --trading_date <start date> --end_date <end date>
Trading_date : 交易日开始
end_date : 交易日结束(不包括在内)
将CSV格式转换为Qlib格式
Qlib提供了将CSV 格式的任何数据用scripts/dump_bin.py转换为.bin文件(格式)的脚本,只要它们的格式正确即可。Qlib除了下载准备好的演示数据外,用户还可以直接从 Collector 下载演示数据,参考 CSV 格式。以下是一些示例:
除了下载准备好的演示数据外,用户还可以直接从 Collector 下载演示数据,参考 CSV 格式。
以下是一些示例:
对于每日数据:python scripts/get_data.py download_data --file_name csv_data_cn.zip --target_dir ~/.qlib/csv_data/cn_data
- python - 这部分是调用 Python 解释器,用来执行接下来的 Python 脚本。
- scripts/get_data.py - 这是要执行的 Python 脚本的路径。它可能包含了一些功能来处理数据的下载。
- download_data - 这可能是 get_data.py 脚本中定义的一个功能或者命令行参数,用于指示脚本执行下载数据的操作。
- –file_name csv_data_cn.zip - 这是一个命令行参数,指定要下载的文件名为 csv_data_cn.zip。
- –target_dir ~/.qlib/csv_data/cn_data - 这是另一个命令行参数,指定下载文件的存储目标目录。这里的 ~ 符号通常表示用户的主目录,所以这个路径指向用户主目录下的 .qlib/csv_data/cn_data 文件夹。
- 总体来说,这行命令的目的是通过 Python 脚本下载指定的数据文件 csv_data_cn.zip 并将其保存到指定的目录中。这种方式通常用于自动化处理数据下载和管理,特别是在处理大量或定期更新的数据集时。
对于1分钟数据:python scripts/data_collector/yahoo/collector.py download_data --source_dir ~/.qlib/stock_data/source/cn_1min --region CN --start 2021-05-20 --end 2021-05-23 --delay 0.1 --interval 1min --limit_nums 10
- scripts/data_collector/yahoo/collector.py - 指定要执行的 Python 脚本路径。这个脚本位于一个专门用于从雅虎财经收集数据的目录下。
- download_data - 可能是 collector.py 脚本中的一个功能,用于下载数据。
- –source_dir ~/.qlib/stock_data/source/cn_1min - 指定下载数据的存储目录。这个目录用于存放下载后的数据,位于用户主目录下的 .qlib/stock_data/source/cn_1min。
- –region CN - 指定数据的地区或市场为中国(CN)。
- –start 2021-05-20 - 指定数据下载的开始日期。
- –end 2021-05-23 - 指定数据下载的结束日期。
- –delay 0.1 - 指定请求之间的延迟,单位为秒。这通常用于避免因请求过于频繁而触发数据源的速率限制。
- –interval 1min - 指定数据的时间间隔为1分钟。这表示下载的是以1分钟为单位的时间序列数据。
- –limit_nums 10 - 是限制下载的数据量或请求次数的参数,这里设置为10。
- 这行命令的主要作用是从雅虎财经按指定的日期范围、地区和时间间隔下载股票数据,并根据给定的目录和其他参数存储这些数据。这种数据通常用于高频交易分析或其他需要细粒度时间序列数据的金融分析任务。
用户还可以以 CSV 格式提供自己的数据。但是,CSV 数据必须满足以下条件:
1.CSV 文件以特定股票命名或CSV 文件包含股票名称列
- 以股票命名 CSV 文件:SH600000.csv、AAPL.csv(不区分大小写)。
- CSV 文件包含一列股票名称。用户转储数据时必须指定列名。这是一个例子:
python scripts/dump_bin.py dump_all ... --symbol_field_name symbol
这行命令涉及使用 Python 执行一个脚本 dump_bin.py,并调用其中的 dump_all 功能,附带一些参数,主要用于处理和转换股票市场数据。 - scripts/dump_bin.py - 要执行的 Python 脚本的路径。这个脚本负责将数据转换为二进制格式或执行相关的数据处理任务。
- dump_all - 这是 dump_bin.py 脚本中定义的一个函数或命令,用于执行全面的数据转储操作。
–symbol_field_name symbol - 此参数指定在数据中用于识别不同股票或资产的字段名称为 symbol。这个字段名通常用于区分数据集中的各种股票符号。
2.CSV 文件必须包含日期列,转储数据时,用户必须指定日期列名称。这是一个例子:
`python scripts/dump_bin.py dump_all ... --date_field_name date`
- –date_field_name date - 此参数指定数据中用于表示日期的字段名称是 date。在处理金融时间序列数据时,正确识别日期字段是非常重要的,因为它关系到数据的排序、分组和索引。
假设用户在目录中准备好CSV格式数据~/.qlib/csv_data/my_data,可以运行以下命令开始转换。
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
- –csv_path ~/.qlib/csv_data/my_data - 指定了包含源 CSV 文件的目录路径。这里的 ~ 代表用户的主目录,所以数据源目录是用户主目录下的 .qlib/csv_data/my_data 文件夹。
- –qlib_dir ~/.qlib/qlib_data/my_data - 指定了转换后的数据应该存储的目录路径。同样地,这个路径是在用户的主目录下。
- –include_fields open,close,high,low,volume,factor - 指定了在转换过程中应该包括哪些字段。这些字段包括开盘价(open)、收盘价(close)、最高价(high)、最低价(low)、成交量(volume)和一个叫做“factor”的字段,通常用于股价调整。
- 这个命令的用途是将指定目录下的 CSV 格式的股票数据转换为 Qlib 能够处理的二进制格式,并存储在指定的位置,同时只包括特定的数据字段。这种转换有助于 Qlib 更高效地处理和访问这些数据,特别是在进行复杂的金融分析和模型训练时。
- 还可以用dump_all --help参考信息
股票池(市场)
Qlib将库存池定义为库存列表及其日期范围。预定义的股票池(例如csi300)可以按如下方式导入。
python collector.py --index_name CSI300 --qlib_dir <user qlib data dir> --method parse_instruments
- 这行命令用 Python 运行一个叫做 collector.py 的脚本,并传递了一些特定的参数。它主要用于处理与金融市场指数相关的数据。
- –index_name CSI300 - 这个参数指定了要处理的股票指数名称,这里是“CSI300”,即中证300指数,这是中国股市中300只代表性股票的市场表现指数。
- –qlib_dir user qlib data dir - 这个参数应该替换为实际的目录路径,该路径是 Qlib 数据存储的位置。用户需要将 user qlib data dir替换为实际的文件路径,这里的路径用于存储或访问 Qlib 需要的数据。
- –method parse_instruments - 这个参数指定了脚本中要执行的方法或功能,这里是 parse_instruments。用于解析或处理与指定指数相关的金融工具或数据。
- 这个命令用于解析或更新与中证300指数相关的金融工具数据,可能包括股票列表、相关性数据或其他与该指数相关的元数据。通过指定 Qlib 的数据目录,该命令确保处理的数据可以直接被 Qlib 识别和使用,这对于进行量化分析和模型训练是必要的。
多种库存模式
Qlib现为用户提供两种不同的股票模式:中国股票模式和美国股票模式。以下是这两种模式的一些不同设置:
交易单位定义了一次交易中可以使用的股票单位数量,限制阈值定义了股票涨跌百分比的界限。
如果用户使用Qlib中概股模式,则需要中概股数据。用户可以Qlib按照以下步骤在中国库存模式下使用:
- 下载qlib格式的china-stock,请参考Qlib格式数据集部分.
- Qlib以中国库存模式初始化 假设用户在目录中下载他们的Qlib格式数据~/.qlib/qlib_data/cn_data。用户只需Qlib按如下方式初始化即可。
from qlib.constant import REG_CN
qlib.init(provider_uri='~/.qlib/qlib_data/cn_data', region=REG_CN)
如果用户使用Qlib美股模式,则需要提供美股数据。Qlib还提供了下载美国股票数据的脚本。用户可以Qlib按照以下步骤在美股模式下使用:
下载qlib格式的us-stock,请参考Qlib格式数据集部分。
Qlib美股模式初始化 假设用户在该目录中准备了Qlib格式的数据~/.qlib/qlib_data/us_data。用户只需Qlib按如下方式初始化即可。
from qlib.config import REG_US
qlib.init(provider_uri='~/.qlib/qlib_data/us_data', region=REG_US)