【量化课程】08_2.深度学习量化策略基础实战

文章目录

    • 1. 深度学习简介
    • 2. 常用深度学习模型架构
      • 2.1 LSTM 介绍
      • 2.2 LSTM在股票预测中的应用
    • 3. 模块分类
      • 3.1 卷积层
      • 3.2 池化层
      • 3.3 全连接层
      • 3.4 Dropout层
    • 4. 深度学习模型构建
    • 5. 策略实现

1. 深度学习简介

深度学习是模拟人脑进行分析学习的神经网络。

2. 常用深度学习模型架构

  • 深度神经网络(DNN)
  • 卷积神经网络(CNN)
  • 马尔可夫链(MC)
  • 玻尔兹曼机(BM)
  • 生成对抗网络(GAN)
  • 长短期记忆网络(LSTM)

2.1 LSTM 介绍

长短期记忆网络(LSTM)是一种常用于处理序列数据的循环神经网络(RNN)的变体,被广泛应用于自然语言处理、语音识别、时间序列预测等任务中。

LSTM通过门控机制解决了传统RNN中的梯度问题,能够有效地处理序列数据,并在多个领域取得了显著的成果。

2.2 LSTM在股票预测中的应用

LSTM在量化预测股票方面被广泛应用。它可以利用历史股票价格和交易量等数据来学习股票价格的趋势和波动,从而进行未来的预测。

在股票预测中,LSTM可以接受时间序列数据作为输入,并通过递归地更新隐藏状态来捕获长期依赖关系。它可以通过学习历史价格和交易量等特征的模式,对未来的股票价格进行预测。

通过将股票历史数据作为训练样本,LSTM可以学习不同时间尺度上的模式,例如每日、每周或每月的波动情况。它还可以利用技术指标、市场情绪数据等辅助信息,以提高预测准确性。

在实际应用中,研究人员和投资者通过训练LSTM模型来预测股票的价格趋势、波动情况和交易信号。这些预测结果可以用于制定投资策略、风险管理和决策制定等方面。

需要注意的是,股票市场受到多种因素的影响,包括经济因素、政治事件和市场心理等。LSTM在股票预测中的应用并不是完全准确的,因此在实际应用中需要结合其他因素进行综合分析和决策。此外,过度依赖LSTM模型所做的预测结果也可能存在风险,投资者仍需谨慎分析和评估。

3. 模块分类

3.1 卷积层

卷积层是深度学习中的基本层之一,通过卷积操作对输入数据进行特征提取和特征映射,并利用参数共享和局部连接等机制提高模型的参数效率。

  • 一维卷积层
  • 二维卷积层
  • 三维卷积层

3.2 池化层

平均池化和最大池化是卷积神经网络中常用的池化操作,用于减少特征图的维度,并提取出重要的特征信息。

  • 平均池化
  • 最大池化

3.3 全连接层

全连接层是神经网络中的一种常见层类型。在全连接层中,每个输入神经元与输出层中的每个神经元都有连接。每个连接都有一个权重,用于调整输入神经元对于输出神经元的影响。全连接层的输出可以通过激活函数进行非线性变换。

3.4 Dropout层

Dropout层是一种正则化技术,用于在训练过程中随机丢弃一部分输入神经元,以减少过拟合的风险。Dropout层通过随机断开神经元之间的连接来实现丢弃操作。在每个训练迭代中,Dropout层会随机选择一些神经元进行丢弃,并在前向传播和反向传播过程中不使用这些丢弃的神经元。

4. 深度学习模型构建

  1. 通过模块堆叠将输入层、中间层、输出层连接,然后构建模块进行初始化
  2. 训练模型
  3. 模型预测

5. 策略实现

本部分将介绍如何在BigQuant实现一个基于LSTM的选股策略

