上海股票分析联盟

Rython与投资分析——使用R语言和python绘制K线图

Python商务实践 2018-06-20 02:17:28

微信公众号:Python商务实践
博客网址:www.liupu.top
任何问题和建议,请在博客评论区或公众号留言
最近更新时间:2018-6-4

写在前面

上期文章中,小编和大家聊了一下怎么使用python去绘制你的微信好友的省份分布的热地图,进而了解了python操作微信以及python在绘制热地图方面的相关知识。而在本期文章中,小编将接着讲述一些绘图的一些事情,不过本期文章将讲一下怎么去绘制K线图,炒股的朋友对此不应该陌生。在当今时代,纯粹依靠死工资基本无法实现财务自由,你如果真的想追求自由,那么就必须多投资理财多一些了解。现今国内的投资品种相对缺乏,因此股票在一定程度上成为一个高频的投资的对象。而对于股票的操作,你所不能忽视的一点就是K线图,就好比医生必须要懂得识别X光片以及病例图(不要和我扯中医不需要,中医知识把这种看图过程内化了,即心中有图;而西医则是外化了这种看图过程,当然现如今的中医院也是普遍流行拍片看图了,因为他们现在似乎总是诊断不出任何病症,这里绝无抹黑中医的企图,只是小编的切身体验),所以一位优秀的股票投资者就离不开对于K线图的掌握,对于K线图毫无概念的股票投资者就是典型的脱光衣服跳海——虾扯蛋呗!所以本期小编准备和大家聊一下怎么去绘制K线图。

准备工作

本期文章将被小编归为一个新的系列,并且从此之后小编会在以后的文章中加上这个系列,就是Rython与投资系列(这里有必要解释一下这个名字,所谓Rython,就是一个典型的组合词,Rython=R+python),所以本系列的主题就是讲述一些怎么使用python或者R语言就是一些投资分析,本期文章可以作为本系列的第一篇文章。

K线图也被称之为蜡烛图,源自于日本米市,后来在美国被发扬广大。这种图形包含四种典型的价格,分别为开盘价、收盘价、最高价和最低价,收盘价高于开盘价的亚博世界杯娱乐称之为阳线,而收盘价低于开盘价的亚博世界杯娱乐被称之为阴线,在国内股票市场阳线常常用红色进行表示,而阴线则用绿色进行表示。因为本文主要是讲解K线图的绘制的,所以对于K线的基本知识就不过多讲述了(其实是小编即使再用100篇文章也穷尽不了K线图各种知识的讲解),因此接下来讲重点。

因为本系列文章是讲述R语言以及python与投资,而K线图的绘制使用两种语言都可以方便完成,因此小编会在下面分别介绍怎么使用R语言以及python绘制K线图,虽然本期文章中对于这两种语言的讲解篇幅大致相同,但是在往后此系列的文章中小编会把更多笔墨放置在python上面,因为这是小编分析中使用最为频繁的语言。R语言绘制K线图主要依赖quantmod包中的chartseries()函数,而python绘制K线图则依赖于matplotlib.finance库下的candlestick_ochl()函数,因此在这之前请确保你已经正确安装了这些包或者库,鉴于安装方式小编已经讲过多次,这里就不再多说了。下面正式开始。

R语言绘制K线图

R语言绘制K线图主要使用quantmod包中的chartSeries()函数,而对于绘制K线图所使用的数据,小编将直接通过quantmod包中的getSymbols()函数获得雅虎财经上苹果公司的股价数据,下面正式上干货。

library(quantmod)
getSymbols('AAPL',src='yahoo',from='2018-01-01',to='2018-6-1')
chartSeries(AAPL)
R语言绘制K线图默认风格

可以看出上面的图形至少有两点不符合我们国人的看图习惯:第一点,图表的背景太深了,我们希望背景色为白色;第二点,阳线和阴线的颜色不符合我们的习惯。因此有必要进行一下格式的重新设置。
library(quantmod)
getSymbols('AAPL',src='yahoo',from='2018-01-01',to='2018-6-1')
chartSeries(AAPL,theme='white',name='苹果',up.col='red',dn.col='green')
R语言绘制K线图中式风格

使用这个函数进行K线图绘制时,默认是将成交量图一起给出,但是有时我们可能只是想看K线图亚博世界杯娱乐,而不想参看成交量图,此时可以通过设置其中的参数予以完成。
library(quantmod)
getSymbols('AAPL',src='yahoo',from='2018-01-01',to='2018-6-1')
chartSeries(AAPL,theme='white',name='苹果',TA=NULL,up.col='red',dn.col='green')
R语言绘制K线图无成交量图

以上使用R语言完成了苹果公司自年初至6月1号股价的K线图绘制,可以看出苹果的股价在二月份以及五月份均有过大跌,而近期股价处于上涨阶段。因此现在你应该感觉到了使用R语言绘制K线图的便利之处,整个K线图的诞生仅仅只需要3条命令就可以了,你没有看错,真的只需要三条命令,合计花费时间不超过三十秒,你总不至于还不心动吧。这就是使用R语言的整个流程,首先获得数据,然后使用chartSeries()完成绘制即可,了解了R语言绘制K线图的过程,下面开始讲述一下怎么使用python绘制K线图。

python绘制K线图

