使用Python进行股票分析(2)

简介

我们在之前的文章《使用Python进行股票分析(1)》中,通过自动获取股票的历史数据,然后选择在一定时间内处于上涨的股票作为我们投资的标的。在本文中,我们进一步通过分析股票的短期趋势,选择处于短期上涨趋势的股票,进一步筛选我们的理想投资标的。

数据平均线和趋势分析

一支股票每个交易日内的价格变化很快,并且随机性比较大。通过计算股票在某个时间段内的平均线,可以获得更加稳定的趋势。比如5日平均线,和20日平均线。相对来说,选择的时间段越短,越能反应股票在短期内的变化趋势;而选择的时间段越长,越能反应股票在长期的变化趋势。当短期平均线处于长期平均线上方时,说明股票短期处于有利的趋势;而短期平均线处于长期平均线下方,说明股票处于不利的趋势。这里需要注意的是,这里的有利和不利不是绝对意义的上涨和下跌,而是相对意义的。换句话说,这里的有利仅仅说明股票短期的表现对比于长期表现,开始加速上涨或者减慢下跌,但是绝对值上来说上涨和下跌都是有可能的。我们希望买入处于有利趋势的股票,而避免购买处于不利趋势的股票。

获取处于有利趋势的股票

注意,本文中的代码是基于《使用Python进行股票分析(1)》的,如果想运行本文的代码的同学,请先阅读之前的文章。

我们通过计算5日均线和20日均线,并且比较两条均线的最后一个数据点的值,5日均线高于20日均线的股票就是我们想要选择的股票。我们可以通过以下的函数获得符合要求的股票列表:

def get_stocks_with_increase_trend(closing_prices):average_5 = closing_prices.rolling(window=5).mean()average_20 = closing_prices.rolling(window=20).mean()return list(closing_prices.loc[:, average_5.iloc[-1] > average_20.iloc[-1]].columns)get_stocks_with_increase_trend(close)

其次,我们还希望通过观察股票均线的图形,进一步对股票的趋势有一个直观的了解。我们可以通过如下代码来绘制各支股票的5日均线和20日均线,并且将处于有利趋势的股票的图形边框染成绿色,将处于不利趋势的股票的图形边框染成红色,来进一步使得图形更为容易理解:

# set color of axes board
def set_axes_color(ax, color):ax.spines['bottom'].set_color(color)ax.spines['top'].set_color(color)ax.spines['left'].set_color(color)ax.spines['right'].set_color(color)# ax.xaxis.label.set_color(color)# ax.yaxis.label.set_color(color)# ax.grid(alpha=0.1)ax.title.set_color(color)# drow 5 days moving average and 20 days moving average of closing price for symbols
LINE_SIZE = 2
def draw_moving_average(symbols, closing_prices):sz = len(symbols)rows = (int)(sz / LINE_SIZE) + (1 if sz % LINE_SIZE != 0 else 0)fig, axes = plt.subplots(rows, LINE_SIZE, figsize=(24, 96))plt.tight_layout(pad=48)for i in range(sz):row = (int)(i/LINE_SIZE)col = i % LINE_SIZEsymbol = symbols[i]average_5 = closing_prices[symbol].rolling(window=5).mean()average_20 = closing_prices[symbol].rolling(window=20).mean()if average_5.iloc[-1]>average_20.iloc[-1]:set_axes_color(axes[row, col], 'green')else:set_axes_color(axes[row, col], 'red')axes[row, col].plot(average_5)axes[row, col].plot(average_20)axes[row, col].set_xlabel('time')axes[row, col].set_xticklabels(axes[row, col].get_xticklabels(), rotation=90)axes[row, col].set_ylabel('price')axes[row, col].set_title(symbol)axes[row, col].legend(['5 days', '20 days'])draw_moving_average(tickers, close)

为了测试我们的函数功能,我们选择更多的股票加入到候选股票列表中:

tickers = ['U', 'SHOP', 'DDOG', 'SNOW', 'PLTR', 'MSFT', 'GOOGL', 'NVDA', 'META', 'TSLA', 'AAPL']

运行函数get_stocks_with_increase_trend(),我们得到以下结果:

['SHOP', 'MSFT', 'GOOGL', 'NVDA', 'META']

我们发现在11支候选股票中仅仅有5支目前是处于有利趋势的。然后我们运行绘制趋势图的函数,会得到以下图形:

