QUANTAXIS的指标系统

QUANTAXIS的指标系统

QUANTAXIS框架学习笔记。指标好多,真的得用心学习了。这里学习了几个基础指标。

指标计算入口

QUANTAXIS的核心数据结构有一个方法叫add_func(func, args, *kwargs),作为一个指标的入口,会返回一个和DataStruct中股票数量一致长度的DataFrame。

QUANTAXIS有两种类型的指标:

  1. 基础指标:输入为Series的指标;
  2. 应用级指标:可应用于DataStruct的指标。

其中,基础指标是为了应用级指标做准备的,及对应于Series的分析和dataframe的分析。

基础类指标[基本和同花顺/通达信一致]

MA指标

MA:移动平均线。具有趋势的特性,比较平稳,不像日K线会起起落落地震荡。越长期的MA线,越能表现稳定的特性。不轻易向上向下,必须等股价趋势真正明朗。移动平均线说到底是一种趋势追踪工具,便于识别趋势已经终结或者反转,新的趋势是否正在形成。

MA线存在一定的滞后效应,经常股价刚开始回落时,MA线还是向上的,等股价跌落显著时,MA线才会走下坡。为了弥补这个缺陷,可以设置不同计算天数的MA线,从不同的周期了解股价的总体运行趋势。短线MA指标结合长线MA指标判断走势是很有帮助的。

MA线有涨时助涨,跌时助跌的特点。股价从下方突破平均线,平均线也开始向上移动,可以看成是多头的支撑线,股价下跌至平均线附近,会受到支撑,是买进时机,这是平均线助涨的特性。以后股价上升缓慢或回跌,平均线将减速移动,当股价回到平均线附近时,平均线已失去助涨的特性,此时最好不要买进。

反之,股价从上方跌破平均线,平均线将会向下移动,则称为空头的阻力线。在股价回升至平均线附近时,会受到阻力,是卖出时机,这是平均线助跌的特性。以后股价下跌缓慢或回升,平均线将减速移动,当股价回到平均线附近时,平均线已失去助跌的特性,此时不用急于卖出。

以时间的长短,移动平均线可以分为短期、中期、长期几种,综合观察长中短期移动平均线,可以研判市场的多重倾向。如果三种移动平均线并列上涨,该市场呈多头排列;如果并列下跌,该市场呈空头排列。

MA指标的应用重点参考著名的葛兰碧法则

  1. 平均线从下降逐渐转为走平,而价格从下方突破平均线,是买入信号
  2. 价格虽然跌破平均线,但是又立刻回升到平均线上,此时平均线仍然持续上升,仍为买进信号;
  3. 价格趋势走在平均线上,价格下跌并未跌破平均线且立刻反转上升,也是买进信号;
  4. 价格突然暴跌,跌破平均线,且远离平均线, 则有可能反弹,也是买进时机;
  5. 平均线从上升逐渐转为盘局或下跌,而价格向下跌破平均线,为卖出信号;
  6. 价格虽然向上突破平均线,但是又立刻回跌至平均线一下,此时平均线仍然持续下降,仍为卖出信号;
  7. 价格趋势走在平均线上,价格上升并为突破平均线且立刻反转下跌,也是卖出信号。
  8. 价格突然暴涨,突破平均线,且远离平均线,则有可能反弹回跌,也为卖出时机。

选股的时候可以把MA线作为一个参考指标,MA线能够反应出价格趋势走向。短期可以关注3天、7天的平均线,中线可以关注10天、30天的,长线可以关注150天、250天的。

MA的计算是将N日的收盘价算术平均。

MA线的优点有:

  1. 使用移动平均线可以观察股价总的走势,不考虑股价的偶然变动,这样可以自动选择出入市的时机。
  2. 平均线能显示“出入货”的讯号,将风险水平降低。
  3. 平均线分析比较简单,使投资者能够清楚了解当前价格动向。
  4. 稳定性。

MA线的缺点有:

  1. MA线移动缓慢,不易把握股价趋势的高峰和低谷;
  2. 在价格波幅不大的牛皮期间,平均线折中于价格之中,出现上下交错型的出入货信号,使分析者无法定论。
  3. 滞后性。在股价原有趋势发生反转时,由于MA线追踪趋势的特性,MA线的行动往往过于迟缓,掉头速度落后于大趋势。这是MA线的一个极大的缺点。等MA线发出反转信号时,股价掉头的深度已经很大了。

例如,计算收盘价的MA5(过去5天的平均):

1
2
3
da = QA.QA_fetch_stock_day_adv('000001', '2018-01-01', '2018-09-10')
close = da.close
close_ma5 = QA.MA(close, 5)

EMA指标

EMA:指数移动平均,也称作EXPMA指标。是一种趋向类指标,EMA是以指数式递减加权的移动平均。计算公式为:

$$
EMA_{today}=α \times Price_{today} + (1-α) \times EMA_{yesterday}
$$

其中a为平滑指数,一般取$\frac{2}{N+1}$,在计算MACD指标时,EMA计算中的N一般选取12和26天,因此α相应为2/13和2/27。当公式不断递归,直至$EMA_1$出现,$EMA_1$是没有定义的。$EMA_1$的取值有几种不同的方法,通常情况下取$EMA_1$为$Price_1$,另外有的技术是将$EMA_1$取值为开头4到5个数值的均值。

在EMA指标中,每天价格的权重系数以指数等比形式缩小。时间越靠近当今时刻,它的权重越大,说明EMA函数对近期的价格加强了权重比,更能及时反映近期价格波动情况。所以EMA比MA更具参考价值,而EMA也不容易出现死叉和金叉,所以一旦出现要立即作出反映!对周线处理,EMA就更加稳定了。

金叉 : 当较短周期的均线从长期均线的下方,向上穿越较长周期的均线,形成的交点就是大家常说的金叉。(很多技术指标也用这个词来表示良性的交叉。如KDJ)简单来讲,一般投资者口中的金叉指的是5日均线下穿10日移动平均线,但很快由于下方有支撑,价格上涨,5日均线也随之快速向上上穿10日均线。由此形成的均线形态叫做金叉。

金叉

死叉 :当较短周期的均线从长期均线的上方方,向下穿越较长周期的均线,形成的交点就是大家常说的死叉。(很多技术指标也用这个词来表示风险的交叉。如KDJ) 死叉正好跟金叉是相反的,5日均线上穿10日均线很短的时间内,在上方遇到压力价格快速下跌,5日均线也随之下穿10日均线。由此形成的移动平均线的形态就叫做死叉。

死叉

例如,计算EMA5:

1
close_ema5 = QA.EMA(close, 5)

SMA指标

简单移动平均。若$Y = SMA(X, N, M)$,则$Y_n =\frac{M \times X + (N-M)\times Y_{n-1}}{N}$,其中$N>M$。

例如,计算SMA(5, 1):

1
close_sma5_1 = QA.SMA(close, 5, 1)

DIFF指标

这里的diff函数用于计算价格差分。

例如,计算收盘价的DIFF1(一阶差分):

1
close_diff1 = QA.DIFF(close, 1)

HHV指标

这个指标的是N个周期的最大值。QUANTAXIS里面似乎N只能取1:

1
close_hhv = QA.HHV(close, 1)

LLV指标

类似HHV。

1
close_llv = QA.LLV(close, 1)

SUM指标

例如,计算昨天和今天的收盘价和的序列:

1
close_sum = QA.SUM(close, 2)

ABS指标

这个就很容易理解了,绝对值。

1
close_abs = QA.ABS(close)

MAX指标/MIN指标

例如,求open和close序列中始终位于上面/下面的序列:

1
2
open = da.open
close_open_max = QA.MAX(close, open)

CROSS指标

这个函数会生成一个零一序列标示两个序列的值是否在该日发生反转。如果发生了反转取1:

1
QA.CROSS(open, close)

COUNT指标

该函数是这样计算的,例如在下面的示例代码中,每8天为一个周期,该周期中每天的收盘价如果大于13就记为1,反之为0。然后再把8天的返回值加起来。

1
close_count8 = QA.COUNT(close > 13, 8)

IF指标

例如,下面的代码示例表示,如果close大于13,那么就返回对应天的high值,否则返回low的值。

1
2
3
high = da.high
low = da.low
close_if = QA.IF(close > 13, high, low)

REF指标

就是把序列进行滞后,例如滞后5期:

1
close_lag5 = QA.REF(close, 5)

STD指标

计算N周期的标准差,例如计算5日为周期的标准差序列。

1
close_std5 = QA.STD(close, 5)

AVEDEV指标

