【Python技术】使用akshare、scikit-learn预测股票涨跌简单例子

news2024/9/20 14:36:15

昨天写了一篇文章 【Python技术】使用akshare、pyecharts绘制K线图 , 有同学私信我,怎么实现预测股票涨跌。 说实话,之前我没细想过,本能的回答用大数据机器学习就可以搞。 趁着下班,写个demo例子演示下

1、先导入必要的库:

  • akshare: 用于获取股票数据

  • pandas: 用于数据处理和分析

  • scikit-learn: 用于机器学习模型的训练和预测

  • numpy: 用于数值计算

2、简单利用5日和20日移动平均线、RSI指标等指标,使用随机森林分类器模型。

备注:随机森林(Random Forest)是一种基于集成学习的机器学习算法,其目的是通过组合多个决策树模型来进行预测。随机森林通过对训练数据进行随机采样,以及在构建每个决策树节点时对特征进行随机选择,来增加模型的多样性和鲁棒性。

废话不多说,先上具体实现代码例子:

import akshare as ak
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import numpy as np


def fetch_stock_data(stock_code):
    # Fetch daily stock data using akshare
    # 新浪源 df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq")
    df = ak.stock_zh_a_hist(symbol=stock_code, adjust="qfq").iloc[:, :6]
    df.columns = [
        'date',
        'open',
        'close',
        'high',
        'low',
        'volume',
    ]
    df['date'] = pd.to_datetime(df['date'])
    df = df.set_index('date').sort_index()
    #print(df)
    return df


def prepare_data(df):
    # Calculate some basic technical indicators
    df['SMA5'] = df['close'].rolling(window=5).mean()
    df['SMA20'] = df['close'].rolling(window=20).mean()
    df['RSI'] = calculate_rsi(df['close'], window=14)

    # Create target variable (1 if price goes up, 0 if it goes down)
    df['target'] = (df['close'].shift(-1) > df['close']).astype(int)

    # Drop NaN values
    df = df.dropna()

    # Select features
    features = ['open', 'high', 'low', 'close', 'volume', 'SMA5', 'SMA20', 'RSI']
    X = df[features]
    y = df['target']

    return X, y


def calculate_rsi(prices, window=14):
    delta = prices.diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
    rs = gain / loss
    return 100 - (100 / (1 + rs))


def train_model(X, y):
    # Split the data into training and testing sets
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # Scale the features
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    # Train a Random Forest classifier
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train_scaled, y_train)

    # Make predictions on the test set
    y_pred = model.predict(X_test_scaled)

    # Calculate accuracy
    accuracy = accuracy_score(y_test, y_pred)
    print(f"Model accuracy: {accuracy:.2f}")

    return model, scaler


def predict_next_day(model, scaler, last_data):
    last_data_scaled = scaler.transform(last_data.reshape(1, -1))
    prediction = model.predict(last_data_scaled)
    probability = model.predict_proba(last_data_scaled)
    return prediction[0], probability[0]


def main(stock_code):
    # Fetch stock data
    df = fetch_stock_data(stock_code)

    # Prepare data
    X, y = prepare_data(df)

    # Train model
    model, scaler = train_model(X, y)

    # Predict for the next day
    last_data = X.iloc[-1].values
    prediction, probability = predict_next_day(model, scaler, last_data)

    if prediction == 1:
        direction = "up"
    else:
        direction = "down"

    print(f"Prediction for the next day: Stock is likely to go {direction}")
    print(f"Probability: Up - {probability[1]:.2f}, Down - {probability[0]:.2f}")


if __name__ == "__main__":
    #新浪源 stock_code = input("Enter the stock code (e.g., sh600000): ")
    #东方财富源
    stock_code = input("Enter the stock code (e.g., 600000): ")
    main(stock_code)

运行代码:

Enter the stock code (e.g., 600000): 000001
Model accuracy: 0.53
Prediction for the next day: Stock is likely to go down
Probability: Up - 0.30, Down - 0.70

预测大盘明天下跌0.7的几率,难道大盘明天还要跌?希望这个算法是有问题的。

实际的股票市场预测要复杂得多,受到许多这个简单模型没有考虑到的因素影响。在进行实际投资决策时, 最好自己学习专业的金融知识,咨询专业人士。

原文链接:
【Python技术】使用akshare、scikit-learn预测股票涨跌简单例子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言中的assert断言

Assert断言 断言是程序中处理异常的一种高级形式。可以在任何时候启用和禁用断言验证&#xff0c;因此可以在测试时启用断言&#xff0c;而在部署时禁用断言。同样&#xff0c;程序投入运行后&#xff0c;最终用户在遇到问题时可以重新启用断言。 用法&#xff1a; #…

Qt窗口——QDockWidget

文章目录 浮动窗口浮动窗口使用示例 浮动窗口 QDockWidget浮动窗口可以认为是子窗口&#xff0c;每一个子窗口都可以停靠在四周&#xff0c;像Qt Creator页面&#xff0c;就很多的子窗口&#xff1a; 浮动窗口使用示例 创建&#xff1a; QDockWidget* dockWidget new QDock…

宝马I-Plus手动变速器、K手动变速器、G手动变速器解析

(一) I-Plus手动变速器 1、技术特点 (1)改进齿轮组件结构。I-Plus手动变速器采用第四挡(直接挡)高转速方案&#xff0c;这样可以在保持轴中心距不变的前提下减小啮合力。由此提高驱动力矩后&#xff0c;使得在带有N53B3000发动机的528i车型上首次使用 I 手动变速器。 对啮合面几…

Python精选200Tips:151-155

实战项目 P151--气象数据爬取技术栈:数据爬虫P152--求解数独问题技术栈:代码逻辑+回溯法P153--疾病传播模型的100天模拟技术栈:SIR 模型(易感-感染-恢复模型)P154--复杂函数的最值求解技术栈:粒子群优化算法P155-- 评论情感分析技术栈:snownlp和jieba的应用运行系统:ma…

