量化分析预测股市?试试这个 Python 库

42c62773f075be10e7940b79388c17c2.png

本文将展示如何使用 Python 的第三方库 Stocker 来进行股票分析和预测。

安装第三方库

安装所需的库后,我们要做的第一件事就是将 Stocker 类导入到我们的 Python 代码中。我们可以通过在脚本目录中启动的 Jupyter Notebook 执行此操作。

!pip install quandl
!pip install fbprophet
!pip install plotly
from stocker importStocker

现在在 Python 代码中有 Stocker 类,我们可以使用它来创建该类的实例。在 Python 中,类的实例称为对象,创建对象的行为有时称为实例化或构造。为了创建 Stocker 对象,我们需要传入有效股票代码的名称。

# MSFT Stocker Initialized. Data covers 1986-03-13 to 2018-01-16.
microsoft = Stocker('MSFT')
MSFT StockerInitialized. Data covers 1986-03-1300:00:00 to 2018-03-2700:00:00.

现在,我们有一个包含 Stocker 类所有属性的 microsoft 对象。Stocker 建立在 quandl WIKI 数据库上,该数据库使我们可以访问 3000 多只美国股票以及多年的每日价格数据(完整列表)。对于此示例,我们将坚持使用 Microsoft 数据。因为微软正在拥抱开源社区(包括 Python)。

Python 中的类由两个主要部分组成:属性和方法。无需赘述,属性是与整个类或与类的特定实例(对象)相关联的值或数据。方法是包含在类中的可以作用于该数据的函数。Stocker 对象的一个属性是特定公司的股票数据,当我们构造对象时,该属性与该对象相关联。我们可以访问该属性并将其分配给另一个变量进行检查:

# Stock is an attribute of the microsoft object
stock_history = microsoft.stock
stock_history.head()

Python 类的好处是方法(或函数)和它们作用的数据与同一个对象相关联。我们可以使用 Stocker 对象的一个方法来绘制股票的整个历史数据。

# A method (function) requires parentheses
microsoft.plot_stock()
MaximumAdj. Close= 96.77 on 2018-03-1200:00:00.
MinimumAdj. Close= 0.06 on 1986-03-2400:00:00.
CurrentAdj. Close= 89.47 on 2018-03-2700:00:00.

82072796ef9d5ec8d95e569b62b3285c.png

绘制的默认值是调整后的收盘价,它考虑了股票的分割(当一只股票被分割成多只股票时,比如 2 只,每只新股票价值是原始价格的 1/2)。

这是我们可以从 Google 搜索中找到的一个非常基本的图,但是我们自己用几行 Python 来完成它是令人满意的! plot_stock 函数有许多可选参数。默认情况下,此方法绘制整个日期范围的调整后收盘价,但我们可以选择范围、要绘制的统计数据以及绘图类型。例如,如果我们想将价格的每日变化与调整后的交易量(股票数量)进行比较,我们可以在函数调用中指定这些。

microsoft.plot_stock(start_date = '2000-01-03',  end_date = '2018-01-16',  stats = ['Daily Change', 'Adj. Volume'],  plot_type='pct')
MaximumDailyChange= 2.08 on 2008-10-1300:00:00.
MinimumDailyChange= -3.34 on 2017-12-0400:00:00.
CurrentDailyChange= -5.47 on 2018-03-2700:00:00.
MaximumAdj. Volume= 591052200.00 on 2006-04-2800:00:00.
MinimumAdj. Volume= 7425503.00 on 2017-11-2400:00:00.
CurrentAdj. Volume= 53704562.00 on 2018-03-2700:00:00.

f493303ba4c51a84df8b3d4d09096bf8.png

注意,y 轴是相对于统计平均值的百分比变化。这个单位是必要的,因为每天的交易量本来就是股票,范围在数亿,而每天的价格变化通常是几美元!通过转换为百分比变化,我们可以以相似的比例查看两个数据集。该图显示交易的股票数量与价格的每日变化之间没有相关性。这是令人惊讶的,因为我们可能期望在价格变化较大的日子里交易更多股票,因为人们急于利用波动。然而,唯一真正的趋势似乎是交易量随着时间的推移而减少。2017 年 12 月 4 日的价格也大幅下降,我们可以尝试将其与有关 Microsoft 的新闻报道联系起来。

使用 plot_stock,我们可以调查任何日期范围内数据中的任何数量,并寻找与现实世界事件的相关性。现在,我们将继续讨论 Stocker 中更有趣的部分之一:赚假钱!