平均绝对偏差 mean absolute deviation
计算代码为:

1
2
3
4
5
6
7
8
def AVEDEV(Series, N):
"""
平均绝对偏差 mean absolute deviation
修正: 2018-05-25

之前用mad的计算模式依然返回的是单值
"""
return Series.rolling(N).apply(lambda x: (np.abs(x - x.mean())).mean(), raw=True)

下面的代码没搞懂为什么会出错:

1
close_avedev = QA.AVEDEV(close, 5)

BBIBOLL指标

多空布林线是以多空线为中心线,多空线的标准差为带宽的轨道线。UPR线为压力线,对股价有压制作用,DWN为支撑线,对股价有支持作用,BBIBOLL为中轴线。

计算公式为:
$$
BBIBOLL = \frac{SMA3 + SMA6 + SMA12 + SMA24}{4} \\
UPR = BBIBOLL + M \times BBIBOLL的N日估算标准差 \\
DWN = BBIBOLL + M \times BBIBOLL的N日估算标准差 \\
其中,N = 11、M = 6
$$

应用法则:

  1. 为多空指标BBI和布林线BOLL的叠加;
  2. 高价区收盘价跌破BBI线,并且上下轨相距非常远时,为卖出信号;
  3. 低价区收盘价突破BBI线,并且上下轨相距非常近的时候,为买入信号;
  4. BBI线向上,股价在BBI线上,多头势强;
  5. BBI线向下,股价在BBI线之下,空头势强。

使用技巧:
多空布林线BBIBOLL的走向:

  1. 轨道收敛:说明行情即将变盘,向上或向下突破;
  2. 轨道发散:表面将向上或向下扩大趋势;
  3. 轨道极度发散:趋势向上,上轨线远离股价时为卖出信号;趋势向下,下轨线远离股价时为买入信号。

OSC指标

震荡率指标OSC,也叫变动速率线。属于超买超卖指标/是从移动平均线原理派生出来的一种分析指标。它反映当日收盘价与一段时间内平均收盘价的差离值。从而测出股价的震荡幅度。按照MA线的原理,根据OSC的值可以推断价格的趋势,如果原理平均线,就很可能像平均线回归。

以OSC10为例:$$OSC_{10} = 当日收市价 - 十日均价$$

参数设置

  1. OSC指标的周期一般取十天;
  2. 设置OSC指标的平均天数,还可以显示出OSC指标的平均线。

指标的意义

提起OSC指数,有很多种构造方法,但它们的真实含义都相差无几。大部分摆动指数的曲线都非常相像。我们沿着价格图表的地步来做摆动指数的图线,把它局限于一天水平向的狭长区域里。不论价格是升降还是持平,摆动指数的区域基本总是水平向发展的。不过,摆动指数的峰和谷与价格图上的峰和谷同时出现。有些摆动指数的变化具有一个中间值,从而摆动指数所在的水平域可以分为上半部和下半部。根据算法的不同。在摆动指数的上下边界之内,既可以标志成从0到100的刻度,也可以标成从-1到+1的刻度。

研判方法

  1. 震荡指标以0值为中线,OSC在零线之上,市场处于强势;OSC在零线之下,市场处于弱势;
  2. OSC穿过零线向上,市场走强,可视为买入信号。反之,OSC跌破零线继续下行,市场走弱,应注意卖出。
  3. 如果OSC远离零线,即价格远离平均线,应注意价格很可能均线回归。OSC偏离的程度应结合经验加以判断。

使用技巧

  1. 顶背离:股价在上涨行情中创新高,而OSC指标未能配合创新高,叫顶背离,意味着上涨动力减弱,股价可能反转下跌。
  2. 底背离:股价在下跌行情中创新低,而OSC指标未能配合创新低,叫底背离,意味着下跌动力减弱,股价可能反转上涨。
  3. 如果股价和OSC指标在低位同步上升,显示短期将有反弹行情;如果股价与OSC指标在高位同步下降,显示短期将有回落走势。

注意事项

  1. 汇价在上涨的行情趋势中,OSC指标却没有随之上涨,说明此次汇价的上涨没有强有力的动能支撑,要注意汇价反转的情况。
  2. 汇价在下跌的行情趋势中,OSC指标却没有随之下跌的话,说明此次汇价的下跌缺乏动能支撑,要注意汇价反转上涨的情况。
  3. 汇价和OSC指标同时在低位开始和上升的话,一般预示着行情会出现反弹。相反,汇价和OSC指标同时从高位下降则说明短期内汇价可能会持续下滑。
1
2
3
4
import pandas as pd
import QUANTAXIS as QA
da = QA.QA_fetch_stock_day_adv('000001', '2018-01-01', '2018-09-10')
close_osc = QA.QA_indicator_OSC(da.data, 20, 6)

该函数会返回一个数据框,数据框中包含两个变量——MAOSC和OSC。
其中:
$$
OSC = (close - MA(close, 20)) \times 100 \\
MAOSC = EMA(OSC, 6)
$$
其中20和6为默认值。

BBI指标

多空指标。Bull And BearIndex,是一种将不同日数的MA线加权平均之后的综合的指标,属于均线型指标。一般选择3日、6日、12日和24日四条平均线。在使用MA线时,投资者往往对参数的选择有不同的偏好,而多空指标恰好解决来中短期移动平均线的期间长短合理性问题。很明显,在BBI指标中,近期数据较多,远期数据利用次数较少,因而是一种变相的加权计算。由于多空指标是一条混合MA线,所以既有短期MA线的灵敏,又有明显的中期趋势特征,适合稳健的投资者。

应用法则

  1. 股价位于BBI上方,视为多头市场;
  2. 股价位于BBI下方,视为空头市场;
  3. 下跌行情中,若当日收盘价跌破BBI线,表示多转空,为卖出信号。
  4. 上涨行情中,若当日收盘价升越BBI曲线,表示空转多,为买入信号。
  5. 上升回档时,BBI为支持线,可以发挥支撑作用。
  6. 下跌反弹时,BBI为压力线,可以发挥阻力作用。

评估要点

  1. 谨慎选择BBI。BBI的周期有多种选择,短线股民选择较短周期,长线股民选择较长周期。
  2. 依据BBI买卖信号评估买卖时机。BBI是一条混合移动平均线,所以它既有短周期MA线的灵敏,又有长期MA线的平稳。其买卖信号与MA线的买卖信号相同,可以参照MA的买卖信号评估买卖时机。
  3. 注意BBI的方向、与股价的方向的异同,背离信号和交叉信号。当股价由下向上与BBI产生黄金交叉是买入信号;当股价由上向下与BBI相交产生卖出信号。

优势

  1. BBI指标可以综合不同时段的MA线的具体数值,然后进行比较平均的计算,之后会得到一个更加具体和客观的数值。所以使用BBI指标来预判市场多空是非常实用的,特别是对长线操作的投资人来说,会更好的帮助分析汇价趋势。
  2. 最重要的一点是,BBI的使用特别简单,对于很多新手投资人来说是个不错的选择,BBI指标只有一条线,如果汇价是在这条线的上方的话,表示汇市正处于多头趋势下,相反,汇价处于下方的话,就表示汇市处于空头趋势。使用BBI指标可以轻松的判断出汇市的多空趋势,在分析周K线时,使用BBI指标的话,会有很好的效果。

缺点

BBI的本质是对MA的一种改进,所以也具有一些类似MA的缺点:

  1. 指标信号的滞后性,常常会发生股价已接近短期头部时,BBI才出现卖出信号,股价已接近短期底部时,BBI才出现买入信号。
  2. 指标信号的频发现象,特别是在趋势不明朗时,这种现象更为严重。
  3. 在MA中,设置多条MA线,分为长中短期,并且同时应用,相互比对,非常有效地弥补了单一平均线的缺陷。而BBI只设置了一条线,仅起到了短期多空分水岭的作用。

在QA框架中,BBI的计算方法为:

1
close_bbi = QA.QA_indicator_BBI(da.data, 3, 6, 12, 24)

瀑布线(PBX)

瀑布线是欧美国家九十年代初,广泛应用于金融领域中的判断股价运行趋势的主要分析方法,因其汇聚向下发散时呈瀑布状而得名。属于传统的大势价格趋势线,它真正的名称叫 非线性加权移动平均线 ,是由六条非线性加权移动平均线组合而成,每条平均线分别代表着不同时间周期的股价成本情况,方便对比分析。

