文章目录
- [0 前言](#0 前言)
 - [1 课题背景](#1 课题背景)
 - [2 实现效果](#2 实现效果)
 - [3 软件架构](#3 软件架构)
 - [4 工具介绍](#4 工具介绍)
 - [5 最后](#5 最后)
 
0 前言
🔥 优质竞赛项目系列,今天要分享的是
🚩 机器学习股票大数据量化分析与预测系统
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
 - 工作量:3分
 - 创新点:3分
 
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
1 课题背景
基于机器学习的股票大数据量化分析系统,具有以下功能:
- 采集保存数据;
 - 分析数据;
 - 可视化;
 - 深度学习股票预测
 
2 实现效果
UI界面设计
功能简述

日常数据获取更新

交易功能

web预测界面
- LSTM长时间序列预测
 - RNN预测
 - 机器学习预测
 - 股票指标分析
 

预测效果如下:




RSRS选股界面

3 软件架构
整体的软件功能结构如下图

4 工具介绍
Flask框架
简介
Flask是一个基于Werkzeug和Jinja2的轻量级Web应用程序框架。与其他同类型框架相比,Flask的灵活性、轻便性和安全性更高,而且容易上手,它可以与MVC模式很好地结合进行开发。Flask也有强大的定制性,开发者可以依据实际需要增加相应的功能,在实现丰富的功能和扩展的同时能够保证核心功能的简单。Flask丰富的插件库能够让用户实现网站定制的个性化,从而开发出功能强大的网站。
本项目在Flask开发后端时,前端请求会遇到跨域的问题,解决该问题有修改数据类型为jsonp,采用GET方法,或者在Flask端加上响应头等方式,在此使用安装Flask-
CORS库的方式解决跨域问题。此外需要安装请求库axios。
Flask框架图

代码实例
            
            
              python
              
              
            
          
              from flask import Flask, render_template, jsonify
    import requests
    from bs4 import BeautifulSoup
    from snownlp import SnowNLP
    import jieba
    import numpy as np
    
    app = Flask(__name__)
    app.config.from_object('config')
    
    # 中文停用词
    STOPWORDS = set(map(lambda x: x.strip(), open(r'./stopwords.txt', encoding='utf8').readlines()))
    
    headers = {
        'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        'accept-language': "en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6",
        'cookie': 'll="108296"; bid=ieDyF9S_Pvo; __utma=30149280.1219785301.1576592769.1576592769.1576592769.1; __utmc=30149280; __utmz=30149280.1576592769.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _vwo_uuid_v2=DF618B52A6E9245858190AA370A98D7E4|0b4d39fcf413bf2c3e364ddad81e6a76; ct=y; dbcl2="40219042:K/CjqllYI3Y"; ck=FsDX; push_noty_num=0; push_doumail_num=0; douban-fav-remind=1; ap_v=0,6.0',
        'host': "search.douban.com",
        'referer': "https://movie.douban.com/",
        'sec-fetch-mode': "navigate",
        'sec-fetch-site': "same-site",
        'sec-fetch-user': "?1",
        'upgrade-insecure-requests': "1",
        'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 Edg/79.0.309.56"
    }
    
    login_name = None
    # --------------------- html render ---------------------
    @app.route('/')
    def index():
        return render_template('index.html')
    @app.route('/search')
    def search():
        return render_template('search.html')
    @app.route('/search/')
    def search2(movie_name):
        return render_template('search.html')
        MySQL数据库
简介
MySQL是一个关系型数据库,由瑞典MySQL AB公司开发,目前已经被Oracle收购。
Mysql是一个真正的多用户、多线程的SQL数据库。其使用的SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,每个关系型数据库都可以使用MySQL是以客户机/服务器结构实现的,也就是俗称的C/S结构,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
Python操作mysql数据库
本项目中我们需要使用python来操作mysql数据库,因此需要用到 pymysql 这个库
安装:
pip install pymysql
数据库连接实例:
导入pymysql
import pymysql
# 定义一个函数
# 这个函数用来创建连接(连接数据库用)
def mysql_db():
    # 连接数据库肯定需要一些参数
    conn = pymysql.connect(
        host="127.0.0.1",
        port=3307,
        database="ksh",
        charset="utf8",
        user="root",
        passwd="123456"
    )
if __name__ == '__main__':
    mysql_db()
        
数据库连接实例:
导入pymysql
import pymysql
# 定义一个函数
# 这个函数用来创建连接(连接数据库用)
def mysql_db():
    # 连接数据库肯定需要一些参数
    conn = pymysql.connect(
        host="127.0.0.1",
        port=3307,
        database="ksh",
        charset="utf8",
        user="root",
        passwd="123456"
    )
if __name__ == '__main__':
    mysql_db()
        
LSTM
简介
长短期记忆(Long short-term memory,
LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
LSTM结构(图右)和普通RNN的主要输入输出区别如下所示。


Torch代码实现
import torch
from sklearn.metrics import accuracy_score
#定义需要的模型结构,继承自torch.nn.Module
#必须包含__init__和forward两个功能
class mylstm(torch.nn.Module):
    def __init__(self, lstm_input_size, lstm_hidden_size, lstm_batch, lstm_layers):
        # 声明继承关系
        super(mylstm, self).__init__()
 
        self.lstm_input_size, self.lstm_hidden_size = lstm_input_size, lstm_hidden_size
        self.lstm_layers, self.lstm_batch = lstm_layers, lstm_batch
 
        # 定义lstm层
        self.lstm_layer = torch.nn.LSTM(self.lstm_input_size, self.lstm_hidden_size, num_layers=self.lstm_layers, batch_first=True)
        # 定义全连接层 二分类
        self.out = torch.nn.Linear(self.lstm_hidden_size, 2)
 
    def forward(self, x):
        # 激活
        x = torch.sigmoid(x)
        # LSTM
        x, _ = self.lstm_layer(x)
        # 保留最后一步的输出
        x = x[:, -1, :]
        # 全连接
        x = self.out(x)
        return x
 
    def init_hidden(self):
        #初始化隐藏层参数全0
        return torch.zeros(self.lstm_batch, self.lstm_hidden_size)
        5 最后
🧿 更多资料, 项目分享: