您的位置 首页 股票交易

股票交易数据可视化:技术分析常用指标绘制

我们分析股票时通常会在行情软件上观察股票的走势图,通过走势图的技术指标来判断未来股价的变动方向。对于中小股民来说,技术指标分析相比于基本面分析似乎更靠谱些,因为以中小股民的能力是很难解读政策实质性是利…

我们分析股票时通常会在行情软件上观察股票的走势图,通过走势图的技术指标来判断未来股价的变动方向。对于中小股民来说,技术指标分析相比于基本面分析似乎更靠谱些,因为以中小股民的能力是很难解读政策实质性是利好还是利空,利好多大,利空多大,而走势则涵盖了所有的盘面信息,当主力做多,就表明有资金进场,此时一切指标都会走好,我们只需要跟着主力进场就行。因此观察技术指标的变化十分重要。目前常用的技术指标有K线、均线、成交量、MACD、KDJ等,其实所有的技术指标都是依据股票收盘价、开盘价、最高价、最低价等原始的交易数据用特定的算法公式计算而来,本节就在获取到交易数据的基础上展开常用技术指标的实现。

import datetime plt.rcParams[font.sans-serif] = [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] = False # 用来正常显示负号 df_stockload = web.DataReader(600797.SS, yahoo, datetime.datetime(2018, 1, 1), datetime.date.today()) fig = plt.figure(figsize=(8, 6), dpi=100, facecolor=white) # 创建fig对象 fig.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0) graph_KAV = fig.add_subplot(1, 1, 1) # 创建子图 mpf.candlestick2_ochl(graph_KAV, df_stockload.Open, df_stockload.Close, df_stockload.High, df_stockload.Low, width=0.5, colorup=r, colordown=g) # 绘制K线走势 graph_KAV.set_title(600797 浙大网新-日K线) graph_KAV.set_xlabel(日期) graph_KAV.set_ylabel(价格ex)) # 设置一下x轴的范围 graph_KAV.set_xticks(range(0, len(df_stockload.index), 15)) # X轴刻度设定,每15天标一个日期 graph_KAV.grid(True, color=k) graph_KAV.set_xticklabels( [df_stockload.index.strftime(%Y-%m-%d)[index] for index in graph_KAV.get_xticks()]) # 标签设置为日期 # X轴每个ticker标签都向右倾斜45度 for label in graph_KAV.xaxis.get_ticklabels(): label.set_rotation(45) label.set_fontsize(10) # 设置标签字号 plt.show()

另一个绘制K线方法candlestick_ochl的接口参数中,ax是绘制图形的 axis 对象,quotes是所有的股票数据序列,其中每一行都按照开盘价、收盘价、最高价、最低价的顺序排列。

均线是技术分析中最基础也是最普遍的一种工具,它是指单位周期内的平均价格,我们看到在上涨途中随着股价上涨,均线也保持上行,反应了周期内持股人的平均持股成本上升了,反之亦然。一般来说,在上涨过程中由于主力筹码较多可视为主力的成本线,在上涨末期时由于主力派发筹码给了散户,可视为散户的成本线。一般行情软件上的K线图都会叠加移动平均线的显示,我们也在上一小节绘制的K线三种移动平均线。Pandas中早期提供了pd.rolling_mean()接口,现在更改为n()这种方式,使用方法仍然只需提供收盘价和移动平均时间窗口大小即可,对使用者来说是非常方便快捷的。

绘制移动平均线图ex)) #绘制均线走势 graph_KAV.plot(numt, df_stockload[Ma20],black,label=M20,lw=1.0) graph_KAV.plot(numt, df_stockload[Ma30],green,label=M30,lw=1.0) graph_KAV.plot(numt, df_stockload[Ma60],blue,label=M60,lw=1.0) graph_KAV.legend(loc=best) 绘制移动平均线图

技术分析时通常会将价格和成交量相结合来判断主力的动向。成交量指的是时间单位内股票交易成交的数量,以手为单位(1手等于100股)。我们获取到的股票原始数据中已经包含了成交量信息,因此只需要通过plt.bar()方法就可以绘制出成交量柱状图。这里我们通过Matplotlib创建另一个子图subplot显示成交量,条件判断当收盘价高于开盘价时显示红色,反则显示绿色。

由于包含K线子图和成交量子图,需要协调两个子图的位置和比例,这里导入GridSpec创建子图,GridSpec可自定义子图的位置和调整子图行和列的相对高度和宽度,将K线子图和成交量子图比例设置为3.5:1,由于成交量与日K线的子图之间存在空隙,可将hspace变量设置为0去除子图之间的空隙。