瀑布线是一种中线指标,一般用于研究股价的中期走势,与普通均线系统相比,它具有反应速度快,给出的买卖点明确的特点,并能过滤掉盘中主力震仓洗盘或下跌行情中的小幅反弹,可直观有效地把握大盘和个股运行趋势,是目前研判大势和个股股价运行趋势颇为有效的均线系统。

瀑布线的优点还在于其不会类似其他指标那样频发发出信号,瀑布线的买卖信号出现并不多,如果瀑布线给出了买入或卖出信号,只要按照其应用原则,就一定可以取得较好的投资收益。

在趋势明显的上涨和下跌趋势中,瀑布线能够给出明确的买卖点和持仓信号,是把握波段行情的利器,它不仅适用于平衡市的操作,更适用于上涨趋势明显中的应用。

计算公式

$$
PBX_1 = \frac{MA_{N_1} + MA_{N_1 \times 2} + MA_{N_1 \times 4}} {3} \\
PBX_2 = \frac{MA_{N_2} + MA_{N_2 \times 2} + MA_{N_2 \times 4}} {3} \\
PBX_3 = \frac{MA_{N_3} + MA_{N_3 \times 2} + MA_{N_3 \times 4}} {3} \\
PBX_4 = \frac{MA_{N_4} + MA_{N_4 \times 2} + MA_{N_4 \times 4}} {3} \\
PBX_5 = \frac{MA_{N_5} + MA_{N_5 \times 2} + MA_{N_5 \times 4}} {3} \\
PBX_6 = \frac{MA_{N_6} + MA_{N_6 \times 2} + MA_{N_6 \times 4}} {3} \\
通常:N_1 = 4, N_2 = 6, N_3 = 9, N_4 = 13, N_5 = 18, N_6 = 24
$$

瀑布线实战

  1. 瀑布线出现多头排列,并且6条瀑布线往上发散时,说明股票已经进入主升浪行情;但短周期瀑布线向下却没有和中、长期瀑布线相交时,说明股票出现幅度不大的技术调整;当短周期瀑布线和中、长周期瀑布线相交并粘合时,说明股票出现幅度较大的技术调整,如果出现瀑布线调整但瀑布线没有出现空头排列甚至出现多头排列的时候,说明股票进入主升浪的延续阶段。
  2. 瀑布线出现空头排列,但短周期瀑布线钝化并向上运行时,说明股票有反弹趋势,特别是短线瀑布线上穿瀑布线时。
  3. 当瀑布线粘合时,说明进入了反转趋势,特别是股价穿越所有瀑布线并站稳时。
  4. 瀑布线处于空头排列时,股票价格反弹之A6线附近或穿越所有的瀑布线,为卖出信号;当股票价格出现横盘震荡,瀑布线转变为多头排列,并且股票价格在瀑布线上方站稳的时候,是买入信号。
  5. 股价上涨远离瀑布线,每条瀑布线间距较大,这种情况比较危险,如果买入股票的话容易被套牢,等回调靠近中、长期瀑布线时再买入股票,同时将A6瀑布线作为止损线。
  6. 回调整理后重新站上6条瀑布线时加仓(多头的6条瀑布线粘合或者接近粘合,上涨爆发力较强)。
  7. 股价在跌破所有瀑布线后,比较短的时间又重新回到多头排列的瀑布线是买入信号。
  8. 周K线的瀑布线可以作为研判股价中期行情的标准,日K线的瀑布线可以作为买卖进出的指标。

瀑布线的用法

瀑布线一共由A1-A6共6条线组成。这6条线分别表示短周期、中周期和长周期每个时候的成本,6条线如果接近粘合或者粘合时,说明个周期的成本基本一致。

  1. 买入信号。6条瀑布线如果在股票价格处于低位时粘合,短周期瀑布线上穿长周期瀑布线,6条瀑布线同时往上发散。
  2. 卖出信号。6条瀑布线如果在股价高位的时候粘合,短周期瀑布线下穿长周期瀑布线,6条瀑布线同时往下发散。
  3. 持仓信号。6条瀑布线按照从下往上的排列方式排列,并形成多头排列。
  4. 卖出信号。6条瀑布线按照从上往下排列,并形成空头排列。

注意要点

  1. 做长线一般要用周的瀑布线来分析,做中线波段行情,通常以日K线说对应的瀑布线系统为主,而分时瀑布线系统则是短线进出的好工具。
  2. 瀑布线也具有助涨助跌的特性。

应用法则

  1. 买入信号:当股价低于全部6条瀑布线;6条瀑布线呈空头排列;瀑布线处于向下发散的状态。这时如果瀑布线走平,股价止损企稳后迅速向上运行,且有成交量的配合,可以买入。
  2. 持股信号:瀑布线在低价区由空头排列向下汇聚发展;瀑布线形成多重金叉,表面股价有继续走强趋势;瀑布线由低位汇聚并开始向上发散。这个时候,投资者应该以坚定持股为主。
  3. 卖出信号:当股价高于全部6条瀑布线;6条瀑布线呈现多头排列;瀑布线处于向上发散状态。这是,如果瀑布线由升转平,股价难以进一步上涨。以后开始快速下跌,则无需成交量的配合,均应卖出。
  4. 持币信号:瀑布线在高价去由多头排列向上汇聚发展;瀑布线形成多重死叉,表明股价有继续走弱趋势;瀑布线由高位汇聚开始向下发散。这时,投资者应该以坚持持币为主。

在QA框架中,PBX的计算方法如下:

1
close_pbx = QA.QA_indicator_PBX(da.data, 3, 5, 6, 13, 18, 24)

BOLL指标

布林线指标,英文全称为Bollinger Bands。其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围和未来趋势,利用波带显示股价的安全高低价位,因为也被称为布林带。其上下线范围不固定,随着股价的滚动而变化。布林指标和MIKE指标一样同属路径指标,股价波动在上限和下限的区间之中,这条带的宽窄随着股价波动幅度的大小而变化,股价涨跌幅度加大时带状区变宽,涨跌幅度狭小盘整的时候,带宽区间则变窄。

原理

BOLL指标时美国股市分析家约翰·布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标。一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定范围内波动,布林线正是在上述条件的基础上,引进了“股价信道”的概念,其认为股价信道的宽窄随着股价波动幅度的大小而变化,而股价信道又具有变异性,它会随着股价的变化而自动调整。正是由于它的灵活性、直观性和趋势性的特点,BOLL指标逐渐成为投资者广为应用的市场热门指标。

在众多技术分析指标中,BOLL指标属于比较特殊的一类指标。绝大多数技术分析指标都是通过数量的方法构造出来的,它们本身不依赖趋势分析和形态分析,而BOLL指标却与股价的形态和趋势有着密不可分的联系。BOLL指标中的“股价信道概念”正是股价趋势理论的直观表现形式。BOLL利用“股价信道”来显示股价的各种价位,当股价波动很小,处于盘整时,股价信道就会变窄,这可能预示这股价的波动处于暂时的平静期;当股价波动超出狭窄的股价信道的上轨时,预示着股价异常激烈的向上波动即将开始;当股价波动超出狭窄的股价信道的下轨时,同样预示着股价的异常激烈的向下波动即将开始。

投资者经常会遇到两种最常见的陷阱,一是买低陷阱,投资者在所谓的低位买进之后,股价不仅没有止跌反而不断下跌;二是卖高陷阱,股票在所谓的高点卖出之后,股价却一路上涨。布林线认为各类市场间是互动的,市场内和市场间的各种变化都是相对性的,是不存在绝对的,股价的高低是相对的,股价在上轨线以上或在下轨线以下只反映该股价相对较高或相对较低,投资者作出投资判断前还须综合参考其它技术指标,包括价量配合、心理类指标、类比类指标、市场间的关联数据等。

总之,BOLL指标中的股价信道对预测未来行情的走势有重要的参考作用,它也是布林线指标所特有的分析手段。

计算公式

  1. 中轨线:

$$
中轨线 = N日的MA线
$$

  1. 上轨线:

$$
上轨线 = 中轨线 + 两倍的标准差
$$

  1. 下轨线:

$$
下轨线 = 中轨线 - 两倍的标准差
$$

具体的计算过程:

  1. 中轨线:

$$
中轨线 = N日内的收盘价之和/N
$$

  1. 标准差:

$$
st = \sqrt{N-1}日的收盘价与MA的差的平方和除以N
$$

指标表示

在股市分析软件中,BOLL指标一共由四条线组成,即上轨线UP、中轨线MB、下轨线DN和价格线。其中上轨线是UP数值的连线,用黄色线表示;中轨线MB是MB数值的连线,用白色线表示;下轨线是DN数值的连线,用紫色线表示;价格线以美国线表示,颜色为浅蓝色。