让我们暂时假设我们有信心在公司的首次公开募股 (IPO) 上投资 100 股微软股票。我们现在有多富有?

microsoft.buy_and_hold(start_date='1986-03-13', end_date='2018-01-16', nshares=100)
MSFT Total buy and hold profit from1986-03-13 to 2018-01-16for100 shares = $8829.11

f8b91b5aea8e88e433b53fe5e2f6fd6e.png

使用这些结果将使我们能够及时调整我们的计划,以最大限度地提高利润。

加法模型

加法模型是分析和预测时间序列的强大工具,时间序列是最常见的现实世界数据类型之一。这个概念很简单:将时间序列表示为不同时间尺度上的模式和整体趋势的组合。我们知道微软股票的长期趋势是稳步上涨,但也可能有每年或每天的模式,例如每周二上涨,这在经济上是有益的。由 Facebook 开发的 Prophet 是一个用于通过日常观察(例如股票)分析时间序列的第三方库。Stocker 在底层使用 Prophet 为我们完成所有建模工作,因此我们可以使用简单的方法调用来创建和检查模型。

model, model_data = microsoft.create_prophet_model()

7369fc7df6ee6dc87d717537c26645bd.png

加法模型消除了数据中的噪声,这就是模型线与观测值不完全一致的原因。Prophet 模型还计算不确定性,这是建模的重要组成部分,因为在处理波动的现实过程时,我们永远无法确定我们的预测结果。我们也可以使用prophet模型对未来进行预测,但现在我们更关心过去的数据。请注意,此方法调用返回了两个对象,一个模型和一些我们分配给变量的数据。我们现在使用这些变量来绘制时间序列分量。

model.plot_components(model_data)
plt.show()

91e17b317ccaf2655821f863e42f5fbb.png

总体趋势是在过去三年中明显增加。似乎还有一个明显的年度模式,价格在 9 月和 10 月触底,并在 11 月和 1 月达到峰值。随着时间尺度的减小,数据变得更加嘈杂。在一个典型的月份中,信号多于噪音!如果我们认为可能存在每周模式,我们可以通过更改 Stocker 对象的weekly_seasonality 属性将其添加到先知模型中:

print(microsoft.weekly_seasonality)
microsoft.weekly_seasonality = True
print(microsoft.weekly_seasonality)
False
True

weekly_seasonality 的默认值为 False,但我们更改了该值以在我们的模型中包含每周模式。然后我们再次调用 create_prophet_model 并绘制结果组件。

我们可以忽略周末,因为价格只会在一周内变化(实际上在下班后的期间价格变化很小,但不影响我们的分析)。不幸的是,没有一周的趋势可供我们使用,在我们继续建模之前,我们将关闭每周季节性。这种行为是意料之中的:对于股票数据,随着时间尺度的减小,噪声开始冲刷掉信号。从日常来看,股票的走势本质上是随机的,只有缩小到年度范围,我们才能看到趋势。

变化点

变化点发生在时间序列从增加到减少或相反时(在更严格的意义上,它们位于时间序列速率变化最大的地方)。这些时间非常重要,因为了解股票何时会达到顶峰或即将起飞可能会带来显著的经济效益。确定变化点的原因可能让我们预测股票价值的未来波动。Stocker 对象可以自动为我们找到 10 个最大的变化点。

microsoft.changepoint_date_analysis()
Changepoints sorted by slope rate of change (2nd derivative):
DateAdj. Close     delta
4102016-09-0855.811396-1.378093
3382016-05-2650.1134531.116720
2172015-12-0252.572008-0.882359
4582016-11-1557.5898190.603127
482015-04-0237.6125900.442776

c25c982b3a5b4d924540c17d457f6fdb.png

变化点往往与股价的高峰和低谷一致。Prophet 只在前 80% 的数据中找到变化点,但尽管如此,这些结果还是很有用的,因为我们可以尝试将它们与现实世界的事件相关联。我们可以重复我们之前所做的并在这些日期前后手动搜索 Google 新闻,但我认为如果Stocker 为我们这样做会更好。您可能已经看过 Google 搜索趋势工具,该工具可让您查看任何搜索词在 Google 搜索中随时间的流行程度。Stocker 可以自动检索我们指定的任何搜索词的数据,并在原始数据上绘制结果。为了找到并绘制搜索词的频率,我们修改了之前的方法调用。

microsoft.changepoint_date_analysis(search = 'Microsoft profit')
TopRelatedQueries: query  value
0  microsoft non profit    100
1      microsoft office     60
2          apple profit     40
3         microsoft 36540
4                 apple     35
RisingRelatedQueries: query  value
0    apple stock    170
1  microsoft 365130
2   apple profit     50

