Qlib实战:Alpha158与Alpha360因子数据解析与实战应用

用Qlib模拟实战中机器学习多因子预测的流程:必须滚动预测 在实战中,是滚动训练和预测的,比如执行月度调仓,那么可能每月底都要重新训练和预测,这里滚动步长step就是一个月。因此,在进行模型绩效评价时,也要模拟实战这种滚动的过程,这样的评价结果才更加符合实际。绝大多数同学学习qlib,是从qlib提供的基本案例workflow_by_code.ipynb开始的,从文件名workfow可以看出,它隐含了一个基本的使用机器学习执行多因子预测的基本流(工作流)。”,期望将机器学习用于实战的同学可以去看看,课程头几节是免费的,详细介绍了qlib中滚动训练预测的原理。 阅读详情

1. 从零开始:为什么你需要了解Alpha158和Alpha360?

如果你刚开始接触量化投资,或者对Qlib这个强大的AI量化平台感兴趣,那你大概率会和我当初一样,面对一堆陌生的术语和代码感到无从下手。特别是当你想用机器学习模型来预测股价时,第一步——准备特征数据(也就是我们常说的“因子”),往往就是最大的拦路虎。Qlib内置了两个非常经典的因子集合:Alpha158和Alpha360。它们就像是平台为你准备好的、开箱即用的“高级食材包”,你不需要从种菜开始,就能直接下锅烹饪。

但问题来了,这两个“食材包”里到底有什么?Alpha158的158个因子都是啥意思?Alpha360的360个因子又多了些什么?它们的设计逻辑是什么?更重要的是,我该怎么用代码把它们“取”出来,看看长什么样?这些都是实战中必须搞清楚的。我刚开始用的时候,也花了不少时间翻源码、看零星的文档、自己调试验证。今天,我就把我踩过的坑和总结的经验,用最直白的方式分享给你,帮你快速上手,把精力集中在更重要的模型构建上。

简单来说,Alpha158是一个经过精心设计的多维度技术因子集合,它从价格、成交量、波动率等多个角度,计算了158个特征。而Alpha360则采用了另一种思路,它是一个基于过去60个交易日(约3个月)的原始价格序列构建的因子集,包含了收盘价、开盘价、最高价、最低价、成交量加权平均价(VWAP)和成交量这6个基础数据在过去60天的历史值,6 * 60 = 360,因此得名。理解这两者的区别,是你选择适合自己策略的第一步。

2. 实战第一步:手把手运行你的第一个因子数据提取代码

理论说再多,不如跑一遍代码来得实在。我们先从最简单的开始:写一个脚本,把Alpha158的数据拉出来看看。别担心,我会把每一步都拆开讲清楚。

2.1 环境准备与数据初始化

首先,你得确保已经安装好了Qlib。通常一句 pip install pyqlib 就能搞定。安装后,最关键的一步是初始化Qlib并设置数据路径。Qlib本身不提供数据,你需要提前准备好数据,或者使用它提供的脚本下载数据。这里假设你已经有一份本地的A股数据快照(cn_data)。

import qlib
from qlib.contrib.data.handler import Alpha158

def main():
    # 1. 初始化Qlib,这是所有操作的起点
    # 注意:provider_uri 要换成你自己存放qlib数据的绝对路径
    qlib.init(provider_uri="~/your_path/qlib_data/cn_data_snapshot", region="cn")

这里的 provider_uri 参数就像告诉Qlib:“我的数据仓库在这个文件夹里”。region="cn" 指定使用A股市场的数据格式和日历。这一步如果成功了,日志里会打印出 qlib successfully initialized,如果失败了,八成是路径不对或者数据没准备好,需要回头检查。

2.2 创建Alpha158数据处理器(DataHandler)

初始化之后,我们就可以创建一个专门处理Alpha158因子的“机器”了,这个机器在Qlib里叫做 DataHandler。

    # 2. 创建Alpha158的数据处理器
    # 为了演示和快速运行,我们只选一只股票(沪深300指数SH000905),时间范围也缩短到2个月
    handler = Alpha158(
        instruments=["SH000905"], # 股票池,这里只放了一只指数
        start_time="2018-01-01",  # 开始时间
        end_time="2018-03-01",    # 结束时间
        freq="day",                # 数据频率,日线
        fit_start_time="2018-01-01", # 数据标准化拟合的开始时间,通常和start_time一致
        fit_end_time="2018-03-01"    # 数据标准化拟合的结束时间
    )