from biglearning.api import M
from biglearning.api import tools as T
from bigdatasource.api import DataSource
from biglearning.module2.common.data import Outputs
from zipline.finance.commission import PerOrder
import pandas as pd
import math# LSTM模型训练和预测
def m4_run_bigquant_run(input_1, input_2, input_3):df =  input_1.read_pickle()feature_len = len(input_2.read_pickle())df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))data_1 = DataSource.write_pickle(df)return Outputs(data_1=data_1)# LSTM模型训练和预测的后处理
def m4_post_run_bigquant_run(outputs):return outputs# LSTM模型训练和预测
def m8_run_bigquant_run(input_1, input_2, input_3):df =  input_1.read_pickle()feature_len = len(input_2.read_pickle())df['x'] = df['x'].reshape(df['x'].shape[0], int(feature_len), int(df['x'].shape[1]/feature_len))data_1 = DataSource.write_pickle(df)return Outputs(data_1=data_1)# LSTM模型训练和预测的后处理
def m8_post_run_bigquant_run(outputs):return outputs# 模型评估和排序
def m24_run_bigquant_run(input_1, input_2, input_3):pred_label = input_1.read_pickle()df = input_2.read_df()df = pd.DataFrame({'pred_label':pred_label[:,0], 'instrument':df.instrument, 'date':df.date})df.sort_values(['date','pred_label'],inplace=True, ascending=[True,False])return Outputs(data_1=DataSource.write_df(df), data_2=None, data_3=None)# 模型评估和排序的后处理
def m24_post_run_bigquant_run(outputs):return outputs# 初始化策略
def m19_initialize_bigquant_run(context):# 从options中读取数据context.ranker_prediction = context.options['data'].read_df()# 设置佣金费率context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))stock_count = 30# 根据股票数量设置权重context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])context.max_cash_per_instrument = 0.9context.options['hold_days'] = 5# 处理每个交易日的数据
def m19_handle_data_bigquant_run(context, data):# 获取当日的预测结果ranker_prediction = context.ranker_prediction[context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]is_staging = context.trading_day_index < context.options['hold_days']cash_avg = context.portfolio.portfolio_value / context.options['hold_days']cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)positions = {e.symbol: p.amount * p.last_sale_pricefor e, p in context.perf_tracker.position_tracker.positions.items()}if not is_staging and cash_for_sell > 0:equities = {e.symbol: e for e, p in context.perf_tracker.position_tracker.positions.items()}instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))])))for instrument in instruments:context.order_target(context.symbol(instrument), 0)cash_for_sell -= positions[instrument]if cash_for_sell <= 0:breakbuy_cash_weights = context.stock_weightsbuy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrumentfor i, instrument in enumerate(buy_instruments):cash = cash_for_buy * buy_cash_weights[i]if cash > max_cash_per_instrument - positions.get(instrument, 0):cash = max_cash_per_instrument - positions.get(instrument, 0)if cash > 0:context.order_value(context.symbol(instrument), cash)# 准备工作
def m19_prepare_bigquant_run(context):pass# 获取2020年至2021年股票数据
m1 = M.instruments.v2(start_date='2020-01-01',end_date='2021-01-01',market='CN_STOCK_A',instrument_list=' ',max_count=0
)# 使用高级自动标注器获取标签
m2 = M.advanced_auto_labeler.v2(instruments=m1.data,label_expr="""
shift(close, -5) / shift(open, -1)-1clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))where(shift(high, -1) == shift(low, -1), NaN, label)
""",start_date='',end_date='',benchmark='000300.SHA',drop_na_label=True,cast_label_int=False
)# 标准化标签数据
m13 = M.standardlize.v8(input_1=m2.data,columns_input='label'
)# 输入特征
m3 = M.input_features.v1(features="""close_0/mean(close_0,5)
close_0/mean(close_0,10)
close_0/mean(close_0,20)
close_0/open_0
open_0/mean(close_0,5)
open_0/mean(close_0,10)
open_0/mean(close_0,20)"""
)# 抽取基础特征
m15 = M.general_feature_extractor.v7(instruments=m1.data,features=m3.data,start_date='',end_date='',before_start_days=30
)# 提取派生特征
m16 = M.derived_feature_extractor.v3(input_data=m15.data,features=m3.data,date_col='date',instrument_col='instrument',drop_na=True,remove_extra_columns=False
)# 标准化基础特征
m14 = M.standardlize.v8(input_1=m16.data,input_2=m3.data,columns_input='[]'
)# 合并标签和特征
m7 = M.join.v3(data1=m13.data,data2=m14.data,on='date,instrument',how='inner',sort=False
)# 将特征转换成二进制数据
m26 = M.dl_convert_to_bin.v2(input_data=m7.data,features=m3.data,window_size=5,feature_clip=5,flatten=True,window_along_col='instrument'
)# 使用m4_run_bigquant_run函数运行缓存模式
m4 = M.cached.v3(input_1=m26.data,input_2=m3.data,run=m4_run_bigquant_run,post_run=m4_post_run_bigquant_run,input_ports='',params='{}',output_ports=''
)# 获取2021年至2022年股票数据
m9 = M.instruments.v2(start_date=T.live_run_param('trading_date', '2021-01-01'),end_date=T.live_run_param('trading_date', '2022-01-01'),market='CN_STOCK_A',instrument_list='',max_count=0
)# 抽取基础特征
m17 = M.general_feature_extractor.v7(instruments=m9.data,features=m3.data,start_date='',end_date='',before_start_days=30
)# 提取派生特征
m18 = M.derived_feature_extractor.v3(input_data=m17.data,features=m3.data,date_col='date',instrument_col='instrument',drop_na=True,remove_extra_columns=False
)# 标准化基础特征
m25 = M.standardlize.v8(input_1=m18.data,input_2=m3.data,columns_input='[]'
)# 将特征转换成二进制数据
m27 = M.dl_convert_to_bin.v2(input_data=m25.data,features=m3.data,window_size=5,feature_clip=5,flatten=True,window_along_col='instrument'
)# 使用m8_run_bigquant_run函数运行缓存模式
m8 = M.cached.v3(input_1=m27.data,input_2=m3.data,run=m8_run_bigquant_run,post_run=m8_post_run_bigquant_run,input_ports='',params='{}',output_ports=''
)# 构造LSTM模型的输入层
m6 = M.dl_layer_input.v1(shape='7,5',batch_shape='',dtype='float32',sparse=False,name=''
)# 构造LSTM模型的LSTM层
m10 = M.dl_layer_lstm.v1(inputs=m6.data,units=32,activation='tanh',recurrent_activation='hard_sigmoid',use_bias=True,kernel_initializer='glorot_uniform',recurrent_initializer='Orthogonal',bias_initializer='Zeros',unit_forget_bias=True,kernel_regularizer='None',kernel_regularizer_l1=0,kernel_regularizer_l2=0,recurrent_regularizer='None',recurrent_regularizer_l1=0,recurrent_regularizer_l2=0,bias_regularizer='None',bias_regularizer_l1=0,bias_regularizer_l2=0,activity_regularizer='None',activity_regularizer_l1=0,activity_regularizer_l2=0,kernel_constraint='None',recurrent_constraint='None',bias_constraint='None',dropout=0,recurrent_dropout=0,return_sequences=False,implementation='0',name=''
)# 构造LSTM模型的Dropout层
m12 = M.dl_layer_dropout.v1(inputs=m10.data,rate=0.2,noise_shape='',name=''
)# 构造LSTM模型的全连接层1
m20 = M.dl_layer_dense.v1(inputs=m12.data,units=30,activation='tanh',use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='Zeros',kernel_regularizer='None',kernel_regularizer_l1=0,kernel_regularizer_l2=0,bias_regularizer='None',bias_regularizer_l1=0,bias_regularizer_l2=0,activity_regularizer='None',activity_regularizer_l1=0,activity_regularizer_l2=0,kernel_constraint='None',bias_constraint='None',name=''
)# 构造LSTM模型的Dropout层2
m21 = M.dl_layer_dropout.v1(inputs=m20.data,rate=0.2,noise_shape='',name=''
)# 构造LSTM模型的全连接层2
m22 = M.dl_layer_dense.v1(inputs=m21.data,units=1,activation='tanh',use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='Zeros',kernel_regularizer='None',kernel_regularizer_l1=0,kernel_regularizer_l2=0,bias_regularizer='None',bias_regularizer_l1=0,bias_regularizer_l2=0,activity_regularizer='None',activity_regularizer_l1=0,activity_regularizer_l2=0,kernel_constraint='None',bias_constraint='None',name=''
)# 初始化LSTM模型
m34 = M.dl_model_init.v1(inputs=m6.data,outputs=m22.data
)# 训练LSTM模型
m5 = M.dl_model_train.v1(input_model=m34.data,training_data=m4.data_1,optimizer='RMSprop',loss='mean_squared_error',metrics='mae',batch_size=256,epochs=5,n_gpus=0,verbose='2:每个epoch输出一行记录'
)# 使用LSTM模型进行预测
m11 = M.dl_model_predict.v1(trained_model=m5.data,input_data=m8.data_1,batch_size=1024,n_gpus=0,verbose='2:每个epoch输出一行记录'
)# 使用m24_run_bigquant_run函数运行缓存模式
m24 = M.cached.v3(input_1=m11.data,input_2=m18.data,run=m24_run_bigquant_run,post_run=m24_post_run_bigquant_run,input_ports='',params='{}',output_ports=''
)# 执行交易
m19 = M.trade.v4(instruments=m9.data,options_data=m24.data_1,start_date='',end_date='',initialize=m19_initialize_bigquant_run,handle_data=m19_handle_data_bigquant_run,prepare=m19_prepare_bigquant_run,volume_limit=0.025,order_price_field_buy='open',order_price_field_sell='close',capital_base=1000000,auto_cancel_non_tradable_orders=True,data_frequency='daily',price_type='后复权',product_type='股票',plot_charts=True,backtest_only=False,benchmark='000300.SHA'
)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶软件实现导入Excel数据分录行信息到单据体分录行中