a5bbb8a50a23b5fd8d6d0bc50f5601ea.png

除了绘制相对搜索频率的图形之外,Stocker 还显示了图表日期范围内相关度最高的查询和上升最快的查询。在图中,y 轴通过将值除以其最大值而在 0 和 1 之间归一化,使我们能够比较具有不同尺度的两个变量。从图中可以看出,搜索“Microsoft profit”与微软股价之间似乎没有相关性。

如果我们发现了相关性,那么仍然会有因果关系的问题。我们不知道是搜索还是新闻导致了价格的变化,还是价格的变化导致了搜索。可能会找到一些有用的信息,但也有很多机会相关性。随意尝试一些不同的搜索词语,看看是否能找到任何有趣的趋势!

microsoft.changepoint_date_analysis(search = 'Microsoft Office')
TopRelatedQueries: query  value
0  microsoft office download    100
1      microsoft office 201090
2                office 201085
3      microsoft office 201375
4                office 201370
RisingRelatedQueries: query  value
0       microsoft office 2016 key  80300
1                     office 201673200
2  download microsoft office 201672150
3       microsoft office 2016 mac  69350
4           microsoft office 201667650

6ac498d54b14b9feda26c0976d7d6329.png

看起来对Microsoft Office 的搜索量下降会导致股价上涨。也许有人应该让微软知道。

预测

我们只探索了 Stocker 功能的前半部分。后半部分用于预测,或预测未来的股票价格。如下图所示:

model, future = microsoft.create_prophet_model(days=180)
PredictedPrice on 2018-07-21= $102.40

fca6d535624d1d0949caed3999a1e92b.png

aed5f18348b353fdc3c98a1f8ef751ec.png

E N D

2658761d674169cc0a543ee9c75c41bf.png

07a76721f4e16822ab1d6e378923a139.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁更高效的AIGC工具:现代大语言模型工具推荐

AI技术的普及已经在近年来不断增长。这种技术已经改变了我们与电脑的互动方式,让我们能够更高效、更自然地完成任务。本文将展示10个基于ChatGPT和GPT-3 AI模型构建的最强大的资源,使您更容易充分利用它们的潜力。因此,如果您想利用AI技术改进…

浅议抖音短视频平台的利与弊

近些年,各类短视频在中华文化国际传播中发挥了独特作用,比如说李子柒、丁真等网络达人为代表的视听内容在国际话语体系中努力塑造可信、可亲、可敬的中国人形象,并以此带动了“中国元素”的时尚潮流,引发海外民众对东方文化的关切…

网络案例分析之999皮炎平出鹤顶红色号的口红

今天说点不是纯技术的事儿,不过也是互联网相关的。 就是上周末被刷屏的999皮炎平出了口红了,而且出的三款口红还相当霸气,分别是“鹤顶红”、“夕阳红”和“够坦橙”。 且不说这是一次非常大的跨界,就这三款的名字就十分有嘘头&…

【揭秘】过敏性炎症的元凶竟然是“它”

在人体免疫系统中,原始T细胞经刺激后,可分化为不同路径的辅助型T细胞(T helper,Th),其中Th2介导的2型炎症已经被科学家证明主要参与粘膜表面的屏障免疫,与特应性皮炎等2型炎症性疾病息息相关,而IL-4是其中发…

儿童过敏性疾病的表观遗传年龄

在过去的几十年里,被诊断患有哮喘和过敏症的儿童人数大幅上升,究竟是什么原因推动了这一增长,目前尚无定论。环境和生活方式的迅速变化可能是罪魁祸首,但这两种疾病的病因仍有许多有待了解的地方。为了加深我们的理解,…

文献(5): 单细胞转录组揭示人类纤维化皮肤病中成纤维细胞的异质性

一句话评价:小样本量单细胞转录组在冷门疾病领域应用前景尚可,常规套路也能发NC 1. Title 标题可以看出本研究的主要内容:①构建成纤维细胞的图谱/揭示成纤维细胞的异质性;②找到一群(相对于正常样本)在纤维…

规划自己的健康问题

这是学习笔记的第 2414篇文章 最近处理了一些事情,看起来是些碎片没有关联的事情,但是实际上却有深意,所以我不禁感叹健康问题。自己的健康,只有自己知道,而且只有自己最重视,当然意识到问题和要做出改变是…

qml 中的function怎么加类型_皮炎有哪些类型?生活中皮炎要怎么预防?得了皮炎要注意哪些问题...

