AI量化交易案例

news2024/11/13 16:36:31

量化交易

  1. 案例介绍

    • 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天的数值展开为特征。具体情况如下

        1. 特征数据

          • 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求自然对数来减少数量级的差别。

        2. 标记数据。根据第二天价格是否能跑赢大盘来作为标记数据。如果高于大盘,则为正数,低于大盘则为负数。

        3. 有些股票无法回溯59天的历史股价,在训练模型前,会将这些数据条目删除。

        4. 数据按照时间段来拆分:

          • a. 2008~2013年为训练数据集,346817条。
          • b. 2014~2015年为验证数据集,170756条。
          • c. 2016~2018年为测试数据集,217554条。
      • 1.3.3 回溯测试

        回溯测试用于评估模型的性能。回溯测试会根据价格预测模型来进行模拟交易,从而测试出能够获得的理论收益。本案例文件 evaluate.py 中的backtest函数包含了回溯测试的逻辑,也可作为量化交易策略。

        回溯测试会将每日预测涨幅最高的50只股票找出来,并将其买入。买入金额在要买入的股票间平均分配。若上一日持仓的股票不在今日前50只股票中,则会将其卖出。

  2. 教学目标

    1. 了解股价预测的基本建模方法。
    2. 熟悉特征工程的一般方法。
    3. 熟悉梯度提升决策树模块(lightbgm)的使用方法。
    4. 熟悉深度学习神经网络框架(Keras)的简单使用。
  3. 教学过程

    • 3.1 准备环境

      环境准备应在实验之前完成,且需要网络才能完成Python环境的安装。

      • 3.1.1 环境要求

        1. 64位Python 3.6或以上版本
      • 3.1.2 准备环境

        1. 通过pip命令安装以下python包。

          <span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>pip install scikit-learn pandas lightgbm numpy keras tensorflow
          </code></span></span></span>
        2. 将代码与原始数据拷贝至目标机器某目录下

    • 3.2 准备数据

      1. 运行以下命令,从原始数据生成特征(feature)。生成时间大约需要几分钟,请耐心等待。生成的数据文件约有1.5G,也可以复制到其它环境中直接重用,避免再次生成。

        <span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>python prepare_features.py
        </code></span></span></span>
    • 3.3 训练模型

      本案例提供了梯度提升决策树和多层神经网络的模型脚本。分别运行脚本即可训练出模型,并预测其性能。

      • 3.3.1 梯度提升决策树

        1. 运行以下命令:
          <span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>python gbdt_model.py
          </code></span></span></span>
        2. 脚本会输出LightGBM的一些信息,然后输出训练过程中的损失值(loss),最终输出结果。
      • 3.3.2 神经网络

        1. 运行以下命令:
          <span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>python nn_model.py
          </code></span></span></span>
        2. 脚本会输出训练的过程,包括损失值(loss),精度(accuracy)等等。神经网络比梯度提升决策树训练慢,且结果会差一些。本例只是比较简单的神经网络,因此,此结论不宜推广到所有神经网络建模方法上。
    • 3.4 分析结果

      模型训练的最终结果通过risk_analysis函数输出,并打印在训练模型的最后面。通过这些分析能够从多方面来评价模型的效果。

      1. 意味 着。平均每日收益率。如上例中的每日平均收益为0.1071%。
      2. 性病。每日收益的标准方差。标准方差能够看出收益的波动范围,方差越小,表示收益越稳定。
      3. 年刊。平均年化收益。将每日收益累计计算出的平均年化收益。因为股票交易收益能用于下一次购买,所以是按照复利的方式来计算年化收益的。
      4. 夏普。夏普比率。表示承受每单位的风险能够获得的收益。此值越大越好。
      5. MDD。最大回撤(Max Drawdown)。表示最低价值与最高价值的比值,此值越大越好。如上面数据中,表示最差的一天,账户价值比最高值下跌了18.2006%。
  4. 作业安排

    根据学生理论学习进度,难度安排以及教学目标,可以参考以下方向安排作业。

    • 4.1 书写实验总结

      上述案例包括了数据预处理、训练模型、分析结果等过程,并包括了梯度提升决策树和神经网络两种模型训练方式。可让学生对实验过程分析,总结两种模型训练方式的比较,自己对机器学习模型训练的心得、收获等等。

    • 4.2 实现梯度提升决策树

      本案例通过lightgbm来使用了梯度提升决策树。为了更进一步理解梯度提升决策树的工作原理,可通过代码实现,并检查是否能达到示例代码的效果。

    • 4.3 实现神经网络

      本案例通过调用Keras创建了神经网络。为了更进一步理解神经网络算法的工作原理,可实现神经网络的结构、激活、往回传播等功能,并检查是否能达到示例代码的效果。

    • 4.4 改进价格预测模型

      本案例可用任何分类或回归算法来建模。本案例仅给定了基本的模型样例,精度较低。通过选择其它算法或神经网络结构,改变目标函数、添加新的原始数据、重新进行特征工程等方法尝试,可训练出更好的预测模型。

    • 4.5 改进回溯测试交易策略

      根据当前模型,改进backtest函数,尝试找到更好的量化交易策略来获得更高、更稳定的收益。

    • 4.6 实现量化交易应用

      通过实现量化交易应用来在实践中检验模型是否能够达到预期的效果。可模拟自动买卖股票来计算某段时间内的收益。整个应用需要考虑从数据采集到数据处理的数据流水线、用户使用界面等全方位的问题,较为复杂。建议组成小团队来完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1398549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给视频添加srt字幕,为你的创作加上心声