更改选择股票函数

我们进一步更改我们选择股票的函数。我们同时考虑股票在过去一段时间是否上涨和该股票是否处于有利的趋势。这里我们考虑两种情况:

1. 假如一支股票既有价格的上涨,又处于有利的趋势,我们将考虑买入股票;

2. 假如一支股票有价格的上涨,但是处于不利的趋势,我们考虑进一步观察该股票以后的表现,等待有利的时机再进行购买;

3. 处于其它情况的股票都不考虑购买。

现在我们实现函数如下。它将返回两个列表,一个考虑购买的股票列表,一个是考虑进一步观察的股票的列表:

# select stocks based on protitable and trending
# stocks have profits and have increase trending are indicated to buy
# stocks have profits and have decrease trending are indicated to further observe
# other stocks are ignored
def select_stocks(closing_price):protitable_list = get_profitable_stocks(closing_price)increase_list = get_stocks_with_increase_trend(closing_price)buy_list = list(set(protitable_list).intersection(set(increase_list)))ob_list = list(set(protitable_list).difference(set(increase_list)))return buy_list, ob_list

现在我们运行该函数:

buy_list, ob_list = select_stocks(close)
print(f"Buy these stocks: {buy_list}\nObserve these stocks further: {ob_list}")

并且得到如下的输出:

Buy these stocks: ['NVDA', 'META', 'GOOGL', 'MSFT', 'SHOP']
Observe these stocks further: ['TSLA', 'PLTR', 'SNOW', 'AAPL', 'DDOG', 'U']

我们有五支股票是可以考虑现在买入的,另外六支股票可以进一步观察。

小结

我们可以看到加入了股票趋势的判断,使得我们进一步缩小了选择购买股票的条件。假如这个条件是合理的,将可以进一步增加我们购买股票的合理性。但是我们还可以进一步判断股票的趋势,以及对股票未来的价格进行预测,来进一步试图增加我们选择股票的能力。我们将在以后的文章中对这些想法进行进一步实现。

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

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

相关文章

Ubuntu Desktop 安装谷歌拼音输入法

Ubuntu Desktop 安装谷歌拼音输入法 1. Installation1.1. 汉语语言包​1.2. 谷歌拼音输入法1.3. 安装语言包1.4. 键盘输入方式系统1.5. 重启电脑1.6. 输入法配置 2. configuration2.1. Text Entry Settings… 3. ExecutionReferences 1. Installation 1.1. 汉语语言包 strong…

springcloud第4季 负载均衡的介绍3

一 loadbalance 1.1 负载均衡的介绍 使用注解loadbalance,是一个客户端的负载均衡器;通过之前已经从注册中心拉取缓存到本地的服务列表中,获取服务进行轮询负载请求服务列表中的数据。 轮询原理 1.2 loadbalance工作流程 loadBalance工作…

再仔细品品Elasticsearch的向量检索

我在es一开始有向量检索,就开始关注这方面内容了。特别是在8.X之后的版本,更是如此。我也已经把它应用在亿级的生产环境中,用于多模态检索和语义检索,以及RAG相关。 也做过很多的优化:ES 8.x 向量检索性能测试 & 把…

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(三)

概览 承接上一篇博文: Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(二)我们在其中讨论了如何使用第三方强大通用的钩子库 SwiftHook 来协助我们完成 NSObject 构造器 init 的 SWIZZ 操作。我们还讨论了为什么用 print 打印对象信息时会发生崩溃…

Unity 布局元素Layout Element

Layout Element是一种用于控制UI元素在布局组件(如Horizontal Layout Group、Vertical Layout Group、Grid Layout Group、Content Size Fitter和Aspect Ratio Fitter)中的大小和位置的组件。Layout Element组件可以附加到UI元素上,以便在布局…

opencv各个模块介绍(2)

Features2D 模块:特征检测和描述子计算模块,包括SIFT、SURF等算法。 Features2D 模块提供了许多用于特征检测和描述子匹配的函数和类,这些函数和类可用于图像特征的提取、匹配和跟踪。 FeatureDetector:特征检测器的基类&#xf…

arm 外部中断

main.c: #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1…

查看Linux系统重启的四种基本命令

目录 前言1. last2. uptime3. journalctl4. dmesg 前言 对于排查其原因推荐阅读&#xff1a;详细分析服务器自动重启原因&#xff08;涉及Linux、Window&#xff09; 在Linux中&#xff0c;有多种命令可以查看系统重启的信息 以下是其中一些常用的命令及其解释&#xff1a; …

