hikyuu2/docs/source/indicator/indicator.rst
2023-09-07 01:01:18 +08:00

945 lines
23 KiB
ReStructuredText
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. py:currentmodule:: hikyuu.indicator
.. highlight:: python
内建技术指标
============
.. py:function:: ABS([data])
求绝对值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: ACOS([data])
反余弦值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: AD(kdata)
累积/派发线
:param KData kdata: k线数据
:rtype: Indicator
.. py:function:: ADVANCE([query=Query(-100), market='SH', stk_type='constant.STOCKTYPE_A'])
上涨家数。当存在指定上下文且 ignore_context 为 false 时,将忽略 query, market, stk_type 参数。
:param Query query: 查询条件
:param str market: 所属市场,等于 "" 时,获取所有市场
:param int stk_type: 证券类型, 大于 constant.STOCKTYPE_TMP 时,获取所有类型证券
:param bool ignore_context: 是否忽略上下文。忽略时,强制使用 query, market, stk_type 参数。
:rtype: Indicator
.. py:function:: ALIGN(data, ref):
按指定的参考日期对齐
:param Indicator data: 输入数据
:param ref: 指定做为日期参考的 DatetimeList、Indicator 或 KData
:retype: Indicator
.. py:function:: AMA([data, n=10, fast_n=2, slow_n=30])
佩里.J 考夫曼Perry J.Kaufman自适应移动平均 [BOOK1]_
:param Indicator data: 输入数据
:param int n: 计算均值的周期窗口必须为大于2的整数
:param int fast_n: 对应快速周期N
:param int slow_n: 对应慢速EMA线的N值
:rtype: Indicator
* result(0): AMA
* result(1): ER
.. py:function:: AMO([data])
获取成交金额包装KData的成交金额成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: ASIN([data])
反正弦值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: ATAN([data])
反正切值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: ATR([data, n=14])
平均真实波幅(Average True Range)
:param Indicator data 待计算的源数据
:param int n: 计算均值的周期窗口必须为大于1的整数
:rtype: Indicator
.. py:function:: AVEDEV(data[, n=22])
平均绝对偏差求X的N日平均绝对偏差
:param Indicator data: 输入数据
:param int|Indicator n: 时间窗口
:rtype: Indicator
.. py:function:: BACKSET([data, n=2])
向前赋值将当前位置到若干周期前的数据设为1。
用法BACKSET(X,N),X非0,则将当前位置到N周期前的数值设为1。
例如BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0
:param Indicator data: 输入数据
:param int n|Indicator|IndParam: N周期
:rtype: Indicator
.. py:function:: BARSCOUNT([data])
有效值周期数, 求总的周期数。
用法BARSCOUNT(X)第一个有效数据到当前的天数。
例如BARSCOUNT(CLOSE)对于日线数据取得上市以来总交易日数对于1分钟线取得当日交易分钟数。
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: BARSLAST([data])
上一次条件成立位置 上一次条件成立到当前的周期数。
用法BARSLAST(X): 上一次 X 不为 0 到现在的天数。
例如BARSLAST(CLOSE/REF(CLOSE,1)>=1.1) 表示上一个涨停板到当前的周期数
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: BARSSINCE([data])
第一个条件成立位置到当前的周期数。
用法BARSSINCE(X):第一次X不为0到现在的天数。
例如BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: BETWEEN(a, b, c)
介于(介于两个数之间)
用法BETWEEN(A,B,C)表示A处于B和C之间时返回1否则返回0
例如BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间
:param Indicator a: A
:param Indicator b: B
:param Indicator c: C
:rtype: Indicator
.. py:function:: CLOSE([data])
获取收盘价包装KData的收盘价成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: CAPITAL(kdata)
获取流通盘(单位:万股),同 LIUTONGPAN
:param KData kdata: k线数据
:rtype: Indicator
.. py:function:: CEIL([data])
:py:func:`CEILING`
.. py:function:: CEILING([data])
向上舍入(向数值增大方向舍入)取整
用法CEILING(A)返回沿A数值增大方向最接近的整数
例如CEILING(12.3)求得13CEILING(-3.5)求得-3
:param data: 输入数据
:rtype: Indicator
.. py::function:: CORR(ind1, ind2, n)
计算 ind1 和 ind2 的样本相关系数与协方差。返回中存在两个结果,第一个为相关系数,第二个为协方差。
:param Indicator ind1: 指标1
:param Indicator ind2: 指标2
:param int n: 按指定 n 的长度计算两个 ind 直接数据相关系数
:rtype: Indicator
.. py:function:: COS([data])
余弦值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: COST(k[, x=10.0])
成本分布
用法COST(k, X) 表示X%获利盘的价格是多少
例如COST(k, 10),表示10%获利盘的价格是多少即有10%的持仓量在该价格以下其余90%在该价格以上,为套牢盘 该函数仅对日线分析周期有效
:param KData k: 关联的K线数据
:param float x: x%获利价格, 0~100
:rtype: Indicator
.. py:function:: COUNT([data, n=20])
统计满足条件的周期数。
用法COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。
例如COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数
:param Indicator data: 条件
:param int|Indicator|IndParam n: 周期
:rtype: Indicator
.. py:function:: CROSS(x, y)
交叉函数
:param x: 变量或常量,判断交叉的第一条线
:param y: 变量或常量,判断交叉的第二条线
:rtype: Indicator
.. py:function:: CVAL([data, value=0.0, discard=0])
data 为 Indicator 实例,创建和 data 等长的常量指标其值和为value抛弃长度discard和data一样
:param Indicator data: Indicator实例
:param float value: 常数值
:param int discard: 抛弃数量
:rtype: Indicator
.. py:function:: DECLINE([query=Query(-100), market='SH', stk_type='constant.STOCKTYPE_A'])
下跌家数。当存在指定上下文且 ignore_context 为 false 时,将忽略 query, market, stk_type 参数。
:param Query query: 查询条件
:param str market: 所属市场,等于 "" 时,获取所有市场
:param int stk_type: 证券类型, 大于 constant.STOCKTYPE_TMP 时,获取所有类型证券
:param bool ignore_context: 是否忽略上下文。忽略时,强制使用 query, market, stk_type 参数。
:rtype: Indicator
.. py:function:: DEVSQ([data, n=10])
数据偏差平方和求X的N日数据偏差平方和
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: DIFF([data])
差分指标即data[i] - data[i-1]
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: DMA(ind, a)
动态移动平均
用法DMA(X,A),求X的动态移动平均。
算法若Y=DMA(X,A) 则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值。
例如DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价
:param Indicator ind: 输入数据
:param Indicator a: 动态系数
:rtype: Indicator
.. py:function:: DROPNA([data])
删除 nan 值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: DOWNNDAY(data[, n=3])
连跌周期数, DOWNNDAY(CLOSE,M)表示连涨M个周期
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: EMA([data, n=22])
指数移动平均线(Exponential Moving Average)
:param data: 输入数据
:param int|Indciator|IndParam n: 计算均值的周期窗口必须为大于0的整数
:rtype: Indicator
.. py:function:: EVERY([data, n=20])
一直存在
用法EVERY (X,N) 表示条件X在N周期一直存在
例如EVERY(CLOSE>OPEN,10) 表示前10日内一直是阳线
:param data: 输入数据
:param int|Indicator|IndParam n: 计算均值的周期窗口必须为大于0的整数
:rtype: Indicator
.. py:function:: EXIST([data, n=20])
存在, EXIST(X,N) 表示条件X在N周期有存在
:param data: 输入数据
:param int|Indicator|IndParam n: 计算均值的周期窗口必须为大于0的整数
:rtype: Indicator
.. py:function:: EXP([data])
EXP(X)为e的X次幂
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: FILTER([data, n=5])
信号过滤, 过滤连续出现的信号。
用法FILTER(X,N): X 满足条件后,删除其后 N 周期内的数据置为 0。
例如FILTER(CLOSE>OPEN,5) 查找阳线5 天内再次出现的阳线不被记录在内。
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 过滤周期
:rtype: Indicator
.. py:function:: FLOOR([data])
向下舍入(向数值减小方向舍入)取整
用法FLOOR(A)返回沿A数值减小方向最接近的整数
例如FLOOR(12.3)求得12
:param data: 输入数据
:rtype: Indicator
.. py:function:: HHV([data, n=20])
N日内最高价N=0则从第一个有效值开始。
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: N日时间窗口
:rtype: Indicator
.. py:function:: HHVBARS([data, n=20])
上一高点位置 求上一高点到当前的周期数。
用法HHVBARS(X,N):求N周期内X最高值到当前周期数N=0表示从第一个有效值开始统计
例如HHVBARS(HIGH,0)求得历史新高到到当前的周期数
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: N日时间窗口
:rtype: Indicator
.. py:function:: HIGH([data])
获取最高价包装KData的最高价成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: HSL(kdata)
获取换手率,等于 VOL(k) / CAPITAL(k)
:param KData kdata: k线数据
:rtype: Indicator
.. py:function:: IF(x, a, b)
条件函数, 根据条件求不同的值。
用法IF(X,A,B)若X不为0则返回A,否则返回B
例如IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值
:param Indicator x: 条件指标
:param Indicator a: 待选指标 a
:param Indicator b: 待选指标 b
:rtype: Indicator
.. py:function:: INTPART([data])
取整(绝对值减小取整,即取得数据的整数部分)
:param data: 输入数据
:rtype: Indicator
.. py:function:: KDATA([data])
包装KData成Indicator用于其他指标计算
:param data: KData 或 具有6个返回结果的Indicator如KDATA生成的Indicator
:rtype: Indicator
.. py:function:: KDATA_PART([data, kpart])
根据字符串选择返回指标KDATA/OPEN/HIGH/LOW/CLOSE/AMO/VOL如:KDATA_PART("CLOSE")等同于CLOSE()
:param data: 输入数据KData 或 Indicator
:param string kpart: KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL
:rtype: Indicator
.. py:function:: KDJ(kdata[, n=9, m12=3, m2=3])
经典 KDJ 随机指标
:param KData kdata: 关联的K线数据
:param int n:
:param int m1:
:param int m2:
:return: k, d, j
.. py:function:: LIUTONGPAN(kdata)
获取流通盘(单位:万股),同 CAPITAL
:param KData kdata: k线数据
:rtype: Indicator
.. py:function:: LAST([data, m=10, n=5])
区间存在。
用法LAST (X,M,N) 表示条件 X 在前 M 周期到前 N 周期存在。
例如LAST(CLOSE>OPEN,10,5) 表示从前10日到前5日内一直阳线。
:param data: 输入数据
:param int m: m周期
:param int n: n周期
:rtype: Indicator
.. py:function:: LLV([data, n=20])
N日内最低价N=0则从第一个有效值开始。
:param data: 输入数据
:param int|Indicator|IndParam n: N日时间窗口
:rtype: Indicator
.. py:function:: LLVBARS([data, n=20])
上一低点位置 求上一低点到当前的周期数。
用法LLVBARS(X,N):求N周期内X最低值到当前周期数N=0表示从第一个有效值开始统计
例如LLVBARS(HIGH,20)求得20日最低点到当前的周期数
:param data: 输入数据
:param int|Indicator|IndParam n: N日时间窗口
:rtype: Indicator
.. py:function:: LN([data])
求自然对数, LN(X)以e为底的对数
:param data: 输入数据
:rtype: Indicator
.. py:function:: LOG([data])
以10为底的对数
:param data: 输入数据
:rtype: Indicator
.. py:function:: LONGCROSS(a, b[, n=3])
两条线维持一定周期后交叉
用法LONGCROSS(A,B,N)表示A在N周期内都小于B本周期从下方向上穿过B时返 回1否则返回0
例如LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉
:param Indicator a:
:param Indicator b:
:param int n:
:rtype: Indicator
.. py:function:: LOW([data])
获取最低价包装KData的最低价成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: MA([data, n=22])
简单移动平均
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: MACD([data, n1=12, n2=26, n3=9])
平滑异同移动平均线
:param Indicator data: 输入数据
:param int n1: 短期EMA时间窗
:param int n2: 长期EMA时间窗
:param int n3: 短期EMA-长期EMAEMA平滑时间窗
:rtype: 具有三个结果集的 Indicator
* result(0): MACD_BARMACD直柱即MACD快线MACD慢线
* result(1): DIFF: 快线,即短期EMA-长期EMA
* result(2): DEA: 慢线即快线的n3周期EMA平滑
.. py:function:: MAX(ind1, ind2)
求最大值, MAX(A,B)返回A和B中的较大值。
:param Indicator ind1: A
:param Indicator ind2: B
:rtype: Indicator
.. py:function:: MIN(ind1, ind2)
求最小值, MIN(A,B)返回A和B中的较小值。
:param Indicator ind1: A
:param Indicator ind2: B
:rtype: Indicator
.. py:function:: MOD(ind1, ind2)
取整后求模。该函数仅为兼容通达信。实际上,指标求模可直接使用 % 操作符
用法MOD(A,B)返回A对B求模
例如MOD(26,10) 返回 6
:param Indicator ind1:
:param Indicator ind2:
:rtype: Indicator
.. py:function:: NDAY(x, y[, n=3])
连大, NDAY(X,Y,N)表示条件X>Y持续存在N个周期
:param Indicator x:
:param Indicator y:
:param int n: 时间窗口
:rtype: Indicator
.. py:function:: NOT([data])
求逻辑非。NOT(X)返回非X,即当X=0时返回1否则返回0。
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: OPEN([data])
获取开盘价包装KData的开盘价成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: POW(data, n)
乘幂
用法POW(A,B)返回A的B次幂
例如POW(CLOSE,3)求得收盘价的3次方
:param data: 输入数据
:param int|Indicator|IndParam n:
:rtype: Indicator
.. py:function:: PRICELIST(data[, result_index=0, discard=0])
将 list、tuple、Indicator 转化为普通的 Indicator
:param data: 输入数据,可以为 list、tuple、Indicator
:param int result_index: 当data为Indicator实例时指示Indicator的第几个结果集
:param int discard: 在 data 为 Indicator类型时无效。表示前端抛弃的数据点数抛弃的值使用 constant.null_price 填充
:rtype: Indicator
.. py:function:: REF([data, n])
向前引用 (即右移),引用若干周期前的数据。
用法REF(XA) 引用A周期前的X值。
:param Indicator data: 输入数据
:param int n: 引用n周期前的值即右移n位
:rtype: Indicator
.. py:function:: REVERSE([data])
求相反数REVERSE(X)返回-X
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: ROC([data, n=10])
变动率指标: ((price / prevPrice)-1)*100
:param data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: ROCP([data, n=10])
变动率指标: (price - prevPrice) / prevPrice
:param data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: ROCR([data, n=10])
变动率指标: (price / prevPrice)
:param data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: ROCR100([data, n=10])
变动率指标: (price / prevPrice) * 100
:param data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: ROUND([data, ndigits=2])
四舍五入
:param data: 输入数据
:param int ndigits: 保留的小数点后位数
:rtype: Indicator
.. py:function:: ROUNDDOWN([data, ndigits=2])
向下截取如10.1截取后为10
:param data: 输入数据
:param int ndigits: 保留的小数点后位数
:rtype: Indicator
.. py:function:: ROUNDUP([data, ndigits=2])
向上截取如10.1截取后为11
:param data: 输入数据
:param int ndigits: 保留的小数点后位数
:rtype: Indicator
.. py:function:: RSI(kdata=None, N1=6, N2=12, N3=24)
相对强弱指标
:param KData kdata: 关联的K线数据
:param int N1: 参数N1
:param int N2: 参数N1
:param int N3: 参数N1
:return: rsi1, rsi2, rsi3
.. py:function:: SAFTYLOSS([data, n1=10, n2=3, p=2.0])
亚历山大 艾尔德安全地带止损线,参见 [BOOK2]_
计算说明在回溯周期内一般为10到20天将所有向下穿越的长度相加除以向下穿越的次数得到噪音均值即回溯期内所有最低价低于前一日最低价的长度除以次数并用今日最低价减去前日噪音均值乘以一个倍数得到该止损线。为了抵消波动并且保证止损线的上移在上述结果的基础上再取起N日一般为3天内的最高值
:param Indicator data: 输入数据
:param int n1: 计算平均噪音的回溯时间窗口
:param int n2: 对初步止损线去n2日内的最高值
:param float p: 噪音系数
:rtype: Indicator
.. py:function:: SIN([data])
正弦值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: SGN([data])
求符号值, SGN(X),当 X>0, X=0, X<0分别返回 1, 0, -1。
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: SLICE(data, start, end, result_index=0)
获取某指标中指定范围 [start, end) 的数据,生成新的指标
:param Indicator|PriceList data: 输入数据
:param int start: 起始位置
:param int end: 终止位置(不包含本身)
:param int result_index: 原输入数据中的结果集
.. py:function:: SMA([data, n=22, m=2])
求移动平均
用法若Y=SMA(X,N,M) 则 Y=[M*X+(N-M)*Y')/N,其中Y'表示上一周期Y值
:param Indicator data: 输入数据
:param int n: 时间窗口
:param float m: 系数
:rtype: Indicator
.. py:function:: SQRT([data])
开平方
用法SQRT(X)为X的平方根
例如SQRT(CLOSE)收盘价的平方根
:param data: 输入数据
:rtype: Indicator
.. py:function:: STD([data, n=10])
计算N周期内样本标准差
:param Indicator data: 输入数据
:param int n|Indicator|IndParam: 时间窗口
:rtype: Indicator
.. py:function:: STDEV([data, n=10])
计算N周期内样本标准差
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: STDP([data, n=10])
总体标准差STDP(X,N)为X的N日总体标准差
:param data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: SUM([data, n=20])
求总和。SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: SUMBARS([data,] a)
累加到指定周期数, 向前累加到指定值到现在的周期数
用法SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数
例如SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数
:param Indicator data: 输入数据
:param float|Indicator|IndParam a: 指定累加和
:rtype: Indicator
.. py:function:: TAN([data])
正切值
:param Indicator data: 输入数据
:rtype: Indicator
.. py:function:: TIMELINE([k])
分时价格数据
:param KData k: 上下文
:rtype: Indicator
.. py:function:: TIMELINEVOL([k])
分时成交量数据
:param KData k: 上下文
:rtype: Indicator
.. py:function:: UPNDAY(data[, n=3])
连涨周期数, UPNDAY(CLOSE,M)表示连涨M个周期
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: VAR([data, n=10])
估算样本方差, VAR(X,N)为X的N日估算样本方差
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: VARP([data, n=10])
总体样本方差, VARP(X,N)为X的N日总体样本方差
:param Indicator data: 输入数据
:param int|Indicator|IndParam n: 时间窗口
:rtype: Indicator
.. py:function:: VIGOR([kdata, n=2])
亚历山大.艾尔德力度指数 [BOOK2]_
计算公式:(收盘价今-收盘价昨)*成交量今
:param KData data: 输入数据
:param int n: EMA平滑窗口
:rtype: Indicator
.. py:function:: VOL([data])
获取成交量包装KData的成交量成Indicator
:param data: 输入数据KData 或 Indicator
:rtype: Indicator
.. py:function:: WEAVE(ind1, ind2)
将ind1和ind2的结果组合在一起放在一个Indicator中。如ind = WEAVE(ind1, ind2), 则此时ind包含多个结果按ind1、ind2的顺序存放。
:param Indicator ind1: 指标1
:param Indicator ind2: 指标2
:rtype: Indicator