这里有几个参数很关键:

  • instruments: 这是一个列表,里面放你要研究的股票代码。实战中这里可能会是 [“SH600519”, “SZ000858”] 这样的几百只股票列表。我们先从一只开始,跑得快。
  • start_time / end_time: 定义你需要数据的起止日期。
  • freq: 数据频率,日线数据就是“day”。
  • fit_start_time / fit_end_time: 这是最容易忽略但极其重要的参数。Alpha158在输出特征前,会对原始数据进行一系列预处理,比如去极值、标准化。这个“标准化”的均值和标准差,就是根据 fit_start_time 到 fit_end_time 这个窗口内的数据计算出来的。通常,我们会用训练集的时间段来做拟
微软AI量化平台Qlib:你需要知道的核心知识点 这些知识点有些散落在互联网零碎的文章中,有些文章还是错误的误导读者,有些知识点还没有出现在现有文章中。为此,我们将这些知识点加以总结,形成较为系统化的课程,知识点总结如下,10.5.2. 实现接口__init__,fit,predict,get_feature_importance(可选)先说一下,不要用pip install pyqlib来安装qlib,他目前会安装0.8.6版,该版运行会出错。交易日历day.txt自动生成,取所有csv文件的日期合集, 制作股票池文件。 阅读详情

相关推荐

别再死盯K线了,我用微软Qlib撸了个A股因子择时系统,效果出奇地稳

踩坑提醒💡:这里如果你忘了,你会发现很多 shift 出来的数据对不上股票……

奔跑的蜗牛 2640

Qlib因子库深度解析:Alpha158 vs Alpha360,到底该选哪个?从原理到实战的避坑指南

本文深度解析Qlib因子库中的Alpha158与Alpha360,从设计哲学、计算开销到模型适配性进行全面对比。Alpha158提供预计算的技术指标,适合快速开发和传统模型;Alpha360保留原始价格数据,更适合深度学习和长周期分析。文章还提供实战选型建议和常见问题解决方案,帮助量化投资者做出明智选择。

weixin_30335575的博客 547

微软开源AI量化平台Qlib全解析:数据、因子、模型与回测实战

量化交易是金融与AI技术结合的典型应用,其核心挑战在于构建一套从数据处理、因子挖掘到模型训练、回测验证的完整工程链路。Qlib作为微软开源的高Star项目,提供模块化全流程平台,统一数据接口与特征工程,内置LightGBM、Transformer等模型,并集成严谨的回测引擎。通过Alpha158因子集与时间序列切分,可快速验证策略有效性。本文从量化交易的基础概念出发,阐述AI技术如何落地于选股与风控,分析工程化实践中的关键细节,并最终聚焦到Qlib平台的具体用法与避坑指南,帮助研究者和开发者高效搭建自己的量

weixin_34090562的博客 906

Qlib数据准备全攻略:从Alpha158到高频数据集,手把手教你转换.bin格式

本文详细介绍了Qlib数据准备的完整流程,从基础配置到高频数据处理,特别针对中国A股和美股市场。涵盖Alpha158到高频数据集的转换方法,手把手教你如何将CSV数据转换为Qlib专用的.bin格式,提升量化交易模型的性能。

hill8的博客 819

Alpha158与Alpha360因子集解析及量化投资应用

量化投资中的因子分析是构建有效交易策略的核心技术。Alpha因子作为预测股票收益的重要特征,通常分为传统技术指标和时序特征两大类。Alpha158因子集包含158个精心设计的特征,涵盖K线形态、价格特征等技术指标,适合LightGBM等传统机器学习模型。而Alpha360提供360个原始价格序列,保留完整时序信息,专为LSTM、Transformer等深度学习模型优化。在实际应用中,合理选择因子集并结合特征工程技巧,能显著提升模型预测能力。特别是在处理A股等波动较大市场时,加入平滑项等技术细节可提升23%的

weixin_29193359的博客 199

Qlib实战:Alpha158和Alpha360因子数据怎么用?一个Python脚本帮你快速验证和可视化

本文深入解析Qlib平台中的Alpha158和Alpha360因子数据,提供Python实战脚本帮助用户快速验证和可视化因子表现。通过详细的环境搭建、数据加载、因子分类解析和可视化分析,指导量化研究人员高效利用这两套专业因子库进行策略开发,特别适合中国A股市场的量化分析需求。

weixin_30338481的博客 549