EasyPOI操作Excel从零入门

教程介绍 我们不造轮子&#xff0c;只是轮子的搬运工。&#xff08;其实最好是造轮子&#xff0c;造比别人好的轮子&#xff09;开发中经常会遇到excel的处理&#xff0c;导入导出解析等等&#xff0c;java中比较流行的用poi&#xff0c;但是每次都要写大段工具类来搞定这事儿…

【新版】系统架构设计师 - 新版架构备考索引<附2023年11月原题回忆>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 新版架构备考索引机考详情备考索引与方向&#xff08;个人观点&#xff0c;仅供参考&#xff09;总结附&#xff1a;2023年11月改版机试原题简单回忆 架构 - 新版架构备考索引 首先&#xff0c;此…

Spring 简介

1. Spring简介 1.1 Spring 核心设计思想 1.1.1 Spring 是什么&#xff1f; Spring 是包含了众多⼯具⽅法的 IoC 容器。Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;Spring ⽀持⼴泛的应⽤场景&#xff0c;它…

月之暗面Kimi代码分析能力评测

最近打算重构一下PawSQL优化引擎中的OR条件的SELECT重写优化策略的代码&#xff0c;时间有点久&#xff0c;代码有点复杂&#xff0c;看到网上对新出了KIMI评价很高。于是尝试用它来理解一下代码。上传了此优化重写的代码&#xff0c;提问&#xff1a; 第一问&#xff0c;设计…

java多线程编程面试题总结

一些最基本的基础知识就不总结了&#xff0c;参考之前写的如下几篇博客&#xff0c;阅读顺序从上到下&#xff0c;依次递进。 java 多线程 多线程概述及其三种创建方式 线程的常用方法 java 线程安全问题 三种线程同步方案 线程通信&#xff08;了解&#xff09; java 线程池…

炸裂消息,全球首创全员持股短视频平台诞生

平台简介&#xff1a;享视是国内首家基于区块链打造的共益型短视频平台&#xff0c;也是全球首家真正践行共益模式的科技型创新企业&#xff0c;计划将80%的股权免费分发和共享给平台的会员&#xff0c;共同打造一家全员持股的共益商业模式示范标杆企业。 平台愿景&#xff1a…

Spark Streaming DStream

Spark Streaming DStream DStream 即Discretized Stream&#xff0c;中文叫做离散流&#xff0c;Spark Streaming提供的一种高级抽象&#xff0c;代表了一个持续不断的数据流。 DStream可以通过输入数据源来创建&#xff0c;比如Kafka、Flume&#xff0c;也可以通过对其他DS…

主干网络篇 | YOLOv8更换主干网络之MobileNetV3

前言:Hello大家好,我是小哥谈。MobileNetV3是一种轻量级的卷积神经网络架构,用于图像分类和目标检测任务。它是MobileNet系列的第三个版本,旨在在保持高准确性的同时减少模型的计算量和参数数量。MobileNetV3引入了一些新的设计思想和技术,以提高模型的性能。其中一项重要…

【微服务】Gateway服务网关

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;微服务 ⛺️稳中求进&#xff0c;晒太阳 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响…

Windows 7 静态 IP 地址

Windows 7 静态 IP 地址 References 静态 IP 地址设置为 192.168.1.198 控制面板 -> 查看网络状态和任务 更改适配器设置 网络连接 -> 属性 TCP / IPv4 警告 - 已计划将多个默认网关用于提供单一网络 (例如 intranet 或者 Internet) 的冗余。 6.1. 关闭 redundancy VMw…

个人博客系列-后端项目-系统角色配置(8)

系统角色配置需要设置的接口 用户可以绑定多个角色&#xff0c;角色对应有多个路由权限。用户绑定角色后&#xff0c;可以访问当前角色下的各个api路由和菜单路由。 用户注册时设置用户角色修改用户角色&#xff08;同时对应用户可以访问的路由将会同步变更&#xff09;添加修…

【Linux】写个日志和再谈线程池

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;信号量和线程池 目录 &#x1f449;&#x1f3fb;日志代码Log.cppMain.cc &#x1f449;&#x1f3fb;线程池代码LockGuard.hpp(自定义互斥锁&#xff0c;进…