直接正题,上代码:
import os
import tushare as ts
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
import tkinter as tk
from tkinter import filedialog
# 设置你的tushare token
ts.set_token('your_token')
# 初始化pro接口
pro = ts.pro_api()
# 获取股票数据
df = pro.daily(ts_code='000050.SZ', start_date='20150130', end_date='20230519')
# 预处理数据
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
prices = df['close'].values
# 创建一个Tkinter窗口
root = tk.Tk()
root.withdraw() # 隐藏Tkinter窗口
# 打开文件夹对话框让用户选择模型保存文件夹
log_dir = filedialog.askdirectory()
scaler = MinMaxScaler()
prices = scaler.fit_transform(np.array(prices).reshape(-1, 1))
# 构造训练数据
window_size = 1000 # 使用过去1000天的数据
X = []
y = []
for i in range(window_size, len(prices)):
X.append(prices[i-window_size:i])
y.append(prices[i])
X = np.array(X)
y = np.array(y)
# 创建模型
model = tf.keras.models.Sequential([
tf.keras.layers.SimpleRNN(50, return_sequences=True, input_shape=[None, 1]),
tf.keras.layers.SimpleRNN(50),
tf.keras.layers.Dense(1)
])
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 设定模型文件路径
model_file_path = os.path.join(log_dir, 'rnn_model')
# 设置训练回调函数
checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(model_file_path, save_best_only=True)
early_stopping_cb = tf.keras.callbacks.EarlyStopping(patience=10, restore_best_weights=True)
# 加载之前的模型,如果存在的话
if os.path.exists(model_file_path):
print(f"Loading model from {model_file_path}")
model = tf.keras.models.load_model(model_file_path)
# 训练模型
print(f"Training model")
model.fit(X, y, epochs=100, batch_size=32, callbacks=[checkpoint_cb, early_stopping_cb])
print(f"Saving model to {model_file_path}")
model.save(model_file_path, save_format="tf")
股票价格预测是量化交易的基础,深度学习提供了一种方法框架。本文通过一个简单案例,介绍使用深度学习RNN模型预测股票价格的过程。首先,我们需要准备数据。使用Tushare pro接口可以获取股票的历史日行情数据。这里我们取上证指数成分股中000050的2015年至2023年数据。提取日期、开盘价、最高价、最低价、收盘价、成交量等,以日期为索引,收盘价作为目标变量。有了数据,我们需要进行预处理。设置日期为索引,提取收盘价series,并使用MinMaxScaler对价格数据进行标准化,方便模型训练。然后根据时间序列特征,我们使用过去n天的价格构造模型输入X,第n+1天的价格作为输出y。这里设置n=1000,过去1000天价格作为输入,第1001天价格为标签。接下来,我们定义一个简单的RNN模型。首先是两层简单RNN层,包含50个节点,返回序列信息并处理时间步为None的输入。然后一层全连接层作最终输出。RNN层可以学习时间序列数据的长期依赖关系,适用于预测任务。编译模型时,使用adam优化器和均方误差损失函数。设定模型保存路径和训练回调函数。ModelCheckpoint将保存训练过程中评价指标最优的模型。EarlyStopping将在10个epoch内评价指标没有提高时停止训练,防止过拟合。如果存在预训练模型,则加载继续训练;否则开始训练新模型。训练100个epoch,批大小为32。最后,我们保存训练完毕的最终模型,并隐藏Tkinter窗口,只使用文件选择框进行交互。通过这个案例,我们了解了使用深度学习进行股票价格预测的基本思路和流程。但本模型仅使用价格数据,效果有限。我们可以加入更丰富的数据,如交易量、技术指标等作为输入;使用更复杂的LSTM或Transformer模型;调整训练参数如学习率、batch大小和epoch数等;优化回调函数或加入模型集成方法等手段进一步提高预测精度。这需要不断尝试、总结和提高,通过理论与实践相结合,拓展专业知识面,才能开发出真正高效的股票量化模型。本教程为此提供了一个简单入门,让我们在后续研究中有所借鉴。