Opencv+Cuda编译的保姆级别教程

OpencvCuda编译的保姆级别教程 一、环境总览二、环境准备2.1 opencv和opencv扩展2.2 cuda环境下载2.2.1 首先电脑要有英伟达的显卡2.2.2 然后查看显卡驱动版本2.2.3 下载Cuda Toolkit工具包2.2.4 下载Cudnn库 2.3 CMake下载 三、CMake配置步骤3.1 加载路径第一次Configure3.1.1…

前端——表格、列表标签

今天我们来学习一下web开发里面的表格标签、列表标签 常用快捷键&#xff1a; shift alt 下 复制粘贴选中内容 表格标签 table HTML 表格由 <table> 标签来定义。 HTML 表格是一种用于展示结构化数据的标记语言元素。 每个表格均有若干行&#xff08;由 <tr>…

yolov5测试代码

一般源码的测试代码涉及很多文件&#xff0c;因项目需要写一个独立测试的代码。传入的是字典 import time import cv2 import os import numpy as np import torch from modules.detec.models.common import DetectMultiBackend from modules.detec.utils.dataloaders import …

京东商品属性的详细api数据解析:颜色、尺寸与材质

京东&#xff08;JD.com&#xff09;作为一个大型电商平台&#xff0c;其商品信息通过API接口提供给开发者或第三方服务使用&#xff0c;以便进行商品搜索、展示、分析等操作。然而&#xff0c;直接访问京东的详细商品属性&#xff08;如颜色、尺寸、材质等&#xff09;API通常…

数据的表示和存储 第2讲 定点数的编码表示

​ 互联网行业 算法研发工程师 ​ 全文概括&#xff1a; 本讲介绍了定点数的编码表示&#xff0c;主要包括原码、补码和移码。 原码表示方式简单&#xff0c;正数用0表示&#xff0c;负数用1表示&#xff0c;但存在表示不唯一和加减运算不统一的问题。 补码表示方式解决了…

zabbix“专家坐诊”第256期问答

原作者&#xff1a;乐维社区 原文链接&#xff1a;https://forum.lwops.cn/questions 问题一 Q&#xff1a;zabbix 6.4.18版本的&#xff0c;使用zabbix_agentd2监控mysql数据库&#xff0c;只能在界面配置mysql的相关信息吗&#xff1f;这个在zabbix表里面是明文存储的&#x…

集采良药:从“天价神药”到低价良药,伊马替尼的真实世界研究!

在医疗科技日新月异的今天&#xff0c;有一种药物以其卓越的疗效和深远的影响力&#xff0c;成为了众多患者心中的“精准武器”——伊马替尼。这款药物不仅在慢性髓细胞白血病&#xff08;CML&#xff09;的治疗上屡创佳绩&#xff0c;更是胃肠道间质瘤&#xff08;GIST&#x…

微信小程序自定义navigationBar顶部导航栏(背景图片)适配所有机型,使用tdesign-miniprogram t-navbar设置背景图片

设置导航栏样式自定义 一定要设置&#xff0c;不然页面会出现一个原生的导航栏&#xff0c;一个自定义的 // app.json文件 "window": {"navigationStyle": "custom" }设置导航栏样式 我这里使用tdesign-miniprogram t-navbar&#xff0c;t-na…

大模型的热度正在下降,大模型的未来在哪里?

“ 技术是一个需要沉淀和厚积薄发的过程 ” 任何事物都会经过起步&#xff0c;发展&#xff0c;顶峰&#xff0c;平稳&#xff0c;下降&#xff0c;灭亡的过程&#xff0c;大模型技术也不例外。 而从现今的趋势来看&#xff0c;大模型的热度正在不断下降&#xff0c;这到底意…

虫情测报灯的工作原理

型号&#xff1a;TH-CQ1】虫情测报灯是一种专门用于监测农田、林区等环境中昆虫数量和种类的设备&#xff0c;也称为智能虫情测报灯或物联网虫情测报灯。它通过特定的光源和颜色吸引昆虫&#xff0c;并利用高压电网或远红外自动处理技术等手段将昆虫击杀或处理&#xff0c;从而…

《黑龙江水产》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《黑龙江水产》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定 学术期刊。 问&#xff1a;《黑龙江水产》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;黑龙江省农业农村厅 …

【QT】系统-下

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;QTheadrun() &#x1f449;&#x1f3fb;QMutex&#x1f449;&#x1f3fb;QWaitCondition&#x1f449;&#x1f3fb;Q…

视频存储EasyCVR视频监控汇聚管理平台设备录像下载报错404是什么原因?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…

基于SpringBoot的智能排课系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 &#xff08;一&#xff09;选题来源与背景 高校的每学期伊始&#xff0c;排课是教务处工作中的重中之重。安排合理无资源冲突&#xff08;教师、教室和设备等教学资源&#xff09;的课表是教务工作必须面临的问题。传统的人工…

规模化电动汽车接入配电网调度方法

规模日益增长的电动汽车和可再生能源带来的不确定性给配电网的安全运营带来了严峻挑战。为综合考虑多重不确定性、平衡运营成本与系统可靠性,首先,提出一种基于分布鲁棒联合机会约束的电动汽车-配电网充放电调度模型。该模型将节点电压、支路功率、备用需求等通过联合机会约束建…

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)

概述 在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。听说里面新增了能让数据记录“借尸还魂”的绝妙法器,到底是真是假呢? 我们在上篇博文中介绍了 History Trace 是如何稳妥的处理数据删除操作的。而在这里,我们将继续介绍 SwiftData 2.0 中另一个新特性:“墓…