>>>适合KIS云专业版V16.0|KIS云旗舰版V7.0|K/3 WISE 14.0等版本<<< 金蝶软件中实现[导入Excel数据业务分录行]信息到[金蝶单据体分录]中,在采购订单|采购入库单|销售订单|销售出库单等类型单据中,以少量的必要字段在excel表格中按模板填列好,很方便快捷地从…

学习笔记十四:K8S最小调度单元POD概述

K8S最小调度单元POD概述 k8s核心资源Pod介绍Pod是什么Pod如何管理多个容器Pod网络Pod存储代码自动发版更新收集业务日志 Pod工作方式自主式Pod控制器管理的Pod(防误删除) 如何基于Pod运行应用 k8s核心资源Pod介绍 K8s官方文档&#xff1a;https://kubernetes.io/ K8s中文官方文…

YOLOv5白皮书-第Y6周:模型改进

&#x1f4cc;本周任务&#xff1a;模型改进&#x1f4cc; 注&#xff1a;对yolov5l.yaml文件中的backbone模块和head模块进行改进。 任务结构图&#xff1a; YOLOv5s网络结构图: 原始模型代码&#xff1a; # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

【C语言】静态通讯录 -- 详解

一、实现目标 1、功能 保存 1000 个联系人的信息添加联系人删除联系人修改联系人查找联系人排序 2、个人信息&#xff08;结构体&#xff09; 名字年龄性别电话地址 二、创建文件 test.c&#xff08;专门测试通讯录的功能&#xff09;contact.c&#xff08;接口的实现&#xf…

