资讯网站 怎样 增强用户粘度,火车头自动上传wordpress,上海人才网档案查询,无锡设计公司排名文章目录 1. 深度学习简介2. 常用深度学习模型架构2.1 LSTM 介绍2.2 LSTM在股票预测中的应用 3. 模块分类3.1 卷积层3.2 池化层3.3 全连接层3.4 Dropout层 4. 深度学习模型构建5. 策略实现 1. 深度学习简介
深度学习是模拟人脑进行分析学习的神经网络。
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. 深度学习模型构建
通过模块堆叠将输入层、中间层、输出层连接然后构建模块进行初始化训练模型模型预测
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_1data_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_1data_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],inplaceTrue, ascending[True,False])return Outputs(data_1DataSource.write_df(df), data_2None, data_3None)# 模型评估和排序的后处理
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_cost0.0003, sell_cost0.0013, min_cost5))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_date2020-01-01,end_date2021-01-01,marketCN_STOCK_A,instrument_list ,max_count0
)# 使用高级自动标注器获取标签
m2 M.advanced_auto_labeler.v2(instrumentsm1.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,benchmark000300.SHA,drop_na_labelTrue,cast_label_intFalse
)# 标准化标签数据
m13 M.standardlize.v8(input_1m2.data,columns_inputlabel
)# 输入特征
m3 M.input_features.v1(featuresclose_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(instrumentsm1.data,featuresm3.data,start_date,end_date,before_start_days30
)# 提取派生特征
m16 M.derived_feature_extractor.v3(input_datam15.data,featuresm3.data,date_coldate,instrument_colinstrument,drop_naTrue,remove_extra_columnsFalse
)# 标准化基础特征
m14 M.standardlize.v8(input_1m16.data,input_2m3.data,columns_input[]
)# 合并标签和特征
m7 M.join.v3(data1m13.data,data2m14.data,ondate,instrument,howinner,sortFalse
)# 将特征转换成二进制数据
m26 M.dl_convert_to_bin.v2(input_datam7.data,featuresm3.data,window_size5,feature_clip5,flattenTrue,window_along_colinstrument
)# 使用m4_run_bigquant_run函数运行缓存模式
m4 M.cached.v3(input_1m26.data,input_2m3.data,runm4_run_bigquant_run,post_runm4_post_run_bigquant_run,input_ports,params{},output_ports
)# 获取2021年至2022年股票数据
m9 M.instruments.v2(start_dateT.live_run_param(trading_date, 2021-01-01),end_dateT.live_run_param(trading_date, 2022-01-01),marketCN_STOCK_A,instrument_list,max_count0
)# 抽取基础特征
m17 M.general_feature_extractor.v7(instrumentsm9.data,featuresm3.data,start_date,end_date,before_start_days30
)# 提取派生特征
m18 M.derived_feature_extractor.v3(input_datam17.data,featuresm3.data,date_coldate,instrument_colinstrument,drop_naTrue,remove_extra_columnsFalse
)# 标准化基础特征
m25 M.standardlize.v8(input_1m18.data,input_2m3.data,columns_input[]
)# 将特征转换成二进制数据
m27 M.dl_convert_to_bin.v2(input_datam25.data,featuresm3.data,window_size5,feature_clip5,flattenTrue,window_along_colinstrument
)# 使用m8_run_bigquant_run函数运行缓存模式
m8 M.cached.v3(input_1m27.data,input_2m3.data,runm8_run_bigquant_run,post_runm8_post_run_bigquant_run,input_ports,params{},output_ports
)# 构造LSTM模型的输入层
m6 M.dl_layer_input.v1(shape7,5,batch_shape,dtypefloat32,sparseFalse,name
)# 构造LSTM模型的LSTM层
m10 M.dl_layer_lstm.v1(inputsm6.data,units32,activationtanh,recurrent_activationhard_sigmoid,use_biasTrue,kernel_initializerglorot_uniform,recurrent_initializerOrthogonal,bias_initializerZeros,unit_forget_biasTrue,kernel_regularizerNone,kernel_regularizer_l10,kernel_regularizer_l20,recurrent_regularizerNone,recurrent_regularizer_l10,recurrent_regularizer_l20,bias_regularizerNone,bias_regularizer_l10,bias_regularizer_l20,activity_regularizerNone,activity_regularizer_l10,activity_regularizer_l20,kernel_constraintNone,recurrent_constraintNone,bias_constraintNone,dropout0,recurrent_dropout0,return_sequencesFalse,implementation0,name
)# 构造LSTM模型的Dropout层
m12 M.dl_layer_dropout.v1(inputsm10.data,rate0.2,noise_shape,name
)# 构造LSTM模型的全连接层1
m20 M.dl_layer_dense.v1(inputsm12.data,units30,activationtanh,use_biasTrue,kernel_initializerglorot_uniform,bias_initializerZeros,kernel_regularizerNone,kernel_regularizer_l10,kernel_regularizer_l20,bias_regularizerNone,bias_regularizer_l10,bias_regularizer_l20,activity_regularizerNone,activity_regularizer_l10,activity_regularizer_l20,kernel_constraintNone,bias_constraintNone,name
)# 构造LSTM模型的Dropout层2
m21 M.dl_layer_dropout.v1(inputsm20.data,rate0.2,noise_shape,name
)# 构造LSTM模型的全连接层2
m22 M.dl_layer_dense.v1(inputsm21.data,units1,activationtanh,use_biasTrue,kernel_initializerglorot_uniform,bias_initializerZeros,kernel_regularizerNone,kernel_regularizer_l10,kernel_regularizer_l20,bias_regularizerNone,bias_regularizer_l10,bias_regularizer_l20,activity_regularizerNone,activity_regularizer_l10,activity_regularizer_l20,kernel_constraintNone,bias_constraintNone,name
)# 初始化LSTM模型
m34 M.dl_model_init.v1(inputsm6.data,outputsm22.data
)# 训练LSTM模型
m5 M.dl_model_train.v1(input_modelm34.data,training_datam4.data_1,optimizerRMSprop,lossmean_squared_error,metricsmae,batch_size256,epochs5,n_gpus0,verbose2:每个epoch输出一行记录
)# 使用LSTM模型进行预测
m11 M.dl_model_predict.v1(trained_modelm5.data,input_datam8.data_1,batch_size1024,n_gpus0,verbose2:每个epoch输出一行记录
)# 使用m24_run_bigquant_run函数运行缓存模式
m24 M.cached.v3(input_1m11.data,input_2m18.data,runm24_run_bigquant_run,post_runm24_post_run_bigquant_run,input_ports,params{},output_ports
)# 执行交易
m19 M.trade.v4(instrumentsm9.data,options_datam24.data_1,start_date,end_date,initializem19_initialize_bigquant_run,handle_datam19_handle_data_bigquant_run,preparem19_prepare_bigquant_run,volume_limit0.025,order_price_field_buyopen,order_price_field_sellclose,capital_base1000000,auto_cancel_non_tradable_ordersTrue,data_frequencydaily,price_type后复权,product_type股票,plot_chartsTrue,backtest_onlyFalse,benchmark000300.SHA
)