各线的意义

  1. BOLL指标的上中下轨线所形成的股价信道的移动范围是不确定的,信道的上下限随着股价的上下波动而变化。在正常情况下,股价应始终处于股价信道内运行。如果股价脱离股价信道运行,则意味着行情处于极端的状态下。
  2. 在BOLL指标中,股价信道的上下轨是显示股价安全运行的最高价位和最低价位。上轨线、中轨线和下轨线都可以对股价的运行起支撑作用,而上轨线和中轨线有时则会对股价的运行起压力作用。
  3. 一般而言,当股价在布林线的中轨线上方运行时,表明股价处于强势趋势,当股价在布林线的中轨线下方运行时,表明股价处于弱势趋势。

轨线关系

  1. 当布林线的上中下轨线同时向上运行时,表明股价强势特征非常明显,股价短期内将继续上涨,投资者应坚决持股待涨或逢低买入。
  2. 当布林线的上中下轨线同时向下运行时,表明股价的弱势特征非常明显,股价短期内将继续下跌,投资者应坚决持币观望或逢高卖出。
  3. 当布林线的上轨线向下运行,而中轨线和下轨线却还在向上运行时,表明股价处于整理态势之中。如果股价是处于长期上升趋势时,则表明股价是上涨途中的强势整理,投资者可以持币观望或逢低短线买入;如果股价是处于长期下跌趋势时,则表明股价是下跌途中的弱势整理,投资者应以持币观望或逢高减仓为主。
  4. 布林线的上轨线向上运行,而中轨线和下轨线同时向下运行,表明股价将经历一轮下跌,下跌的幅度将由开头的大小决定,反之,布林线的下轨线向下运行,而中轨线和上轨线同时向上运行,表明股价将经历一轮上涨,上涨的幅度将由开口的大小决定。
  5. 当布林线的上中下轨线几乎同时处于水平方向横向运动时。则要看股价目前的走势处于什么样的情况下来判断。

美国线关系

美国线:又称为柱线图,其构造比K线简答,美国线的直线部分表示了当天行情的最高价与最低价间的波动幅度。左侧横线代表开盘价,右侧横线代表收盘价。

  1. 当美国线从布林线的中轨线以下、向上突破布林线中轨线时,预示着股价的强势特征开始出现,股价将上涨,投资者应以中长线买入股票为主。
  2. 当美国线从布林线的中轨线以上、向上突破布林线上轨时,预示着股价的强势特征已经确立,股价可能短线大涨,投资者应以持股待涨或短线买入为主。
  3. 当美国线向上突破布林线上轨以后,其运动方向继续向上时,如果布林线的上中下轨线的运动方向也同时向上,则预示着股市的强势特征依旧,股价短期内还将上涨,投资者应坚决持股待涨,直到美国线的运动方向开始有掉头向下的迹象才密切注意行情是否转势。
  4. 当美国线在布林线上方运行了一段时间之后,如果美国线的运动方向开始掉头向下,投资者应格外小心,一旦美国线掉头向下并突破布林线上轨时,预示着股价短期的强势行情可能结束,股价短期内将大跌,投资者应及时短线卖出股票、离场观望。特别是对于那些短线涨幅很大的股票。
  5. 当美国线从布林线的上方、向下突破布林线的上轨后,如果布林线的上中下轨线的运动方向也开始同时向下,预示着股价的短期强势行情即将结束,股价的短期走势不容乐观,投资者应该以逢高减仓为主。
  6. 当美国线从布林线中轨上方、向下突破布林线的中轨时,预示着股价前期的强势行情已经结束,股价的中期下跌趋势已经形成,投资者应及时卖出股票。如果布林线的上中下线同时向下更能确认。
  7. 当美国线向下跌破布林线的下轨并继续向下时,预示着股价处于极度弱势行情,投资者应坚决以持币观望为主,尽量不买入股票。
  8. 当美国线在布林线下轨运行了一段时间之后,如果美国线的运动方向有掉头向上的迹象时,投资者应坚决以持币观望为主,尽量不买入股票。
  9. 当美国线从布林线下轨下方、向上突破布林线下轨时,预示着股价的短期行情可能回暖,投资者可以及时适量买入股票,作短线反弹行情。
  10. 当美国线一直处以中轨线上方,并和中轨线一起向上运动时,表明股价处于强势上涨过程中,只要美国线不跌破中轨线,投资者应该坚决一路持股。
  11. 当美国线一直处于中轨线下方,并和中轨线一起向下运动时,表明股价处于强势下跌过程中,只要美国线不向上反转突破中轨线,稳健的投资者就可以一路观望。

QA框架中计算BOLL指标

1
2
3
4
5
6
7
8
9
10
11
12
import QUANTAXIS as QA
close_boll = QA.QA_indicator_BOLL(da.data, 5)
close_boll.tail()

Out[5]:
BOLL LB UB
date code
2018-09-04 000001 10.228 9.972500 10.483500
2018-09-05 000001 10.184 9.891562 10.476438
2018-09-06 000001 10.154 9.803686 10.504314
2018-09-07 000001 10.130 9.755834 10.504166
2018-09-10 000001 10.068 9.644113 10.491887

ROC指标

ROC指标(Price Rate of Change)又称变动率指标,是以今天的收盘价比较N天前的收盘价除以N天前的收盘价(本质其实是N日K线的涨幅),以比率表示。

买卖原则

  1. ROC具有超买超卖原则;

超买超卖原则:对于某种股票的过度买入称为超买,对于某种股票的过度卖出称为超卖。原因在于股价的运行趋势存在惯性。

  1. 个股经价格比率之不同,其超买超卖范围也略有不同,一般介于$\pm 6.5$之间;
  2. ROC抵达超卖水准时,作买;抵达超买水准时,作卖;
  3. ROC对于股价也能产生背离作用。一般而言,对于只能达到超买线一(参数值5——10)的个股,应相应地进行波段的高抛低吸。而一旦个股能够摆脱这两条常态超买线,挑战第三条超买线(参数值18-35),行情往往就会向狂热的极端行情演变。其中有六七成个股会演绎为叠创新高的大黑马或独立牛股。

变动率

ROC变动速度的大小可以反映股市变动的快慢程度。

ROC的参数

市场上流行的是N=5和N=10等几种。

ROC的特性

  1. ROC表示股价上升或下降的速率大小。
    如果是上升趋势,并且ROC为正值,另外ROC步步上扬,则意味着上升趋势正在加速,若ROC开始走平,则意味着股价的涨幅与数天前的涨幅相近,尽管还是处于上升趋势,但是速度已经放慢;若ROC开始回落,虽然股价还在上升,当上升的力量已经衰落;若ROC开始延伸到0之下,下降趋势已经开始露头,ROC进一步下走,则下降动力正在加强。
  2. ROC变化超前于股价的变化。
  3. ROC的变化有一定的范围。
  4. ROC的应用法则:
    • ROC向下跌破0是卖出信号,反之为买入信号。
    • ROCAVG是ROC的移动平均。ROC上穿ROCAVG且ROC为正值时,为买入信号,胆汁为卖出信号。
    • ROC有领先于股价的特性,所以有如下的法则。如果从高向低ROC曲线出现两个依次下降的谷,而此时股价却出现了新的高峰。这就是背离,是卖出信号。同理,ROC从低向高形成依次上升的两个峰,而此时股价出现了新的低谷,是买入信号。

计算公式

$$ROC=\frac{close_{today}-close_{-N}}{close_{-N}} \times 100 \\
ROCMA=MA(ROC, M) = \frac{\sum^{M}_{i = 1}ROC_{i}}{M}$$

QA框架中计算ROC的方法

1
2
3
import QUANTAXIS as QA
da = QA.QA_fetch_stock_day_adv('000001', '2018-01-01', '2018-09-10')
close_roc = QA.QA_indicator_ROC(da.data, 12, 6)

上面的代码会得到ROC和ROCMA。

MTM指标

MTM指标又叫动量指标,英文全称为“Momentum Index”,是一种专门研究股价波动的中短期技术分析工具。

简要介绍

MTM是一种利用动力学原理,专门研究股价在波动过程中各种加速、惯性以及由静到动或由动转静的现象。动量指标的理论基础是价格和供求量的关系。它认为股价的涨跌幅度随着时间的推移会逐渐缩小,股价变化的速度和能量也会逐渐减缓后,行情就可能反转。在多头行情里,随着股价的不断上升,股价的上涨能力和速度必将日渐萎缩,当上涨的能量和速度减少到一定程度时,行情将会出现大幅回荡或见顶反转的行情;而在空头行情里,随着股价地不断下跌,股价下跌的能量和速度也将日渐萎缩,当下跌的能量和速度萎缩到一定程度时,行情也将会出现大幅反弹或见底反转的行情。