C语言实现三子棋游戏

大家好&#xff0c;欢迎观看Mr.kanglong的CSDN博客&#xff0c;今天和大家讨论的是如何使用C语言来实现三子棋游戏。相信大家儿时或多或少玩过三子棋游戏&#xff0c;那么怎么用C语言实现这样一个游戏呢&#xff1f;且听亢龙娓娓道来~ 目录 三子棋介绍 游戏效果 实现代码 gam…

大语言模型之二 GPT发展史简介

得益于数据、模型结构以及并行算力的发展&#xff0c;大语言模型应用现今呈井喷式发展态势&#xff0c;大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展&#xff0c;扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…

第三届“赣政杯”网络安全大赛 | 赛宁筑牢安全应急防线

​​为持续强化江西省党政机关网络安全风险防范意识&#xff0c;提高信息化岗位从业人员基础技能&#xff0c;提升应对网络安全风险处置能力。由江西省委网信办、江西省发展改革委主办&#xff0c;江西省大数据中心、国家计算机网络与信息安全管理中心江西分中心承办&#xff0…

Vue在页面输出JSON对象,测试接口可复制使用

效果图&#xff1a; 数据处理前&#xff1a; 数据处理后&#xff1a; 代码实现&#xff1a; HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…

考研 408 | 【计算机网络】 应用层

导图 网络应用模型 客户/服务器&#xff08;c/s&#xff09;模型 P2P模型 DNS 域名 域名服务器 域名解析过程 文件传输协议FTP FTP服务器和用户端 FTP工作原理 电子邮件 电子邮件的信息格式 组成结构 邮件服务器的功能&#xff1a; 1.发送&接收邮件 2.给发件人报告邮…

【JavaEE进阶】Bean 作用域和生命周期

文章目录 一. 关于Bean作用域的实例1. lombok2. 实例代码 二. 作用域定义1. Bean的六种作用域2. 设置作用域 三. Spring 执行流程和 Bean 的生命周期1. Spring 执行流程2. Bean生命周期 一. 关于Bean作用域的实例 注意在此例子中需要用到lombok 1. lombok lombok是什么? Lo…

Coremail AI实验室:利用高级语境和视觉智能进行钓鱼邮件检测

在这个日益数字化的时代&#xff0c;对电子邮件安全需求是至关重要的。新兴的高级威胁邮件&#xff1a;应用社工技术的钓鱼邮件&#xff0c;仿冒公检法的钓鱼邮件等等&#xff0c;都需要更高级的防御策略。 Coremail邮件安全人工智能实验室&#xff0c;整合了高级文本语境理解和…

使用 Visual Studio GoogleTest编写 C/C++ 单元测试——入门篇

入门教程 Visual Studio 新建 GoogleTest项目&#xff0c;一路选默认参数 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

HTML详解连载(3)

HTML详解连载&#xff08;3&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽表单作用使用场景 input标签基本使用示例type属性值以及说明 input标签占位文本示例注意 单选框 radio代码示例 多选框-checkbox注意代码示例 文本域作用标签&#xff1…

抖音关键词搜索小程序排名怎么做

抖音关键词搜索小程序排名怎么做 1 分钟教你制作一个抖音小程序。 抖音小程序就是我的视频&#xff0c;左下方这个蓝色的链接&#xff0c;点进去就是抖音小程序。 如果你有了这个小程序&#xff0c;发布视频的时候可以挂载这个小程序&#xff0c;直播的时候也可以挂载这个小…

快速使用Linux系统中SSH

在Linux系统中&#xff0c;使用SSH代理跳板机是一种有效的方式&#xff0c;可以实现安全连接和访问远程服务器。本文将详细介绍SSH代理跳板机的设置和使用方法。 什么是SSH代理跳板机&#xff1f; SSH代理跳板机是一种在Linux系统中使用SSH协议实现的代理服务器。通过配置相关…

bytesec靶场

靶场下载 https://www.vulnhub.com/entry/hacknos-os-bytesec,393/ 下载完成后进入配置修改网卡 教程 配置 第一步&#xff1a;启动靶机时按下 shift 键&#xff0c; 进入以下界面 第二步&#xff1a;选择第二个选项&#xff0c;然后按下 e 键&#xff0c;进入编辑界面 将…

DRF的filter组件

DRF的Filter组件 如果某个API需要传递一些条件进行搜索&#xff0c;其实就在是URL后面通过GET传参即可&#xff0c;例如&#xff1a; /api/users?age19&category12在drf中filter组件可以支持条件搜索。 1. 自定义filter # models.py from django.db import modelsclas…

[NLP]LLM 训练时GPU显存耗用量估计

以LLM中最常见的Adam fp16混合精度训练为例&#xff0c;分析其显存占用有以下四个部分&#xff1a; GPT-2含有1.5B个参数&#xff0c;如果用fp16格式&#xff0c;只需要1.5G*2Byte3GB显存, 但是模型状态实际上需要耗费1.5B*1624GB. 比如说有一个模型参数量是1M&#xff0c;在…

[GAN] 使用GAN网络进行图片生成的“调参人”入门指南——生成向日葵图片

[GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片 文章目录 [GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片1. 写在前面&#xff1a;1.1 应用场景&#xff1a;1.2 数据集情况&#xff1a;1.3 实验原理讲解和分析&#xff08;简化版&#x…

Flink CDC系列之:TiDB CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;TiDB CDC 导入 Elasticsearch 一、通过docker 来启动 TiDB 集群二、下载 Flink 和所需要的依赖包三、在TiDB数据库中创建表和准备数据四、启动Flink 集群&#xff0c;再启动 SQL CLI五、在 Flink SQL CLI 中使用 Flink DDL 创建表六、Kibana查看Ela…