LSTM Networks应用于股票市场之Functional Model。本文是已初步探索,如下示例中 使用 LSTM 预测沪深300 涨跌。
用一个input(6 features * 30 time series)训练LSTM,将训练结果与另一个辅助性输入label(np.round(close/500))一起作为input输入至Dense层 LSTM future_return_5作为output(time series=30,features=[‘close’,‘open’,‘high’,‘low’,‘amount’,‘volume’])- # 0. 基础参数配置
- class lstm_conf:
- # 股票代码:用LSTM预测沪深300指数
- instrument = '000300.HIX'
- # 设置用于训练和回测的开始/结束日期
- start_date = '2005-01-01'
- split_date = '2015-01-01'
- end_date = '2017-05-01'
- fields = ['close', 'open', 'high', 'low', 'amount', 'volume']
- # 每个input的长度,使用过去30天的数据
- feature_back_days = 30
- # 指定进行梯度下降时每个batch包含的样本数,训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步
- batch_size = 100
- # 1. 加载数据
- def load_and_label_data(instrument, start_date, end_date, fields):
- df = D.history_data(instrument, start_date, end_date, fields)
- # 只保留有数据的交易日
- df = df[df.amount>0]
- # 计算收益:以明日开盘价买入,第五天的收盘价卖出
- df['return'] = df['close'].shift(-5) / df['open'].shift(-1) - 1
- #去极值
- df['return'] = df['return'].clip(-0.2, 0.2)
- # 适当增大return范围,利于LSTM模型训练
- df['return'] = df['return'] * 10
- # 辅助输入
- df['label'] = np.round(df['close'] / 500)
- df.dropna(inplace=True)
- df.reset_index(drop=True, inplace=True)
- return Outputs(data=DataSource.write_df(df))
- lstm_m1 = M.cached.v2(run=load_and_label_data, kwargs=dict(
- instrument=lstm_conf.instrument,
- start_date=lstm_conf.start_date,
- end_date=lstm_conf.end_date,
- fields=lstm_conf.fields
- ))


雷达卡





京公网安备 11010802022788号







