掘金 人工智能 前天 10:18
Python小白入门量化交易:用机器学习预测股票涨跌(实操教学)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文以通俗易懂的方式,引导读者使用Python构建一个简单的机器学习模型,预测股票市场的涨跌。文章从基础概念入手,介绍了机器学习的基本原理,以及如何利用Python中的pandas、baostock、sklearn等库,获取数据、构建模型、评估效果。通过沪深300指数的实例,演示了模型构建的完整流程,并提供了代码示例和图表展示。文章最后强调,这只是一个入门模型,鼓励读者不断尝试和改进,最终构建出自己的盈利策略。

💡 机器学习并非遥不可及,它通过让电脑从数据中学习规律来解决问题,例如预测股市涨跌。

📈 构建股票预测模型需要准备数据,文章使用baostock获取沪深300指数数据,并进行数据清洗和预处理。

📊 关键在于特征选择,文章选取了开盘收盘差值、高低点差值、5日均线等作为特征因子,输入模型进行训练。

🎯 模型训练后,使用测试数据评估其准确性,并进行模拟收益分析,验证模型预测的有效性。

99%的普通人可能会想:机器学习是不是离我们很远?是不是得是数学系出身、懂AI才能搞?

其实啊,不用那么复杂!机器学习,说白了,就是让电脑自己学经验,帮你做判断。就像你小时候看多了猫狗的照片,后来不用人教也能一眼认出来,这就是人类的“学习”。电脑呢?也类似,也是看图学样子,慢慢从数据里“悟”出来一些规律。

今天花姐带你搞点实在的,用Python做一个分类模型,让它告诉我们:明天股市涨还是跌?该买还是该卖?


入门准备:你得会点啥?

在开始之前,有几个小前提,咱先说清楚。

你起码要:

如果你是完全0基础,也别慌,你可以收藏起来等你以后想学的时候再翻出来。


什么是机器学习?

简单说,它是这样一件事:

我们不再告诉电脑“你遇到什么情况该怎么做”,而是——我们给它很多例子,它自己去总结规律。

举个例子:

以前如果要写个自动驾驶的程序,代码会这样写:

if 遇到红灯:    停车if 遇到绿灯:    行走if 遇到黄灯:    等一等

现在不需要这么麻烦了。你把几千张有红灯、绿灯、黄灯的照片扔给它,它自己学着分辨。

股票市场也一样——你不告诉它“哪个形态会涨”,而是你喂给它历史数据,它自己去找规律。


分类模型是啥?

“分类”就是分门别类。电脑会看图说话,说:“这是涨的信号”“这是跌的信号”。

这就像你教小朋友认识水果:圆的是苹果,长的是香蕉,带毛的是猕猴桃,教多了,孩子看到新水果也能猜个八九不离十。

在股票里,我们可以做很多分类:明天涨 or 跌(这就是二分类);买 / 持有 / 卖(这是多分类);极端行情 or 普通震荡(不平衡分类),今天我们先从最简单的二分类学起来。


来,建个模型预测明天涨不涨

第一步:把工具都请出来

先把用到的Python包安装下

pip install pandas numpy baostock matplotlib seaborn scikit-learn

pandas和numpy是用来处理数据的,baostock是用来获取股票行情的,matplotlib是画图的,seaborn是在matplotlib基础上封装的库,让画出来的图更美观,sklearn是用来做机器学习的,其中SVC 是支持向量机(Support Vector Classifier),一个分类模型。我们可以用它来判断股票明天是涨还是跌,属于“监督学习”的一类。accuracy_score用来评估模型效果的,比如模型预测得准不准,算个准确率出来,一看就知道行不行。

import pandas as pdimport numpy as npimport baostock as bsimport matplotlib.pyplot as pltimport seabornfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score

第二步:下载沪深300指数行情

这里用沪深300指数来做演示,你也可以换成其它股票

# 登陆系统lg = bs.login()if lg.error_code != '0':    print("登录失败,错误信息:", lg.error_msg)else:    print("登录成功")# 获取沪深300指数日线数据,代码是“sh.000300”rs = bs.query_history_k_data_plus("sh.000300",    "date,code,open,high,low,close,volume",    start_date='2020-01-01', end_date='2025-06-10',    frequency="d", adjustflag='3')  # '3'代表不复权data_list = []while (rs.error_code == '0') & rs.next():    data_list.append(rs.get_row_data())df = pd.DataFrame(data_list, columns=rs.fields)# 登出bs.logout()# 转换为数字类型for col in ['open', 'high', 'low', 'close', 'volume']:    df[col] = df[col].astype(float)df.close.plot(figsize=(10,5))plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题plt.ylabel("沪深300 收盘价")plt.show()

