量化交易
-
案例介绍
-
1.1 案例说明
机器学习与人工智能在金融领域已有成熟的应用。用统计模型来预测股票等金融产品的价格并自动交易,这是其中的经典问题。价格预测的模型是这个应用场景中的核心问题,在预测价格变化的基础上,通过一定的交易规则来获利。价格预测的准确率不需要很高,超过50%在理论上就有盈利的空间。每次交易的获利也不需要太高,只要高于交易成本,就能通过长期、多次的交易来积累盈利,形成显著的收益。
本案例基于股市每日股票价格数据进行建模,用60天的历史数据作为特征,来预测第二天的收盘价格。然后根据价格预测的结果来进行模拟交易的回溯测试,通过测试结果来评估算法性能。本案例采用了回归模型,将股票价格与大盘价格的差作为目标,来减小均方差。有了预测值之后,调用回溯函数来进行模拟交易。
本案例的模型是回归问题。因此,任何回归问题的算法都适用于本案例。本案例可用于其它分类或回归算法的教学实践,还可以贯穿于整个机器学习教学过程,让学生不断尝试用新学的算法来解决此问题。
根据此案例,学生们能够了解量化交易中核心的股价预测的建模理念,以及量化交易的经典过程。在此基础上,还可以进一步提升模型表现,或将其包装成量化交易的应用。
-
1.2 文件列表
文件名 用途 data_loader.py 在模型中import此文件,调用load_data函数来读取数据,并切分成训练数据、验证数据和测试数据。 evaluate.py 用于评估算法的 模拟回溯交易函数。 gbdt_model.py 采用梯度提升决策树的模型。直接运行即可完成模型训练。 nn_model.py 采用多层神经网络的模型。直接运行即可完成模型训练。 prepare_features.py 在训练模型前运行此代码,将原始数据文件转换为特征数据文件。 raw_data.泡菜 原始数据 -
1.3 数据说明
-
1.3.1 原始数据
本案例的原始数据为A股中证500从2012年初到2018年初的数据,包括每日的开盘数据、收盘数据、最高价、最低价、交易量。这些数据均为复权后的量价,即去除了分股、行权等对价格变化的影响。
-
1.3.2 特征工程
本案例通过历史数据来建模,将每日的前59天的数值展开为特征。具体情况如下
-
特征数据
-
a. 生成的特征值有295个,命名如:$open 1, $open 2, ... , $open 59, $close 1, ..., $high 1, ..., $low 1, ..., $volume 1, ..., $volume 59。
-
b. 每条数据为前n天的对应正规化后的值,如:$open 1对应1天前的开盘价正规化后的值,$volume 59对应59天前的交易量正规化后的值。
-
c. 正规化。可通过代码看出,前n天的开盘价、收盘价、最高价、最低价都是除以当日收盘价为正规化后的值。交易量除了除以当日交易量,并通过ln求自然对数来减少数量级的差别。
-
-
标记数据。根据第二天价格是否能跑赢大盘来作为标记数据。如果高于大盘,则为正数,低于大盘则为负数。
-
有些股票无法回溯59天的历史股价,在训练模型前,会将这些数据条目删除。
-
数据按照时间段来拆分:
- a. 2008~2013年为训练数据集,346817条。
- b. 2014~2015年为验证数据集,170756条。
- c. 2016~2018年为测试数据集,217554条。
-
-
1.3.3 回溯测试
回溯测试用于评估模型的性能。回溯测试会根据价
-
-