因此,动量指标就是通过观察股价波动的速度,衡量股价波动的动能,从而揭示股价反转的规律,为投资者正确地买卖股价提供重要的参考。

计算方法

  1. 方法一
    $$
    MTM_N = close_{today} - close_{-N}
    $$
    其中,N为计算参数,一般取6。

  2. 方法二
    $$
    MTM_N = (close_{today} - close_{-N}) \times 100 - 100
    $$

虽然两种方法有一定的不同,但是计算方法的意义和研判手段是一样的。在股市分析软件上,股价的动量线是通过每个交易日的动量点的连线,股价在波动中的变化可以通过动量线反映出来。动量指标以0线为执行线,0上方为股价上升地带,0线下方为股价下跌地带。动量线就是根据股价围绕着中心线周期波动来反映股价波动的速度。另外,为了使动量指标更直观、准确地反映股价真实波动的情况,在股市分析软件上,MTM指标图上还辅助以另外一条线——MTMMA,即MTM的移动平均线,MTM指标的研判就是围绕这两条线之间的关系展开的。

QA框架中计算MTM

QA框架中计算MTM的代码为:

1
2
3
4
5
6
7
def QA_indicator_MTM(DataFrame, N=12, M=6):
'动量线'
C = DataFrame.close
mtm = C - REF(C, N)
MTMMA = MA(mtm, M)
DICT = {'MTM': mtm, 'MTMMA': MTMMA}
return pd.DataFrame(DICT)

例如:

1
2
# MTM指标
close_mtf = QA.QA_indicator_MTM(da.data, 12, 6)

KDJ指标

KDJ指标又叫随机指标,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。

简介

随机指标KDJ一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据MA线的方法来计算K值、D值和J值,并绘成曲线图来研判股票走势。

起源

KDJ指标最早起源于期货市场,由乔治·莱恩首创。随机指标KDJ最早以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的。不过KD指标只研判股票的超买超卖现象,在KDJ指标中这融合了移动平均线速度上的观念,形成来比较准确的买卖信号依据。在实践中,K线和D线配合J线组成KDJ指标来使用。KDJ指标在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时融合来动量的观念、强弱指标和移动平均线的一些优点。因此,能够比较迅速快捷、直观地研判行情,被广泛用于股市的中短期趋势分析,是期货市场和股票市场上最常用的技术分析工具。

指标原理

随机指标是以最高价、最低价和收盘价为基本数据进行计算的,得出K值、D值和J值分别在指标的坐标上形成的一个点,连接无数个这样的点位,就形成一个完整的、能反映价格波动趋势的KDJ指标。它主要是利用价格波动的真实波动来反映价格最低价和收盘价之间的关系,同时也融合了动量的观念、强弱指标和移动平均线的一些优点,因此能够比较迅速、快捷、直观地研判行情。由于KDJ本质上是一个随机波动的概念,故其对于掌握中短期行情走势比较准确。

计算方法

KDJ的计算方法比较复杂,首先需要计算周期(n日、n周等)的RSV值,即未成熟随机指标值,然后再计算K值、D值和J值等。

以计算n日的KDJ为例:
$$
RSV_n = \frac{C_n - L_n}{H_n - L_n} \times 100
$$
公式中$C_n$为第n日的收盘价,$H_n$为n日内的最高价,$L_n$为n日内的最低价。
其次,计算K值和D值:
$$
当日K值 = \frac{2}{3} \times 前一日K值 + \frac{1}{3} \times 当日RSV \\
当日D值 = \frac{2}{3} \times 前一日D值 + \frac{1}{3} \times 当日K值
$$
若前一日无K值或D值,则用50代替。
最后计算J值:
$$
J值 = 3 \times 当日K值 - 2 \times 当日D值
$$

使用技巧

  1. K值和D值永远介于0到100之间。D大于80时,行情呈现超买现象。D小于20,行情呈现超卖现象。
  2. 上涨趋势中,K值大于D值,K线向上突破D线时,为买进信号。下跌趋势中,K值小于D值,K线向下突破D线时为卖出信号。
  3. KD指标不仅能反映出市场的超买超卖程度,还能通过交叉突破发出买卖信号。
  4. KD指标不适于发行量小、交易不活跃的股票,但是KD指标对于大盘和热门大盘股有极高准确性。
  5. 当随机指标与股价出现背离时,一般为转势的信号。
  6. 当K值和D值上升或者下跌的速度减弱,倾斜趋势趋于平缓是短期转势的预警信号。

QA框架中计算KDJ

QA框架中计算KDJ的代码为:

1
2
3
4
5
6
7
8
9
10
11
def QA_indicator_KDJ(DataFrame, N=9, M1=3, M2=3):
C = DataFrame['close']
H = DataFrame['high']
L = DataFrame['low']

RSV = (C - LLV(L, N)) / (HHV(H, N) - LLV(L, N)) * 100
K = SMA(RSV, M1)
D = SMA(K, M2)
J = 3 * K - 2 * D
DICT = {'KDJ_K': K, 'KDJ_D': D, 'KDJ_J': J}
return pd.DataFrame(DICT)

里面K和D值的计算是直接简单移动平均。
例如:

1
kdj = QA.QA_indicator_KDJ(da.data, 9, 3, 3)

MFI指标

MFI指标即资金流量指标。实际上是将RSI加以修改后,演变而来。RSI以成交价为计算基础;MFI指标则结合价和量,将其列入综合考虑的范围。可以说,MFI指标是成交量的RSI指标。

计算方法

  1. 首先计算一定期限内(一般为14天)每天的典型价格TYP,它是最高价、最低价和收盘价三者的均值。也有给收盘价更大全值再计算三者均值的算法。
  2. 如果当天的典型价格大于昨天的则定义为流入,反之为流出,流入流出金额为典型价格乘以当天交易量。这样把14天每天的结果计算出来,然后再把流出额和流入额分别加总,得到14天内的流入总额和流出总额,接着前者除以后者,大于1则表示1到14天内的资金为流入,反之为流出。V1就是代表这个值。
  3. MFI就是在V1的基础上,为了更好地在坐标上显示出来,进行的数据处理。

买入信号

  1. MFI < 20时,代表资金短期冷却信号。但是必须等待MFI指标再度向上突破20时,才能确认资金转向。
  2. MFI在20左右水平时,出现一底比一底高,和股价背离的现象时,可视为中期反转上涨的讯号。
  3. MFI指标连续两次向上交叉其平均线时,视为买入信号(平均线一般设定为6天)。

卖出信号

  1. MFI > 80时,表示资金短期过热讯号,但是必须等待MFI再次向下跌破80时,才能确认资金转向。
  2. MFI在80左右的水平时,出现一顶比一顶低,和股价“背离”的现象时,可视为中期反转下跌的讯号。
  3. MFI连续两次向上交叉其平均线时,视为卖出讯号(平均线一般设定为6天)。

QA框架中计算MFI

QA框架中计算MFI的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def QA_indicator_MFI(DataFrame, N=14):
"""
资金指标
TYP := (HIGH + LOW + CLOSE)/3;
V1:=SUM(IF(TYP>REF(TYP,1),TYP*VOL,0),N)/SUM(IF(TYP<REF(TYP,1),TYP*VOL,0),N);
MFI:100-(100/(1+V1));
赋值: (最高价 + 最低价 + 收盘价)/3
V1赋值:如果TYP>1日前的TYP,返回TYP*成交量(手),否则返回0的N日累和/如果TYP<1日前的TYP,返回TYP*成交量(手),否则返回0的N日累和
输出资金流量指标:100-(100/(1+V1))
"""
C = DataFrame['close']
H = DataFrame['high']
L = DataFrame['low']
VOL = DataFrame['volume']
TYP = (C + H + L) / 3
V1 = SUM(IF(TYP > REF(TYP, 1), TYP * VOL, 0), N) / \
SUM(IF(TYP < REF(TYP, 1), TYP * VOL, 0), N)
mfi = 100 - (100 / (1 + V1))
DICT = {'MFI': mfi}
return pd.DataFrame(DICT)

例如:

1
mfi = QA.QA_indicator_MFI(da.data, 14)

ATR指标

均幅指标ATR是取一定时间周期内的股价波动幅度的移动平均值,主要用于研判买卖时机。