皮炎有哪些类型?要怎么预防?大家对皮炎一定不会陌生,这是一种很常见的疾病,一年四季都会发病,发病范围也不规律,好发部位在脸部。当皮炎发作时,很多人会把它的症状和别的疾病混淆,以至于没有对症用药&…

2021年总结:缘起性空,归来不少年——回顾这荆棘的一年

2021年已经离去,感谢大家的陪伴和帮助,感谢家人的鼓励。转眼,这已是我在CSDN写下的第九篇年终总结,真是岁月如梭。曾记否,2013年我感叹《一万年太久,只争朝夕》;2014年本科毕业写下《忆大学四年…

首部《中国特应性皮炎患者生存状况调研报告》发布

中国健康促进与教育协会联合赛诺菲中国宣布:首部《中国特应性皮炎患者生存状况调研报告》正式发布。经过近半年的调研与数据整理,报告首次聚焦于中重度特应性皮炎患者这一群体,展现了我国特应性皮炎患者的真实生存现状:超过75%的医…

中国学者携手研究发现:国人特应性皮炎发病率接轨国际

过去很多年以来,国内报道的儿童特应性皮炎患病率仅为3.07%,而临床医生实际上感受却非如此。 芊烨 摄 过去很多年以来,国内报道的儿童特应性皮炎患病率仅为3.07%,而临床医生实际上感受却非如此。 芊烨 摄 中新网上海1月24日电 (记…

肠道微生物群与过敏性鼻炎

过敏性鼻炎是个全球性健康问题,易反复发作,困扰着全世界大约着4亿人。自20世纪60年代以来,过敏性鼻炎的患病率持续上升。近几年,我国主要大中城市过敏性鼻炎的平均患病率从11.1%升高到17.6%。 过敏性鼻炎主要临床表现包括发痒、打…

6.2 抗脂溢

由于XD之催更,所以先把功能篇中的抗脂溢写出来,写的有点赶,后期应该会完善。 油性皮肤的困扰 皮肤最普遍的分类方法就有干油之分,而男性中油性皮肤占了绝大部分。相比于干性皮肤,油性皮肤出油量要大的多,…

chatgpt赋能python:Python数据分析入门指南

Python数据分析入门指南 Python已成为数据科学和分析中使用最广泛的编程语言之一。在本指南中,我们将介绍如何使用Python进行数据分析并让您快速上手。 数据分析的基础知识 在开始学习Python进行数据分析之前,您需要了解一些基本的数据分析概念&#…

Edge浏览器调试移动端设备插件

Edge浏览器调试移动端设备插件 插件获取地址 插件地址链接:https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home?hlzh-CN。 在该页面中搜索:Allow CORS: Access-Control-Allow-Origin。 插件使用 1、edge浏览器中下载插件&…

Edge游览器,新插件WeTab标签页

如果你还没有体验过chatGPT,那么Wetab新标签页应该是最方便快捷的一个方式了。Wetab新标签页整合了chatGPT的功能,自带6个源可以切换,日常使用完全够了。可以为你解答包括但不限于历史、科学、文化、社会等方面的问题。 你只需要在扩展商店安…

Edge浏览器系列:win10如何关闭Alt+tab只切换Edge浏览器的网页

windows系统,一般情况下AltTab键都是在不同应用间切换,但是Edge浏览器,切换的是浏览器的不同网页,关闭它: 左下角win图标,右键单击,选择设置。 选择系统 选择"多任务处理" 在Al…

一文了解NFT的六大交易平台

NFT 热度攀升,其最核心的 NFT 加密交易平台在加密作品和技术的应用和推广有无法替代的作用,今天给大家介绍下关于NFT的六大交易平台。 平台一:Makersplace Makersplace NFT交易平台,极度看重加密艺术品的质量,因此会为…

软件测试管理—如何写好软件测试计划书

如何写好软件测试计划书 软件项目的测试计划是描述测试目的、范围、方法和软件测试的重点等的文档。对于验证软件产品的可接受程度编写测试计划文档是一种有用的方式。 详细的测试计划可以帮助测试项目组之外的人了解为什么和怎样验证产品。它非常有用但是测试项目组之外的人…

AIGC的出现推动元宇宙的发展

话说什么是元宇宙呢? 自2021年起,全国各市场主体纷纷布局元宇宙,构建全球元宇宙生态,元宇宙(Metaverse)是整合了多种新技术而产生的新型虚实相融的互联网应用和社会形态,通过利用科技手段进行链接与创造的&#xff0c…