import numpy as np import matplotlib.pyplot as plt import mpl_finance as mpf # 替换 import matplotlib.finance as mpf import pandas_datareader.data as web import datetime import matplotlib.gridspec as gridspec#新增导入gridspec用于分割子图 plt.rcParams[font.sans-serif] = [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] = False # 用来正常显示负号 df_stockload = web.DataReader(600797.SS, yahoo, datetime.datetime(2018, 1, 1), datetime.date.today()) fig = plt.figure(figsize=(8,6), dpi=100,facecolor=white)#创建fig对象 gs = gridspec.GridSpec(2, 1, left=0.05, bottom=0.15, right=0.96, top=0.96, wspace=None, hspace=0, height_ratios=[3.5,1]) graph_KAV = fig.add_subplot(gs[0,:]) graph_VOL = fig.add_subplot(gs[1,:]) 绘制K线图 mpf.candlestick2_ochl(graph_KAV, df_stockload.Open, df_stockload.Close, df_stockload.High, df_stockload.Low, width=0.5, colorup=r, colordown=g) # 绘制K线走势 graph_KAV.set_title(600797 浙大网新-日K线) graph_KAV.set_xlabel(日期) graph_KAV.set_ylabel(价格ex)) # 设置一下x轴的范围 graph_KAV.set_xticks(range(0, len(df_stockload.index), 15)) # X轴刻度设定,每15天标一个日期 graph_KAV.grid(True, color=k) graph_KAV.set_xticklabels( [df_stockload.index.strftime(%Y-%m-%d)[index] for index in graph_KAV.get_xticks()]) # 标签设置为日期 绘制K线图 绘制移动平均线图n()#pd.rolling_mean(df_stockload.Close,window=20) df_stockload[Ma30] = df_stockload.Close.rolling(window=30).mean()#pd.rolling_mean(df_stockload.Close,window=30) df_stockload[Ma60] = df_stockload.Close.rolling(window=60).mean()#pd.rolling_mean(df_stockload.Close,window=60) numt = np.arange(0, len(df_stockload.index)) #绘制均线走势 graph_KAV.plot(numt, df_stockload[Ma20],black,label=M20,lw=1.0) graph_KAV.plot(numt, df_stockload[Ma30],green,label=M30,lw=1.0) graph_KAV.plot(numt, df_stockload[Ma60],blue,label=M60,lw=1.0) graph_KAV.legend(loc=best) 绘制移动平均线图 绘制成交量图 graph_VOL.bar(numt, df_stockload.Volume,color=[g if df_stockload.Open[x] df_stockload.Close[x] else r for x in range(0,len(df_stockload.index))]) graph_VOL.set_ylabel(u成交量) graph_VOL.set_xlabel(u日期) graph_VOL.set_xlim(0,len(df_stockload.index)) #设置一下X轴的范围 graph_VOL.set_xticks(range(0,len(df_stockload.index),15))#X轴刻度设定,每15天标一个日期 graph_VOL.set_xticklabels([df_stockload.index.strftime(%Y-%m-%d)[index] for index in graph_VOL.get_xticks()])#标签设置为日期 绘制成交量图 #将日K线X轴labels隐藏 for label in graph_KAV.xaxis.get_ticklabels(): label.set_visible(False) #X轴每个ticker标签都向右倾斜45度 for label in graph_VOL.xaxis.get_ticklabels(): label.set_rotation(45) label.set_fontsize(10)#设置标签字号 plt.show()

MACD称为异同移动平均线,本质上是以短期(常用为12日)移动平均线日)移动平均线之间的聚合与分离状况(±DIF值)来对行情趋势判断,DEA则是对DIF值进行N日移动平滑用于辅助观察变化。

通常将±DIF(正负离差值)与EMA(离差值的N日平均线)的交叉信号作为买卖信号的依据。理论上,在持续加速的涨势中,12日EMA线日EMA线之上,其间的正离差值(+DIF)会越来越大,DIF距离DEA也会变大,BAR柱状线也会扩展;反之,在加速跌势中负离差值(−DIF)也会越来越大。当行情即将反转时,DIF距离DEA会逐渐减小,正如指标出现背离的情形时,第二段股价超越了第一段股价,但第二段运行的速度比第一段低了。

MACD计算方法如下所示,以零轴为中心轴,将各点的DIF和DEA连接起来就会形成在零轴上下交叉移动的两条线,即为MACD图,还可以利用辅助指标BAR红绿柱状线的形态来决定买卖时机。

这里我们推荐TA-Lib库来实现技术指标。TA-Lib是一套被业界广泛应用的开源技术分析库,在国外很常用,各种大型的开源量化框架都会内置这个库。TA-Lib的好处是可以让使用者专注于策略的设计,而不用重复造轮子一样花时间实现技术指标。TA-Lib中MACD方法可以根据输入的收盘价直接计算得到DIF、DEA、BAR三组数据,只需要1行代码就轻松搞定。TA-Lib参数输入为array in、array out,因此收盘价close为numpy.ndarray类型的序列,返回值也为一个序列,我们可以将其想象为一条曲线。