均幅指标是显示市场变化率的指标,由威尔德在《技术交易系统中的新概念》一书中首次提出。威尔德发现较高的ATR值常发生在市场的底部,并伴随恐慌性的抛盘。当其值较低时,则往往发生在合并以后的市场顶部。

由于惊恐购买所驱使的价格的剧烈下跌,这一指标在市场底部通常可以达到一个较高的价值。这一指标对于长期持续边幅移动的时段是非常典型的,这一情况通常发生在市场的顶部,或者在价格的巩固期间。平均波幅通道技术指标依据同样的原则,可以被解释为其他一些易变指数。根据这个指标来进行预测的原则可以表达为:该指标价值越高,趋势改变的可能性越高;该指标的价值越低,趋势的移动性就越弱。

一般来说,一段时期内的价格波动可以定义为这段时间内的最高价和最低价之间的差值,但该定义忽略了另一个事实:一个时间段到另一个时间段之间价格可能出现跳跃,从而使得一个时间段内的最低(高)价在前一个时间段的收盘价之上(下)。真实波动区间(True Range,TR)的想法即由此而来,被定义为以下三个值的最大者:最高价减最低价,最高价减前收盘价,最低价减前收盘价。威尔德推荐使用14天为时间段,并且给出了相应的波动率指标ATR计算公式:
$$
ATR_t = \frac{(N-1)\times ATR_{t-1} + TR_t}{N}
$$

式中N为窗口天数,如14或20等。

$$
TR_t = max \lbrack (high_t - low_t), abd(high_t - close_{t-1}), abs(low_t, close_{t-1}) \rbrack
$$

均幅指标一般不单独使用,应结合其他指标综合研判。

QA框架中计算ATR指标:

1
atr = QA.QA_indicator_ATR(da.data, 14)

数据框atr中包含ATR和TR指标。

SKDJ指标

慢速随机指标(SLOWKD或SKDJ)优化了KD指标,通过差值平均过滤了短期波动,使每次买卖点的趋势反应避免了不必要的失误。通常设为SLOWKD参数为(36,5)。

【应用法则】

  1. 筑底阶段:SKDJ在20以下多次的反复金叉后重新站在20以上,代表股票的筑底阶段完成,可以第一时间介入。
  2. 指标大于80时,回档几率大;指标小于20,反弹几率大。
  3. %K在20左右向上交叉%D时,视为买入信号。
  4. %K在80左右向下交叉%D时,视为卖出信号。
  5. SKDJ指标波动于50左右的任何讯号,其作用不大。

注意:运用SKDJ要遵守一个原则:SKDJ死叉的时候必须先出来。

QA框架中计算SKDJ:

1
skdj = QA.QA_indicator_SKDJ(da.data, 9, 3)

数据框skdj中包含了RSV、SKDJ_D、SKDJ_K三个变量。SKDJ指标中,代表慢速的K值其实就是KDJ指标中的D值,并且SKDJ指标中的K值就是其慢速K值的移动平均值。

计算函数代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def QA_indicator_SKDJ(DataFrame, N=9, M=3):
"""
1.指标>80 时,回档机率大;指标<20 时,反弹机率大;
2.K在20左右向上交叉D时,视为买进信号参考;
3.K在80左右向下交叉D时,视为卖出信号参考;
4.SKDJ波动于50左右的任何讯号,其作用不大。
"""
CLOSE = DataFrame['close']
LOWV = LLV(DataFrame['low'], N)
HIGHV = HHV(DataFrame['high'], N)
RSV = EMA((CLOSE - LOWV) / (HIGHV - LOWV) * 100, M)
K = EMA(RSV, M)
D = MA(K, M)
DICT = {'RSV': RSV, 'SKDJ_K': K, 'SKDJ_D': D}
return pd.DataFrame(DICT)

WR指标

威廉指标,由美国著名的投资家拉里·威廉于1973年在《How I made one million dollars last year trading commodities》中首先发表。利用“最后一周期”之最高价、最低价、收市价,计算当日收盘价所处“最后一周期”(过去一定时间,比如7天等)内的价格区间之相对百分位置,即依”当日收盘价
的摆动点,以兼具超买超卖和强弱分界的指标,其度量市场处于超买还是超卖状态,主要作用在于辅助其他指标确认短期买卖信号。

WR属于摆动类指标,又称威廉超买超卖指数、威廉超买超卖指标,为分析市场短线买卖走势的技术指标。

【QA框架中WR的计算函数】

1
2
3
4
5
6
7
8
9
def QA_indicator_WR(DataFrame, N, N1):
'威廉指标'
HIGH = DataFrame['high']
LOW = DataFrame['low']
CLOSE = DataFrame['close']
WR1 = 100 * (HHV(HIGH, N) - CLOSE) / (HHV(HIGH, N) - LLV(LOW, N))
WR2 = 100 * (HHV(HIGH, N1) - CLOSE) / (HHV(HIGH, N1) - LLV(LOW, N1))
DICT = {'WR1': WR1, 'WR2': WR2}
return pd.DataFrame(DICT)

WR1一般是10天的买卖强弱指标;
WR2一般是6天的买卖强弱指标;

【使用方法】
从WR的绝对值进行考虑:

  1. WR>80:处于超卖状态,行情即将见底,应当考虑买进;
  2. WR<20:处于超买状态,行情即将见顶,应当考虑卖出。

从WR的曲线形状考虑:

  1. WR进入高位后,一般要回头,如果股价继续下降就产生了背离,是买入信号。
  2. WR进入低位后,如果股价继续上升就产生了背离,是卖出信号。
  3. WR连续几次撞顶(底),局部形成双重或多重顶(底),是卖出(买进信号)。

【注意事项】

  1. 顶背离:当股价K线图上的股票走势一峰比一峰高,股价在一直向上涨,而WR指标图上的WR曲线的走势是在高位一峰比一峰高,这叫顶背离现象。顶背离现象一般是股价将要高位反转的信号,表明股价短期内即将下跌,是比较强烈的卖出信号。
  2. 底背离:当股价K线图上的股票走势一峰比一峰底,股价开始向下跌,而WR指标图上的WR曲线的走势是低位一底比一底低,这就叫底背离现象。底背离现象是股价将要低位反转的信号,表明股价短期内即将上涨,是比较强烈的买入信号。指标背离一般出现在强势行情中比较可靠。即股价在高位时,通常只需要出现一次顶背离的形态即可确认行情的顶部反转,而股价在低位时,一般要反复多次底背离后才能确认行情的底部反转。
  3. 当WR在20到80区间时,表明市场上多空暂时取得平衡,股价处于横盘整理之中,可考虑持币观望。
  4. 在具体的实战中,当威廉曲线向下突破20超买线而进入超买区时,表明股价进入强势拉升行情,这是提醒投资者要密切关注行情的未来走势,只有当WR曲线再次向上突破20线时,才为投资者提出警告,为投资者买卖决策提供重要参考。同样,当威廉曲线向上突破80超卖线而进入超卖区运行时,表明股价的强势下跌已经缓和,这也是提醒投资者可以为减仓作准备,而只有当WR曲线再次向下突破80线时,投资者才真正短线买入。

【QA框架中计算威廉指标】

1
wr = QA.QA_indicator_WR(da.data, 10, 6)

BIAS指标

乖离,指市场指数或收盘价于某条移动平均线价格之间的差距。
乖离率,又称偏离率。简称Y指,是通过计算市场指数或收盘价于某条移动平均线之间的差距百分比,以反映一定时期内价格与其MA偏离程度的指标,从而得出价格在剧烈波动时因剧烈波动时因偏离移动平均趋势而造成的回档或反弹的可能性,以及价格在正常范围波动范围内移动而形成继续原有势的可信度。

乖离率是用百分比来表示价格与MA间的偏离程度(差距率)。

乖离率曲线(BIAS)是将BIAS值连成线,得到一条以0值为横向中轴线值波动延伸的曲线。

$$
乖离率 = \frac{close_{today} - MA_N}{MA_N} \times 100%
$$

其中N一般取5,6,10,12,24,30和72。在实际运用中,短线使用6日乖离率较为有效,中线则放大为10日或12日。

QA框架中计算BIAS:

1
2
3
4
5
6
7
8
def QA_indicator_BIAS(DataFrame, N1, N2, N3):
'乖离率'
CLOSE = DataFrame['close']
BIAS1 = (CLOSE - MA(CLOSE, N1)) / MA(CLOSE, N1) * 100
BIAS2 = (CLOSE - MA(CLOSE, N2)) / MA(CLOSE, N2) * 100
BIAS3 = (CLOSE - MA(CLOSE, N3)) / MA(CLOSE, N3) * 100
DICT = {'BIAS1': BIAS1, 'BIAS2': BIAS2, 'BIAS3': BIAS3}
return pd.DataFrame(DICT)