python绘制K线图依赖于matplotlib.finance库中的candlestick_ochl()函数,现在这个函数已迁移到mpl_finance库中了,但是它仍然可以通过matplotlib.finance库进行使用,小编这里就不额外安装mpl_finance库了。下面小编将从两个方面进行python绘制K线图过程的讲解,这两步的不同仅仅是股价数据获取方式的不同。首先,小编采用matplotlib.finance库下的函数去获取雅虎财经上面苹果的股价数据;而后,小编将采用tushare库去获得浦发银行的股价数据。之所以要使用两种方式,源自雅虎财经在国内的使用常常抽风,很多时候无法获取数据,而且其对国内股票市场的股价数据支持力度相对薄弱。

python与苹果股价K线图

# 导入需要的库 ?
import matplotlib.pyplot as plt ?
import matplotlib.finance as mpf ?

# 设置数据区间 ?
start = (2018, 1, 1) # 起始日期,格式:(年,月,日)元组 ?
end = (2018, 6, 1) ?# 结束日期 ?
# 从雅虎财经中获取股票代码601558的历史行情 ?
prices = mpf.quotes_historical_yahoo_ohlc('AAPL', start, end) ?

# 开始绘图 ?
fig, ax = plt.subplots(facecolor=(0.5, 0.5, 0.5)) ?
fig.subplots_adjust(bottom=0.2) ?
ax.xaxis_date() ?# 设置X轴刻度为日期时间
plt.xticks(rotation=45) ?# X轴刻度文字倾斜45度
plt.title("苹果公司近6个月股价K线图") ?
plt.xlabel("时间") ?
plt.ylabel("股价(美元)") ?
mpf.candlestick_ohlc(ax,prices,width=1.2,colorup='r',colordown='green') ?
plt.grid(True) ?

正如小编之前所说,使用quotes_historical_yahoo_ohlc()函数获取雅虎财经的股价数据真的很不稳定,这不又抽风了,所以自然无法绘制出图形,小编这里之所以介绍这种方式就是为了更好地推荐下面一种方法。

python与浦发银行股价K线图

import matplotlib as mpl
import matplotlib.pyplot as plt
import tushare as ts
import matplotlib.finance as mpf
from matplotlib.pylab import date2num ?
import datetime ?

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

prices = ts.get_k_data('600000','2018-01-01','2018-06-01') # 获取平安银行近六个月股价数据 ?

# 创建一个函数将tushare获得的日期转化为candlestick_ochl()函数可以识别的日期
def date_to_num(dates):
? ?numoftime = []
? ?for date in dates:
? ? ? ?date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
? ? ? ?num_date = date2num(date_time)
? ? ? ?numoftime.append(num_date)
? ?return numoftime

matrix_prices = prices.as_matrix()
numoftime = date_to_num(matrix_prices[:,0])
matrix_prices[:,0] = numoftime

# 绘图
fig, ax = plt.subplots() ?
fig.subplots_adjust(bottom=0.2) ?
# 设置X轴刻度为日期时间 ?
ax.xaxis_date() ?
plt.xticks(rotation=45) ?
plt.yticks() ?
plt.title("浦发银行近六个月股价K线图") ?
plt.xlabel("时间") ?
plt.ylabel("股价(元)") ?
mpf.candlestick_ochl(ax,matrix_prices,width=1.5,colorup='r',colordown='green') ?
plt.grid() ?
python绘制K线图

这个图形默认绘制是没有成交量图形的,当然你完全可以自己添加,下面给出添加成交量图的完整K线图绘制程序。
import matplotlib as mpl
import matplotlib.pyplot as plt
import tushare as ts
import matplotlib.finance as mpf
from matplotlib.pylab import date2num ?
import datetime ?

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

prices = ts.get_k_data('600000','2018-01-01','2018-06-01') # 获取平安银行近六个月股价数据 ?

# 创建一个函数将tushare获得的日期转化为candlestick_ochl()函数可以识别的日期
def date_to_num(dates):
? ?numoftime = []
? ?for date in dates:
? ? ? ?date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
? ? ? ?num_date = date2num(date_time)
? ? ? ?numoftime.append(num_date)
? ?return numoftime

matrix_prices = prices.as_matrix()
numoftime = date_to_num(matrix_prices[:,0])
matrix_prices[:,0] = numoftime

# 绘图
fig, (ax1,ax2) = plt.subplots(2,sharex = True,figsize = (16,9)) ?
fig.subplots_adjust(bottom=0.2) ?
# 设置X轴刻度为日期时间 ?
ax1.xaxis_date() ?
mpf.candlestick_ochl(ax1,matrix_prices,width=1.5,colorup='r',colordown='green') ?
ax1.set_title("浦发银行近六个月股价K线图") ? ?
ax1.set_ylabel("股价(元)") ?
ax1.grid()
ax1.xaxis_date()
plt.bar(matrix_prices[:,0]-0.25,matrix_prices[:,5],width=0.5)
ax2.set_ylabel('成交量')
ax2.grid()
Python绘制K线图完整版

至此,小编完成了K线图绘制的相关介绍,重点推荐R语言方法与python的第二种方法。

后记

本文讲到这里就暂时告一段落了,本期文章讲述了怎么使用R语言以及python去绘制股价的K线图,了解了使用R语言以及Python在绘制K线图时的便利,更多投资分析的文章会在后续逐步更新。下期文章主题暂时不告诉大家了,时不时保持一点神秘感,敬请期待。再次感谢你们的支持与鼓励,你们的陪伴是小编前进的动力!



Copyright ? 上海股票分析联盟@2017