【Python】利用DT决策树进行股票涨跌预测

【Python】利用DT决策树进行股票涨跌预测

本文选取了江淮汽车上市至今(2023年6月21日)的交易数据作为案例, 计算了换手率和20日涨跌幅作为预测因子,使用决策树来进行股票涨跌幅预测,最终结果显示,预测的准确率在50%左右徘徊,效果不佳。

换手率是衡量股票流动性的指标,表示单位时间内股票的成交量占流通股本的比例。换手率高通常意味着市场对该股票的交易活跃度较高。
20日波动率是衡量股票价格变动幅度的指标,表示过去20个交易日的价格波动情况,波动率高通常表示股票价格波动较大。

"""
读取股票交易数据(csv文件),计算因子
使用决策树来进行预测股票未来收益情况
"""
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 读取江淮汽车股票信息
df = pd.read_csv('sh600418.csv', encoding='gbk')
# 换手率 = 成交量 / 流通股本
df['换手率'] = df['成交量'] / (df['流通市值'] / df['收盘价'])
df['20日波动率'] = df['收盘价'].rolling(20).std()
df['收益率'] = df['收盘价'] / df['前收盘价'] - 1
df['涨还是跌'] = '涨'
# 不涨不跌也是跌
df.loc[df['收益率']<=0, '涨还是跌'] = '跌'
df['下一天涨还是跌'] = df['涨还是跌'].shift(-1)

df = df[['股票名称', '交易日期', '收益率', '涨还是跌', '下一天涨还是跌', '换手率', '20日波动率']]
df.dropna(inplace=True)
df.reset_index(inplace=True, drop=True)
print(df)

在这里插入图片描述

# 划分训练和测试集,20%为训练集,随机种子为1(这里不考虑时间序列的问题,单纯考虑因子是否有效,现实中不能做到)
train_x, test_x, train_y, test_y = train_test_split(df[['换手率', '20日波动率']], df['下一天涨还是跌'], test_size=0.2, random_state=1)
model = DecisionTreeClassifier(max_depth=3)
model.fit(train_x, train_y)
pred_y = model.predict(test_x)
pred_df = pd.DataFrame()
pred_df['下一天涨还是跌'] = list(test_y)
pred_df['预测下一天涨还是跌'] = list(pred_y)
print(pred_df)
print('DT的涨跌预测准确率为:{:.4f}'.format(accuracy_score(pred_y, test_y)))

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

strangequark

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

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

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

打赏作者

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

抵扣说明:

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

余额充值