例如,计算5,6,10天的乖离率:

1
bias = QA.QA_indicator_BIAS(da.data, 5, 6, 10)

RSI指标

相对强弱指数RSI是根据一定时期内上涨点数和涨跌点数之和的比率制作出的一种技术曲线。能够反映出市场在一定时期内的景气程度。由威尔斯·威尔德最早应用于期货买卖,后来人们发现在众多的图表分析技术中,强弱指标的理论和实践及其适合于股票市场的短线投资,于是被用于股票升跌的测量和分析中,该分析指标的设计是以三条线来反映价格走势的强弱,这种图形可以为投资者提供操作依据,非常适合做短线差价操作。

数学

RSI的原理简单来说是以数字计算的方法求出买卖双方的力量对比,譬如有100个人面对同一件商品竞相出价,商品价格必涨。相反,如果50个人以上争着卖出,价格自然下跌。

强弱指标力量认为,任何市价的大涨或大跌,均在0-100之间变动,根据常态分配,认为RSI值多在30-70之间变动,通常80甚至90时被认为市场已经达到超买状态,至此市场价格自然会回落调整。当价格跌至30以下即被认为是超卖状态,市价将出现反弹回升。

公式代码为:

1
2
3
4
5
6
7
8
9
def QA_indicator_RSI(DataFrame, N1=12, N2=26, N3=9):
'相对强弱指标RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;'
CLOSE = DataFrame['close']
LC = REF(CLOSE, 1)
RSI1 = SMA(MAX(CLOSE - LC, 0), N1) / SMA(ABS(CLOSE - LC), N1) * 100
RSI2 = SMA(MAX(CLOSE - LC, 0), N2) / SMA(ABS(CLOSE - LC), N2) * 100
RSI3 = SMA(MAX(CLOSE - LC, 0), N3) / SMA(ABS(CLOSE - LC), N3) * 100
DICT = {'RSI1': RSI1, 'RSI2': RSI2, 'RSI3': RSI3}
return pd.DataFrame(DICT)

五种用途

  1. 顶点及底点70及30通常为超卖超卖的信号;
  2. 分歧或背离,当市况创下新高(低)当RSI并不处于新高(低),这通常表明市场将出现反转。
  3. 支撑及阻力,RSI能显示支持及阻力位,有时比价格图更能清晰反映支持及阻力。
  4. 价格趋势形态与价格图相比,价格趋势形态如双顶及头肩在RSI上表现更清晰。
  5. 峰回路转。当RSI突破(超过前高或前低点)时,这可能表示价格将有突变与其它指标相同时,RSI需与其它指标配合使用,不能单独产生讯号,价格的确认是决定入市价位的关键。

QA框架中计算RSI

1
rsi = QA.QA_indicator_RSI(da.data, 12, 26, 9)

ADTM指标

动态买卖气指标。用开盘的向上波动幅度和向下波动幅度的距离差值来描述人气高低的指标。

计算公式

  1. 如果开盘价 <= 昨日开盘价,DTM = 0;
  2. 如果开盘价 > 昨日开盘价,DTM = Max[(最高价 - 开盘价), (开盘价 - 昨日开盘价)];
  3. 如果开盘价 >= 昨日开盘价,DBM = 0;
  4. 如果开盘价 < 昨日开盘价,DBM = Max[(开盘价 - 最低价), (开盘价 - 昨日开盘价)];
  5. STM = DTM在N日的和;
  6. SBM = DBM在N日的和;
  7. 如果STM > SBM,ADTM = (STM - SBM)/STM;
  8. 如果STM < SBM,ADTM = (STM - SBM)/SBM;
  9. 如果 STM = SBM,ADTM = 0;
  10. ADTMMA = ADTM的M日简单移动平均;
  11. 参数N设置为23,M设置为8日。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def QA_indicator_ADTM(DataFrame, N=23, M=8):
'动态买卖气指标'
HIGH = DataFrame.high
LOW = DataFrame.low
OPEN = DataFrame.open
DTM = IF(OPEN <= REF(OPEN, 1), 0, MAX(
(HIGH - OPEN), (OPEN - REF(OPEN, 1))))
DBM = IF(OPEN >= REF(OPEN, 1), 0, MAX((OPEN - LOW), (OPEN - REF(OPEN, 1))))
STM = SUM(DTM, N)
SBM = SUM(DBM, N)
ADTM1 = IF(STM > SBM, (STM - SBM) / STM,
IF(STM == SBM, 0, (STM - SBM) / SBM))
MAADTM = MA(ADTM1, M)
DICT = {'ADTM': ADTM1, 'MAADTM': MAADTM}
return pd.DataFrame(DICT)

应用法则

  1. ADTM在正负1之间波动;
  2. 低于-0.5时为低风险区,高于+0.5时为高风险区,需要注意风险;
  3. ADTM上穿ADTMMA时,买入股票;ADTM跌穿ADTMMA时,卖出股票。

实战使用:ADTM单独使用准确率往往偏低,更多情况必需经过其它指标过滤,例如使用CCI过滤ADTM后的准确率能提升到50%之上。

DDI指标

方向标准差指数,一般用于观察一段时间内股价相对于前一天向上波动和向下波动的比例,并对其进行移动平均分析,通过分析DDI柱状线,可以判断是买入信号还是卖出信号。

指标原理

观察一段时间内股价相对于前一天向上波动和向下波动的比例,并对其进行移动平均分析。

由红变绿(正变负),卖出信号;由绿变红,买入信号。

判读方法

  1. TR = (最高价 - 昨日最高价) 的绝对值与(最低价 - 昨日最低价)的绝对值两者之间的较大者。
  2. 如果 (最高阶 + 最低价) <= (昨日最高价 + 昨日最低价),DMZ = 0;
  3. 如果(最高价 + 最低价) > (昨日最高价 + 昨日最低价),DMZ = Max[|最高价- 昨日最高价|, |最低价 - 昨日最低价|];
  4. 如果(最高价 + 最低价) >= (昨日最高价 + 昨日最低价),DMF = 0;
  5. 如果(最高价 + 最低价) < (昨日最高价 + 昨日最低价),DMF = Max[|最高价 - 昨日最高价|, |最低价 - 昨日最低价|];
  6. DIZ = N个周期DMZ的和 / (N 个周期DMZ的和 + N个周期DMF的和)
  7. DIF = N个周期DMF的和 / (N个周期DMF的和 + N个周期DMZ的和)
  8. DDI = DIZ - DIF
  9. ADDI = DDI在一定周期内的加权平均
  10. AD = ADDI在一定周期内的简单移动平均
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def QA_indicator_DDI(DataFrame, N=13, N1=26, M=1, M1=5):
"""
'方向标准离差指数'
分析DDI柱状线,由红变绿(正变负),卖出信号参考;由绿变红,买入信号参考。
"""
H = DataFrame['high']
L = DataFrame['low']
DMZ = IF((H + L) <= (REF(H, 1) + REF(L, 1)), 0,
MAX(ABS(H - REF(H, 1)), ABS(L - REF(L, 1))))
DMF = IF((H + L) >= (REF(H, 1) + REF(L, 1)), 0,
MAX(ABS(H - REF(H, 1)), ABS(L - REF(L, 1))))
DIZ = SUM(DMZ, N) / (SUM(DMZ, N) + SUM(DMF, N))
DIF = SUM(DMF, N) / (SUM(DMF, N) + SUM(DMZ, N))
ddi = DIZ - DIF
ADDI = SMA(ddi, N1, M)
AD = MA(ADDI, M1)
DICT = {'DDI': ddi, 'ADDI': ADDI, 'AD': AD}
return pd.DataFrame(DICT)

CCI指标

顺势指标又叫CCI指标,是美国股市技术分析家唐纳德·兰伯特于20世纪80年代提出的,专门测量股价、外汇或者贵金属交易是否已超出常态分布范围。属于超买超卖指标中特殊的一种。波动于正无穷和负无穷之间。但是又不需要以0为中轴线,这一点也和波动于正无穷和负无穷的指标不同。

它最早用于期货市场的判断,后运用于股票市场的研判,并被广泛使用。与大多数单一利用股票的收盘价、开盘价、最高价或者最低价而发明出的各种技术指标不同,CCI指标是根据统计学原理,引进价格和固定期间的股价平均区间的偏离程度的概念,强调股价平均绝对偏差在股市技术分析中的重要性,是一种比较独特的技术指标。

