农家乐网站建设方案,轻抖云网络营销推广,制作书签,推广互联网营销功能说明
本代码实现了一个基于长短期记忆网络#xff08;LSTM#xff09;的量化交易策略#xff0c;通过机器学习方法对历史金融数据进行特征工程处理#xff0c;并利用LSTM模型预测未来价格走势。该策略的核心在于从原始市场数据中提取有效特征#xff0c;并通过参数筛选…功能说明本代码实现了一个基于长短期记忆网络LSTM的量化交易策略通过机器学习方法对历史金融数据进行特征工程处理并利用LSTM模型预测未来价格走势。该策略的核心在于从原始市场数据中提取有效特征并通过参数筛选优化模型性能。主要功能包括数据预处理、特征选择、模型训练和交易信号生成。需要注意的是该策略存在过拟合风险在极端市场条件下可能失效实际应用时需结合风险管理措施。数据准备与预处理importnumpyasnpimportpandasaspdfromsklearn.preprocessingimportMinMaxScalerfromsklearn.feature_selectionimportSelectKBest,f_regressiondefprepare_data(csv_path,lookback60):加载并预处理时间序列数据datapd.read_csv(csv_path)data[Date]pd.to_datetime(data[Date])data.set_index(Date,inplaceTrue)# 计算技术指标data[SMA_20]data[Close].rolling(window20).mean()data[RSI]calculate_rsi(data[Close])data[MACD]calculate_macd(data[Close])data[Volatility]data[Close].pct_change().std()*np.sqrt(252)# 填充缺失值data.ffill(inplaceTrue)data.dropna(inplaceTrue)# 归一化scalerMinMaxScaler(feature_range(0,1))scaled_datascaler.fit_transform(data[[Open,High,Low,Close,Volume,SMA_20,RSI,MACD,Volatility]])# 创建时间窗口X,y[],[]foriinrange(lookback,len(scaled_data)):X.append(scaled_data[i-lookback:i])y.append(scaled_data[i,3])# 预测Close价格returnnp.array(X),np.array(y)特征工程实践deffeature_engineering(X,y,k8):使用统计方法进行特征选择# 重塑数据以适应SelectKBestX_reshapedX.reshape(X.shape[0],X.shape[1]*X.shape[2])# 选择前k个最佳特征selectorSelectKBest(score_funcf_regression,kk)X_newselector.fit_transform(X_reshaped,y)# 获取选中的特征索引selected_indicesselector.get_support(indicesTrue)# 重构为LSTM输入形状X_selectedX_selected.reshape(X_selected.shape[0],X.shape[1],k)returnX_selected,selected_indicesdefcreate_lagged_features(df,lags[1,2,3,5,7]):创建滞后特征forlaginlags:df[fClose_lag_{lag}]df[Close].shift(lag)df[fVolume_lag_{lag}]df[Volume].shift(lag)returndf.dropna()LSTM模型架构fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportLSTM,Dense,Dropoutfromtensorflow.keras.optimizersimportAdamdefbuild_lstm_model(input_shape,units50,dropout_rate0.2):构建LSTM神经网络modelSequential([LSTM(units,return_sequencesTrue,input_shapeinput_shape),Dropout(dropout_rate),LSTM(units,return_sequencesFalse),Dropout(dropout_rate),Dense(25,activationrelu),Dense(1)])model.compile(optimizerAdam(learning_rate0.001),lossmse,metrics[mae])returnmodel# 模型实例化示例# input_shape (60, 8) # 60天窗口8个特征# model build_lstm_model(input_shape)超参数优化策略fromsklearn.model_selectionimportTimeSeriesSplitfromtensorflow.keras.wrappers.scikit_learnimportKerasRegressorfromsklearn.model_selectionimportGridSearchCVdefhyperparameter_tuning(X,y):使用网格搜索优化超参数# 创建模型构建函数defcreate_model(neurons32,dropout0.2,lr0.001):modelSequential([LSTM(neurons,return_sequencesTrue,input_shape(X.shape[1],X.shape[2])),Dropout(dropout),LSTM(neurons),Dropout(dropout),Dense(1)])model.compile(optimizerAdam(lrlr),lossmse)returnmodel# 创建包装器modelKerasRegressor(build_fncreate_model,epochs50,batch_size32,verbose0)# 定义参数网格param_grid{neurons:[32,50],dropout:[0.1,0.3],lr:[0.001,0.0005]}# 时间序列交叉验证tscvTimeSeriesSplit(n_splits5)# 网格搜索gridGridSearchCV(estimatormodel,param_gridparam_grid,cvtscv,scoringneg_mean_squared_error)grid_resultgrid.fit(X,y)returngrid_result.best_params_交易信号生成系统defgenerate_trading_signals(model,X_test,threshold0.005):基于预测结果生成交易信号predictionsmodel.predict(X_test)returnsnp.diff(predictions.flatten())# 创建信号数组signalsnp.zeros(len(returns))signals[returnsthreshold]1# 买入信号signals[returns-threshold]-1# 卖出信号# 扩展信号长度以匹配原始数据full_signalsnp.concatenate(([0],signals))returnfull_signalsdefcalculate_strategy_performance(prices,signals,initial_capital10000):计算策略绩效指标# 计算每日收益率daily_returnsprices.pct_change()# 策略收益 信号 × 次日收益strategy_returnssignals.shift(-1)*daily_returns# 累计净值cumulative_returns(1strategy_returns).cumprod()# 最大回撤peakcumulative_returns.expanding(min_periods1).max()drawdown(cumulative_returns-peak)/peak max_drawdowndrawdown.min()# 夏普比率sharpe_rationp.sqrt(252)*strategy_returns.mean()/strategy_returns.std()return{final_value:cumulative_returns.iloc[-1]*initial_capital,max_drawdown:max_drawdown,sharpe_ratio:sharpe_ratio,total_return:cumulative_returns.iloc[-1]-1}风险控制机制classRiskManager:风险管理器实现动态仓位控制def__init__(self,stop_loss0.05,take_profit0.1,position_limit0.1):self.stop_lossstop_loss# 止损阈值self.take_profittake_profit# 止盈阈值self.position_limitposition_limit# 单资产最大仓位defadjust_position(self,current_price,entry_price,current_position,equity_curve):根据风险参数调整仓位# 计算浮动盈亏unrealized_pnl(current_price-entry_price)/entry_priceifcurrent_position!0else0# 检查止损/止盈条件ifabs(unrealized_pnl)self.stop_lossorabs(unrealized_pnl)self.take_profit:return0# 平仓# 动态仓位限制max_positionself.position_limit*equity_curve.iloc[-1]ifabs(current_position)max_position:adjusted_positionnp.sign(current_position)*max_positionreturnadjusted_position-current_position# 返回需要调整的量return0# 无需调整完整策略整合classLSTMTradingStrategy:完整的LSTM交易策略实现def__init__(self,data_path,lookback60,test_size0.2):self.data_pathdata_path self.lookbacklookback self.test_sizetest_size self.modelNoneself.scalerNonedeftrain(self):训练整个策略流程# 1. 数据准备X,yprepare_data(self.data_path,self.lookback)split_idxint(len(X)*(1-self.test_size))X_train,X_testX[:split_idx],X[split_idx:]y_train,y_testy[:split_idx],y[split_idx:]# 2. 特征工程X_train_fe,selected_indicesfeature_engineering(X_train,y_train)X_test_feX_test[:,:,selected_indices]# 3. 模型训练self.modelbuild_lstm_model((X_train_fe.shape[1],X_train_fe.shape[2]))historyself.model.fit(X_train_fe,y_train,validation_data(X_test_fe,y_test),epochs100,batch_size32,callbacks[EarlyStopping(monitorval_loss,patience10)],verbose1)# 4. 信号生成signalsgenerate_trading_signals(self.model,X_test_fe)# 5. 绩效评估performancecalculate_strategy_performance(pd.Series(y_test),signals)returnperformance,signals特征重要性分析importshapimportmatplotlib.pyplotaspltdefanalyze_feature_importance(model,X_sample,feature_names):使用SHAP解释模型决策过程# 创建解释器explainershap.DeepExplainer(model,X_sample)shap_valuesexplainer.shap_values(X_sample)# 可视化特征重要性plt.figure(figsize(10,6))shap.summary_plot(shap_values,X_sample,feature_namesfeature_names)plt.tight_layout()plt.show()# 返回排序后的特征重要性importancepd.DataFrame({Feature:feature_names,Importance:np.abs(shap_values).mean(axis0)}).sort_values(Importance,ascendingFalse)returnimportance# 示例调用# sample_data X_test[:100] # 取部分测试数据用于解释# features [Open,High,Low,Close,Volume,SMA_20,RSI,MACD,Volatility]# importance_df analyze_feature_importance(model, sample_data, features)