手把手教你用Simulink搭建PMSM FOC控制模型(附完整仿真文件下载)

本文手把手教你使用Simulink搭建完整的永磁同步电机(PMSM)磁场定向控制(FOC)仿真模型。内容涵盖从电机与逆变器建模、核心的坐标变换(Clark/Park变换)实现、电流环与速度环PID整定,到SVPWM调制与系统集成调试的全过程,并提供关键参数设置与实用调试技巧,帮助工程师快速掌握FOC的工程实现。

silver的专栏 863

SmsForwarder v6.4.0 + Flask API 实战:5步搭建手机验证码自动化接收服务

本文详细介绍了如何利用SmsForwarder v6.4.0和Flask API构建企业级验证码自动化处理系统。通过5个关键步骤,包括系统架构设计、Android端配置、Flask服务端实现、企业级部署方案以及实战应用场景扩展,帮助开发者高效处理短信验证码,提升自动化测试和数据采集的工作效率。

weixin_30292745的博客 393

hCaptcha Enterprise绕过方案对比:四种Capsolver任务类型怎么选?

本文深入评测了hCaptcha Enterprise的四种Capsolver任务类型(HCaptchaEnterpriseTask、HCaptchaEnterpriseTaskProxyLess、HCaptchaTurboTask和HCaptchaTurboTaskProxyLess),分析其技术架构、性能表现及适用场景。通过基准测试和成本模型比较,帮助技术团队选择最优解决方案,提升自动化流程的验证通过率与成本效益。

rrr55的博客 323

UQLab——其他概率分布随机变量转换标准Gaussian分布

1、使用UQLab将其他类型的随机变量转换成标准Gaussian分布; 2、使用科学计数法输出样本,方便后续ANSYS的调用分析; 3、基于MC的可靠度分析。 原随机变量分布类型: % 调用UQLab进行采样 clc clear uqlab %% Specify these distributions as a UQLab INPUT object: PriorOpts.Marginals(1...

ikhui7的博客 3014

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例)

本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。

weixin_42683394的博客 527

用Excel或WPS做两独立样本的T检验

一般情况下收集数据时常用的是Excel或者WPS,但统计时却用SPSS等软件进行统计学分析,经常很多人找不到SPSS的安装包,或者苦于正版激活或忘记教程,其实Excel或WPS自带函数就足够了,均数、标准差以及统计检验都是一个函数而已。解释:先做F检验,如果F>0.05就做T检验,Ttset里的数据为两组的数据的比较,结果如下。A组的均数计算 =AVERAGE(B2:B6)A组的标准差计算 =STDEV(B2:B6)B组的标准差计算=STDEV(B7:B19)分组 数值 A组均数 A组标准差 p值。

Mrrunsen的博客 6752

【05】昊一源科技——昊一源科技 嵌入式笔试, 校招,题目记录及解析

本文记录了昊一源科技嵌入式校招笔试题目及解析,涵盖计算机基础、汇编语言、网络协议、C语言编程等内容。主要包括:1)补码真值计算;2)MCS51汇编指令执行后寄存器状态;3)网络广播地址计算;4)TCP协议特点;5)C语言三目运算符应用;6)宏定义优先级问题;7)字符指针与数组的区别;8)C++静态成员变量应用;9)三位完全平方数查找程序。题目难度适中,涉及嵌入式开发常见知识点,对求职者基础能力考察全面。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1307

【2026年华为暑期实习-非AI方向(通软&嵌软&测试&算法&数据科学)- 7月15日-第二题- 手机多载波冲突选择】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文提出了一种解决手机基站载波选择问题的回溯算法。给定N个载波,每个载波具有带宽和所属频段,要求选择最多K个载波,满足:1) 不选择同一频段的多个载波;2) 不选择冲突频段的载波;3) 总带宽最大化。算法通过预处理冲突关系,使用位掩码优化冲突检查,按编号顺序回溯枚举所有可能组合。当找到更大带宽或相同带宽但字典序更小的组合时更新答案。该方法在N≤25和K≤8的约束下高效可行,并通过样例验证了正确性。输出为最大总带宽和对应的最优载波编号序列。

m0_73659489的博客 71

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: Vue2结合Swiper实现动态多卡片轮播:突破vue-element三张限制的实战方案
下一篇: 利用SSH隧道实现Autodl服务器Jupyter Notebook的本地化操作
html8
博客等级 码龄8年 105粉丝 1092原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值