它与其它超买超卖指标又有自己比较独特之处。像KDJ、W%R等大多数超买超卖型指标都有0-100的界限,因此他们对待一般常态行情的研判比较适用,而对于那些短期内暴涨暴跌的股票的价格走势时,就可能会发生钝化的现象。而CCI指标却是波动于正无穷和负无穷之间,因此不会出现指标钝化现象,这样有利于投资者更好地研判行情。特别是对于那些短期内暴涨暴跌的非常态行情。

指标用法

  1. 当CCI指标曲线在+100~-100线的常态区间运行时,CCI指标的参考意义不大,可以用KDJ等其它技术指标进行研判。
  2. 当CCI指标曲线从上向下突破+100线而重新进入常态区间时,表明市场价格的上涨阶段可能结束,将进入一个比较长时间的震荡整理阶段,应及时平多做空。
  3. 当CCI指标曲线从上向下突破-100而进入另一个非常态区间(超卖区间)时,表明市场价格的弱势状态已经形成,将进入一个比较长的寻底过程,可以持有空单等待更高利润。如果CCI指标曲线在超卖区运行了相当长的时间后开始掉头向上,表明价格的短期底部初步探明,可以少量减仓。CCI指标在超卖区运行的时间越长,确认短期的底部的准确度越高。
  4. CCI指标曲线从下向上突破-100而重新进入常态区间时,表明市场价格的探底阶段可能结束,有可能进入一个盘整阶段,可以逢底少量做多。
  5. CCI曲线从下向上突破+100线而进入非常态区间(超买区)时,表明市场价格已经脱离常态而进入强势状态,如果伴随较大的市场交投,应及时介入成功率将很大。
  6. CCI曲线从下向上突破+100线而进入非常态区间(超买区)后,只要CCI曲线一直朝上运行,表明价格依然保持强势可以继续持有待涨。但是,如果在远离+100线的地方开始掉头向下时,则表明市场价格的强势状态将可能难以维持,涨势可能转弱,应考虑卖出。如果前期的短期涨幅过高同时价格回落时交投活跃,则应该果断逢高卖出或做空。

CCI主要是在超买和超卖区域发生作用,对急涨急跌的行情检测性相对准确。非常适用于股票、外汇、贵金属等市场的短期操作。

CCI曲线的形状

CCI曲线出现的各种形状也是研判市场行情走势、决定买卖时机的一种分析方法。

  1. 当CCI曲线在远离+100线上方的高位时,如果CCI曲线的走势形成M头或者三重顶等顶部反转形态,可能预示这股价由强转弱,股价即将大跌,应及时卖出股票。如果股价的曲线也出现同样的形态更可确认,其涨跌幅可以用M头或者三重顶等形态的理论来研判。
  2. 当CCI曲线在远离-100线下方的低位时,如果CCI曲线的走势出现W底或者三重底反转形态,可能预示着股价由弱转强,股价即将反弹向上,可以逢低少量吸纳股票。如果股价曲线也出现同样的形态更可确认,其涨幅可以用W底或三重底形态理论来研判。
  3. CCI曲线的形态中M头和三重顶形态的准确性要大于W底和三重底。

计算方法

CCI也包括日CCI指标、周CCI指标、年CCI指标以及分钟CCI指标等多种类型。经常被用于股市研判的是日CCI指标和周CCI指标。虽然它们计算时取值有所不同,但基本方法一样。

1
2
3
4
5
6
7
8
9
10
11
12
def QA_indicator_CCI(DataFrame, N=14):
"""
TYP:=(HIGH+LOW+CLOSE)/3;
CCI:(TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));
"""
typ = (DataFrame['high'] + DataFrame['low'] + DataFrame['close']) / 3
cci = ((typ - MA(typ, N)) / (0.015 * AVEDEV(typ, N)))
a = 100
b = -100
return pd.DataFrame({
'CCI': cci, 'a': a, 'b': b
})

超买超卖

顾名思义,“超买”就是已经超出了买方的能力,买进股票的人数超出了一定的比例。那么根据反群众心理,这时候应该反向卖出股票。“超卖”则是代码卖方卖股票卖过了头,卖古朴的人数超过一定的比例时,反而应该买进股票。这是在一般常态行情下,经常最被总是的反市场、反群众理论。但是,如果行情是超乎寻常的强势,则超买超卖指标会突然失去反向,行情不停的持续前进,群众似乎失去了控制,对股价的这种脱序行为,CCI指标提供了不同角度的看法。

按照波浪理论,股价以5波的方式前进,而发展到第5波阶段时,无论是处于上涨波还是下跌波,都是行情波动最凶、最猛的时候,群众毫无理想的疯狂,股价在很短的时间内,加速度网站最大幅度的波动。

有些股民想在最安全的范围内买卖股票。但是对于部分的冒险性、赌性较强的股民而言,他们宁可在高风险的环境下,介入速度快、利润大的市场。这是市场经常是一翻两瞪眼,下赌注要快,逃得也要快!

绝路航标

通达信定义:
$$
VAR_1 = \frac{(close - LLV(low, 60))}{HHV(high, 60) - LLV(low, 60)} \times 80 \\
B = SMA(VAR_1, N, 1) \\
VAR_2 = SMA(B, M, 1) \\
绝路航标 = if(cross(B, VAR_2) and B < 40, 50, 0)
$$

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import QUANTAXIS as QA
def JLHB(data, m=7, n=5):
"""
通达信定义
VAR1:=(CLOSE-LLV(LOW,60))/(HHV(HIGH,60)-LLV(LOW,60))*80;
B:SMA(VAR1,N,1);
VAR2:SMA(B,M,1);
绝路航标:IF(CROSS(B,VAR2) AND B<40,50,0);
"""
var1 = (data['close'] - QA.LLV(data['low'], 60)) / \
(QA.HHV(data['high'], 60) - QA.LLV(data['low'], 60)) * 80
B = QA.SMA(var1, m)
var2 = QA.SMA(B, n)
if QA.CROSS(B,var2) and B[-1]<40:
return 1
else:
return 0

QA.QA_fetch_stock_day_adv('000001','2017-01-01','2017-05-31').to_qfq().add_func(JLHB) # 这个运行会出错

金叉死叉

DIF向上突破DEA,为买入信号;
DIF向下跌破DEA,为卖出信号。

1
2
3
4
5
6
7
8
9
10
11
def MACD_JCSC(df, short = 12, long = 26, m = 9):
close = df.close
diff = QA.EMA(close, short) - QA.EMA(close, long)
DEA = QA.EMA(DIFF, m)
MACD = 2 * (DIFF - DEA)
CROSS_JC = QA.CROSS(DIFF, DEA)
CROSS_SC = QA.CROSS(DEA, DIFF)
ZERO = 0
return pd.DataFrame({'DIFF': DIFF, 'DEA': DEA, 'MACD': MACD, 'CROSS_JC': CROSS_JC, 'CROSS_SC': CROSS_SC, 'ZERO': ZERO})

QA.QA_fetch_stock_day_adv('000001', '2017-01-01', '2017-05-31').to_qfq().add_func(MACD_JCSC)

QA的指标类——QA_DataStruct_Indicators()

指标类可以直接加载计算出来的指标。

1
2
3
da = QA.QA_fetch_stock_day_adv('000001', '2000-01-01', '2018-09-20')
ind = da.add_func(QA.QA_indicator_WR, 1, 2)
inc = QA.QA_DataStruct_Indicators(ind)

上面的代码中,ind是数据框,inc是结构体。

获取某一段时间的某个股票的指标序列

把指标变成结构体之后就可以用操作结构体的方法操作数据了。

1
inc.get_timerange('2017-01-07', '2017-01-22', '000001')

获取一个股票的指标序列

1
2
3
4
da = QA.QA_fetch_stock_day_adv(['000001', '000002'], 'all')
ind = da.add_func(QA.QA_indicator_WR, 1, 2)
inc = QA.QA_DataStruct_Indicators(ind)
inc.get_code('000002')

获取某个股票某个时刻的某个指标的值

1
2
3
4
inc.get_indicator('2018-01-12', '000001', 'WR1')
Out[58]:
WR1 48.148148
Name: (2018-01-12 00:00:00, 000001), dtype: float64

获取某个时刻某个股票的所有指标值

1
2
3
4
5
inc.get_indicator('2018-01-12', '000001')
Out[59]:
WR1 48.148148
WR2 31.707317
Name: (2018-01-12 00:00:00, 000001), dtype: float64
# Python

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了659.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×