用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...
摘要:金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力和竞争力表现,人才需求旺盛。
金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力和竞争力表现,人才需求旺盛。特别是近年来大数据和计算机技术的发展,算法成为投资领域的重要决策手段之一,算法交易也成为重要的股票交易技术,特别是高频交易(HFT),量化投资等依赖机器算法的模型越来越流行。
恰巧看到一篇国外博客介绍Python在股票投资的应用,俺模仿看看如何玩玩股票投资组合的模型建模方法。第一讲先讲讲如何获取数据和可视化。后面一篇文章讲如何进行投资组合建模。
第一部分先介绍如何获取股票数据和可视化分析,移动平均的分析。
第一步:获取股票数据
我们需要安装一个python包:pip install pandas_datareader
包的相关说明:https://pandas-datareader.readthedocs.io/en/latest/
包可用通过API直接获取yahoo财经,Google 财经,world bank等数据接口提供的股票数据,这里我们用雅虎财经——yahoo finance的股票接口数据。
假设我们要获得沪市贵州茅台(600519.SS)——才有股票代码加沪深SS或SZ。
定义了股票开始日期和截止日期(系统今日时间)后
这样就获得了2010-1-1至2016-12-13日(今天)的贵州茅台股票基本数据。
可用看到很快就得到了沪市A股贵州茅台的近7年的股价数据。
接下来我们进行一系列可视化图表分析
这里用到了标准的matplotlib库,将输出结果呈现在Jupther上。
对于股票类型数据,High、Low、Open、Close、Adj Close如何在一张图上表现,最常用的叫阴阳烛图candlestick_ohlc。
为了阅读方便,画阴阳烛图的Python函数代码在文章最后...
pandas_candlestick_ohlc(maotai)
如果是多只股票的可视化如何表现呢?我们再多抓几只股票数据(同一周期)
我们增加同仁堂600085.SS和全聚德002186.SZ两只股票
看看走势图
我们发现因为三只股票的股价不同,坐标尺度不统一造成可视化不清晰。考量不同股票的股价不同,坐标标度有显著尺度差异,可用考虑用双轴标度可视化。
坐标尺度考虑是一方面,我们也可以考虑采用基期2010-1-4日股价作为基点进行对标或标准化股票指数化。
可视化趋势图
从趋势上看,从2010年第一个交易日开始,这三只股票基本上都是增长趋势,特别是同仁堂股价增长变动较大。
我们还可以计算各种股价的增长或变化,用:
或者:
我先展示用log变化:
最后,在可视化部分我们来看移动平均的趋势图。
在Python中实现q-day的移动平均(moving average)是比较方便的
我们下面分别指定20d、50d和200d的窗口期分析移动平均的走势图
至此我们完成了沪市或深市A股选择的股票交易数据下载,并采用各种可视化和标准化方法,以及给出了移动平均的趋势图的可视化。
当然这不是我玩的目的,只是告诉大家获取数据的方便性,以及Python的各种包的易用性,如果将股票数据下载后导入Tableau或其他软件也可以进行各种分析,特别是R语言有很多股票分析模型。
其实本篇文章的重点是接下来我要描述如何在固定投资金额比如100万,预期收益率10%,止损率20%的条件下如何进行多只股票组合投资的buy-sell模型。
如果您也在玩的话,可以先看看移动平均曲线,以及不同周期移动平均的交叉点的含义。
说实话,俺对股票也是一窍不通的,多头和空头,长线和短线,看空看多的投资策略都影响模型的建立和落实。
大家可以拷贝这段代码:pandas_candlestick_ohlc(maotai)
from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY
from matplotlib.finance import candlestick_ohlc
def pandas_candlestick_ohlc(dat, stick = "day", otherseries = None):
"""
:param dat: pandas DataFrame object with datetime64 index, and float columns "Open", "High", "Low", and "Close", likely created via DataReader from "yahoo"
:param stick: A string or number indicating the period of time covered by a single candlestick. Valid string inputs include "day", "week", "month", and "year", ("day" default), and any numeric input indicates the number of trading days included in a period
:param otherseries: An iterable that will be coerced into a list, containing the columns of dat that hold other series to be plotted as lines
This will show a Japanese candlestick plot for stock data stored in dat, also plotting other series if passed.
"""
mondays = WeekdayLocator(MONDAY) # major ticks on the mondays
alldays = DayLocator() # minor ticks on the days
dayFormatter = DateFormatter(%d) # e.g., 12
# Create a new DataFrame which includes OHLC data for each period specified by stick input
transdat = dat.loc[:,["Open", "High", "Low", "Close"]]
if (type(stick) == str):
if stick == "day":
plotdat = transdat
stick = 1 # Used for plotting
elif stick in ["week", "month", "year"]:
if stick == "week":
transdat["week"] = pd.to_datetime(transdat.index).map(lambda x: x.isocalendar()[1]) # Identify weeks
elif stick == "month":
transdat["month"] = pd.to_datetime(transdat.index).map(lambda x: x.month) # Identify months
transdat["year"] = pd.to_datetime(transdat.index).map(lambda x: x.isocalendar()[0]) # Identify years
grouped = transdat.groupby(list(set(["year",stick]))) # Group by year and other appropriate variable
plotdat = pd.DataFrame(,
index = [group.index[0]]))
else:
raise ValueError(Valid inputs to argument "stick" include the strings "day", "week", "month", "year", or a positive integer)
# Set plot parameters, including the axis object ax used for plotting
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
if plotdat.index[-1] - plotdat.index[0] < pd.Timedelta(730 days):
weekFormatter = DateFormatter(%b %d) # e.g., Jan 12
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
else:
weekFormatter = DateFormatter(%b %d, %Y)
ax.xaxis.set_major_formatter(weekFormatter)
ax.grid(True)
# Create the candelstick chart
candlestick_ohlc(ax, list(zip(list(date2num(plotdat.index.tolist())), plotdat["Open"].tolist(), plotdat["High"].tolist(),
plotdat["Low"].tolist(), plotdat["Close"].tolist())),
colorup = "black", colordown = "red", width = stick * .4)
# Plot other series (such as moving averages) as lines
if otherseries != None:
if type(otherseries) != list:
otherseries = [otherseries]
dat.loc[:,otherseries].plot(ax = ax, lw = 1.3, grid = True)
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment=right)
plt.show()
pandas_candlestick_ohlc(maotai)
用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...相关推荐
- python 3d大数据可视化软件_分享4个最受欢迎的大数据可视化工具
想像阅读书本一样阅读数据流?这只有在电影中才有可能发生. 在现实世界中,企业必须使用数据可视化工具来读取原始数据的趋势和模式. 大数据可视化是进行各种大数据分析解决的最重要组成部分之一. 一旦原始数据 ...
- python审计分析_【干货】Python自动化审计及实现
0x00 摘要 Python由于其简单,快速,库丰富的特点在国内使用的越来越广泛,但是一些不好的用法却带来了严重的安全问题,本文从Python源码入手,分析其语法树,跟踪数据流来判断是否存在注入点.0 ...
- python程序分析_如何分析Python脚本?
如Chris Lawlor所示cProfile是一个很棒的工具,可以很容易地用于打印到屏幕上:python -m cProfile -s time mine.py 或提交:python -m cPro ...
- 消费者行为分析_消费者行为分析-是否点击广告?
消费者行为分析 什么是消费者行为? (What is Consumer Behavior?) consumer behavior is the study of individuals, groups ...
- python在建筑施工方面的应用_有哪些关于 Python 在建筑中的应用和教程?
2018.02.09更新 (發現距離上一次更新馬上就要兩年了--) 嗯,兩年間發生了很多事.我也莫名其妙跑到ETH來了. 做起了Fab的優化,python已經完全不能滿足效率和複雜度的要求,走上了C+ ...
- python基于水色图像的水质评价_零基础学习Python的学习路线及教程
什么是Python? 在过去的2017年里,Python开发者在全球快速增长,国内小伙伴学习 Python 的热情一路高涨.同时,PYPL发布7月编程语言指数榜,Python 在今年5月首次超越 Ja ...
- python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...
一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...
- python 搜索引擎 实验楼的源码_【如何入门 Python 爬虫?】-看准网
匿名用户 学会一门语言的捷径只有一个: Getting Started!¶ 起步阶段 任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识.°1 硬知识 "硬知识& ...
- 用python绘制一条红色蟒蛇_实例:用 Python 绘制一套“会跳舞”的动态图形
(给Python开发者加星标,提升Python技能) 来源:机器之心 数据暴增的年代,数据科学家.分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人.如何让目标听众更直观地理解 ...
最新文章
- Java项目:考试管理系统(java+Springboot+Maven+Jpa+Vue+Mysql)
- Android中怎样使用Navicat可视化查看sqllite的数据库(查看db文件)
- html编写程序常用的,html编写简洁页面表单验证程序.doc
- java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...
- 高精度:麦森数*(洛谷P1045)
- TFS 团队项目不能访问documents解决方案
- JS中的setInterval 函数体带参数f方法
- 使用apache benchmark(ab) 测试报错: apr_socket_recv: Connection timed out (110)
- python求素数代码_Python实现高效求解素数代码实例
- HTML、CSS学习总结
- python eel + vue开发桌面应用
- MySQL where in 用法详解
- 从零设计开发快递自动填写收发货地址功能
- Oracle 11g RAC CRS-4535/ORA-15077
- 基于openCV的视频人脸识别——演员的诞生视频人脸识别
- rviz-Ros Wiki官网教程学习笔记(1)-用户指南
- 计算机二级(二)仅学习
- 关于 chrome 谷歌浏览器 最小化后 页面被限制,不能运行的解决方案
- 如何多台电脑同时安装windows系统
- 美团CEO王兴:8年时间,我对商业的思考