数据获取以后我们用plt绘制下收盘价走势图


第三步:明确“预测目标”

原始行情有了,接下来我们要通过程序来做标记,标记的内容为:

“明天会涨吗?”

代码是这么写的:

y = np.where(df['close'].shift(-1) > df['close'], 1, -1)

这样我们会得到一个[-1 -1 1 ... 1 -1 -1]这样的数组,1表示明天会上涨,-1表示明天会下跌。


第四步:帮模型生成特征因子

到这一步,你可能在想:“模型怎么知道涨还是跌啊?凭感觉吗?”当然不是啦~我们得先喂给它一些线索,也就是——特征因子

其实特征因子嘛,说白了就是你“告诉模型看什么”的方式。能用的非常多,比如价格的变化(开盘、收盘、最高、最低)、技术指标(像RSI、MACD、布林带)、成交量的异动,甚至是某些衍生指标,比如过去几天的涨跌次数、震荡区间、强弱股排名等等。

聪明的你可能已经想到——“这些是不是都可以自己组合?”没错!这时候AI就能帮上大忙了。现在很多量化平台、甚至开源工具都可以帮你自动生成、组合和筛选因子

df['open-close'] = df.open - df.closedf['high-low'] = df.high - df.lowdf['ma5'] = df['close'].rolling(window=5).mean()  df = df.dropna() #计算均线后会产生空值,这里把空值删除X = df[['open-close', 'high-low','ma5']]

上面的代码我们用了3个最简单的特征:

生产环境下,请根据你自己的经验来设置


第五步:拆开数据,一部分训练,一部分测试

split = int(0.8 * len(df))X_train, y_train = X[:split], y[:split]X_test, y_test = X[split:], y[split:]

这就像备战高考一样——通过3年的学习:看书、刷题(训练数据 train data);然后高考那天,碰上一堆没见过的新题(测试数据 test data),看看到底学得怎么样。


第六步:模型上线!

cls = SVC().fit(X_train, y_train)

SVC,也就是支持向量机,处理这种简单的分类任务——它真的蛮好用的,入门首选。


第七步:效果到底咋样?看看分数先!

accuracy_train = accuracy_score(y_train, cls.predict(X_train))accuracy_test = accuracy_score(y_test, cls.predict(X_test))print(f"\nTrain Accuracy: {accuracy_train*100:.2f}%")print(f"Test Accuracy: {accuracy_test*100:.2f}%")

只要测试集 (Test Accuracy) 准确率超过50%,就已经打赢了“硬币交易者”😎


第八步:做点真实预测 + 模拟收益

df['Predicted_Signal'] = 0df['Predicted_Signal'].iloc[split:] = cls.predict(X_test)df['Return'] = np.log(df.close.shift(-1) / df.close) * 100df['Strategy_Return'] = df['Return'] * df['Predicted_Signal']

这个逻辑很实在:如果模型说“涨”,我们就进场。回头看收益就知道对不对。


第九步:来,画个图,看赚钱没?

df['Strategy_Return'].iloc[split:].cumsum().plot(figsize=(10,5))plt.ylabel("Strategy Returns (%)")plt.show()

这个图画出来,如果是一路向上,那你这策略就是“挣了”。

如果一地鸡毛……那也别伤心,至少你开始上手机器学习了!


花姐说

你可能会问:

花姐,这种模型真的能用吗?

我的回答是——它不能直接拿来上实盘

这只是一个最基础的机器学习分类模型,还有很多需要改进的地方,比如:多加点特征,像MACD、RSI、布林线、量比啥的;更换不同的分类模型,比如逻辑回归、随机森林、XGBoost、甚至深度学习;用更长的数据周期、或者不同市场数据试试看;加点风控,比如止损止盈、资金管理、仓位控制等等

一句话:不断试,不断错,不断调。机器学习就是个炼丹过程。

你可以大胆动手改代码,每动一次,也许就离一个稳定盈利的策略更近一步

祝你越学越有感觉,越投越上头,早日训练出属于自己的赚钱模型!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

机器学习 Python 股票预测 量化交易
相关文章