Tushare + Keras:股票数据获取与模型训练实战

直接正题,上代码:

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数等;优化回调函数或加入模型集成方法等手段进一步提高预测精度。这需要不断尝试、总结和提高,通过理论与实践相结合,拓展专业知识面,才能开发出真正高效的股票量化模型。本教程为此提供了一个简单入门,让我们在后续研究中有所借鉴。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无为而敬远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值