这里仍然通过Matplotlib创建另一个子图subplot显示MACD指标,我们使用plot函数对DIF、DEA指标进行绘制,而柱状图bar可使用numpy.where函数分别实现红柱和绿柱,当bar0时,保持数值,否则为0,得到红柱数组,同理当bar0时,得到绿柱数组。

增加MACD子图graph_MACD,在子图上绘制MACD指标。以下为多子图分别显示K线、均线、成交量、MACD的例程代码,显示效果如下所示:

前面讲的MACD属于趋势类指标,趋势指标的滞后性导致人们无法区分股价的逆趋势变动是属于正常的修正还是趋势的反转。震荡指标的表现形式为指标值在设定的水平值之间或围绕一个中心线上下波动,当指标值长期保持在一个极端区间形成超买或超卖现象时,可推断股价存在反转的可能。不过任何指标都不会是完美的,震荡指标存在钝化缺陷,即在超强的市场中超买之后持续超买,超弱的市场中超卖之后持续超卖,这样会干扰到买卖点的判断,过早出局失去可观的主升浪行情或者过早建仓而被套牢。这里讲下最为常用的震荡指标KDJ的可视化实现。

从交易原理上来看,KDJ指标最基础的交易思想建立在由Larry Williams提出的威廉指标(Williams %R,简称W%R)之上。威廉指标的计算首先选定一个特定的时间跨度(比如14日),然后找出这一特定区间的最高价和最低价,构成一个价格变化区间,而后分析这一时间跨度最后一个时间点的收盘价与期间最高价和最低价的相对位置,以此来衡量市场的超买或超卖现象。

KDJ指标的最早雏形是由芝加哥期货交易商George Lane提出的KD指标,该指标又被称为随机震荡指标(Stochastic Oscillator Indicator)。KD指标的分析思想与威廉指标类似,也使用特定时间跨度中的最后收盘价与该时间跨度内的最高价和最低价的相对位置来推测市场的超买和超卖情况。与威廉指标不同的是,它在收盘价与最高价和最低价的相对位置的比值上,又融合了移动平均的思想,用更多的信息来捕捉市场的超买超卖现象。KDJ指标则是在随机震荡指标K线和D线的基础上增加了一条J线,进一步提高了随机震荡指标对市场买卖信号捕捉的准确度。

求KDJ指标的第一步是计算未成熟随机值RSV(Raw Stochastic Value),计算公式如下,其中n为时间跨度。显然RSV取值范围在0~100之间,取值越大说明收盘价在价格区间中的相对位置越高,市场可能出现超买的现象,反之亦然。

RSV =(第n天的收盘价 − 最近n天内的最低价)/(最近n天内的最高价 − 最近n天内的最低价)* 100%

我们仍然可以使用TA-Lib中STOCH(Stochastic Oscillator Slow)方法计算得到K、D值,再由K、D值计算得到 J 值,不过为了让大家能够侧面感受下TA-Lib的便捷,我们通过计算公式来实现KDJ指标。在计算第一期的K值和D值时,如果没有指定则K值和D值默认取值为50。在K值和D值求解过程中,平滑权重2/3和1/3是较为常用的权重,可根据股价走势特点适当修改。由于K、D当前值与上一个值相关,必须保证第一个值为非NA值,否则遍历计算时所有值都无效。选择周期跨度为9日,则RSV值前8个数值为NA,第9个数据产生第一个有效RSV值,此时对应的K、D值为其序列中的第一个值即默认值,下一组开始为有效的K、D值。

以下为KDJ子图显示KDJ指标的例程代码,其他部分代码与以上例程相同,不再列出,显示效果如下所示:

BIAS 乖离率 移动平均线代表投资人的平均成本,而乖离率则可代表投资人的平均报酬率。乖离率的应用,回档或反弹行情…

在股市投资中,MACD指标作为一种技术分析的手段,得到了投资者的认知。但如何使用MACD指标,才能使投资收益达到最…

MACD股票论坛中的MACD指标详解知识如何被股票交易员使用去应对港股市场 最近股市波动不断,小苏就给最近股市波…

近日二级市场炒股票新手入门依然面临很大挑战,小罗就给近日面对二级市场的炒股票新手入门者面临很大挑战的炒股票新手入门…

有人进入股票市场很多年,但是很多时候还是在“凭感觉”炒。有人擅长持股,就是不喜欢卖出,涨跌都不动如山,极少操作。有…

本文来自网络,不代表「股票交易网」立场,转载请注明出处:https://www.sh-runjia.com.cn/17825.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部