无论你是分享生活点滴、教学知识&#xff0c;还是传递某种情感&#xff0c;总会有那么一刹那&#xff0c;言语显得如此苍白无力。而srt字幕就像是一位翻译官&#xff0c;用最恰当、最直接的文字&#xff0c;把你所要表达的意思准确的传递给观众。 所需工具&#xff1a; 一个【…

[C#]winform部署openvino调用padleocr模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具&#xff0c;但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件&#xff0c;主要用于加速深度学习推理&#xff0c;而PaddleOC…

MySQL---视图索引

表定义&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;S…

DolphinDB学习(0):DolphinDB基本概述

DolphinDB的学习难度不小&#xff0c;主要是写法比较多&#xff0c;官方示例是一次性给一大堆代码&#xff0c;在没有成体系的学习基础的前提下&#xff0c;总有种力不从心的感觉&#xff0c;所以博主汇总这一个系列的文章&#xff0c;尝试从最简单的基础常规操作开始&#xff…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

安全基础~攻防特性3

文章目录 SSTI(模板注入)1. 简介2. 成因3. 常见框架存在注入4. 判断存在SSTI SSTI(模板注入) 1. 简介 (Server-Side Template Injection) 服务端模板注入 1、使用框架&#xff08;MVC的模式&#xff09;&#xff0c;如python的flask&#xff0c;php的tp&#xff0c;java的sp…

Flask 3.x log全域配置(包含pytest)

最近使用到flask3.x&#xff0c;配置了全域的log&#xff0c;这边记录下 首先需要创建logging的配置文件&#xff0c;我是放在项目根目录的&#xff0c; Logging 配置 logging.json {"version": 1, # 配置文件版本号"formatters": {"default&qu…

目标检测难题 | 小目标检测策略汇总

大家好&#xff0c;在计算机视觉中&#xff0c;检测小目标是最有挑战的问题之一&#xff0c;本文给出了一些有效的策略。 从无人机上看到的小目标 为了提高模型在小目标上的性能&#xff0c;本文推荐以下技术&#xff1a; 提高图像采集的分辨率 增加模型的输入分辨率 tile你…

C++PythonC# 三语言OpenCV从零开发(3):图像读取和显示

文章目录 相关链接前言Mat是什么读取图片CC#Python 灰度处理CCSharpPython 打印图像信息CCsharpPython 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程&#xff08;附带课程课件资料课件笔记&#xff09; …

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

微电网优化MATLAB:基于麻雀搜索算法SSA的微电网优化调度(提供MATLAB代码)

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、麻雀搜索算法简介 麻雀搜索算法 (Sparrow Search Algorithm, SSA) 是一种新型的群智能优化算法&#xff0c;于2020…

博达V900远程透传模块与台达PLC远程上下载程序,远程在线调试程序

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条&#xff0c;用于实现网络连接和连接PLC一台台达PLC及其编程软件WPLSoft一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡&#xff0c;WIFI联网则将WIFI天线插入USB口&#xff09; …

利用Pytest插件pytest-asyncio实现异步代码测试

在现代异步编程的时代,Python中的 pytest-asyncio 插件为我们提供了在异步代码中进行测试的强大工具。本文将深入介绍 `pytest-asyncio` 插件的基本用法和实际案例,助你更好地理解和运用异步测试。 什么是pytest-asyncio? pytest-asyncio 是Pytest的一个插件,它为异步代码…

免费的几个站群更新软件【2024】

在网站运营的过程中&#xff0c;及时更新和维护是保持网站活力和吸引用户的关键。站群更新软件成为了许多站长的首选&#xff0c;能够帮助批量管理网站、自动更新原创文章&#xff0c;并通过主动推送服务向各大搜索引擎提交信息。本文将专心分享四款卓越的站群更新软件&#xf…

上门按摩系统的开发对于按摩行业有哪些意义

随着科技的迅猛发展&#xff0c;人们的生活水平逐渐提高&#xff0c;对健康与舒适的需求也日益增强。作为古老而又充满现代感的保健方式&#xff0c;按摩已受到广大民众的喜爱与接纳。然而&#xff0c;传统的按摩店往往需要顾客亲自上门&#xff0c;这对于忙碌的上班族或行动不…

按照要求完成如下DQL语句编写

题目来源于黑马MySQL 创建表格&#xff1a; CREATE TABLE TB_EMPLOYEE(ID INT COMMENT 编号,WORK_NO VARCHAR(10) COMMENT 工号,NAME VARCHAR(10) COMMENT 姓名,GENDER CHAR COMMENT 性别,AGE TINYINT UNSIGNED COMMENT 年龄,ID_CARD CHAR(18) COMMENT 身…

前端基础知识:html表格

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> html表格</title> </head> <style&…

第五篇:其他窗口部件 QAbstractButton

QAbstractButton QAbstractButton 类是按钮部件的抽象基类&#xff0c;提供了按钮的通用功能。它的子类包括标准按钮 QPushButton、工具按钮 QToolButton、复选框 QCheckBox和单选按钮 QRadioButton 等。 QPushButton QPushButton 提供了创建交互按钮的基本功能。它可以包含…

还在手动复制文章吗?教你如何一键将文章从notion同步到WordPress

本文会给大家介绍如何在WordPress上安装一个插件&#xff0c;实现将notion上写的文章自动同步到WordPress上&#xff0c;从而提高写作效率&#xff0c;接下来请跟随我的脚步一起来操作吧&#xff01; 一、插件安装 在WordPress后台添加新插件页面中搜索“notion”&#xff0c;…

J4 - ResNet与DenseNet结合

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 环境模型设计模型效果展示总结与心得体会 环境 系统: Linux语言: Python3.8.10深度学习框架: Pytorch2.0.0cu118显卡&#xff1a;GT…