tqsdk.tafunc - 序列计算函数¶
Functions
|
获取series的绝对值 |
|
平均绝对偏差: 求series在n周期内的平均绝对偏差 |
|
最近一次条件 cond 成立到当前的周期数 |
|
统计n周期中满足cond条件的个数 |
|
向下穿越: 表示当a从上方向下穿b,成立返回1, 否则返回0 |
|
向上穿越: 表当a从下方向上穿过b, 成立返回1, 否则返回0 |
|
指数加权移动平均线: 求series序列n周期的指数加权移动平均 |
|
线性加权移动平均: 求series值的n周期线性加权移动平均 (也称WMA) |
|
判断n个周期内, 是否一直满足cond条件, 若满足则值为1, 不满足为0 |
|
判断n个周期内, 是否有满足cond的条件, 若满足则值为1, 不满足为0 |
|
调和平均值: 求series在n个周期内的调和平均值 |
|
求series在n个周期内的最高值 |
|
求在n个周期内的最小值 |
|
简单移动平均线: 求series序列n周期的简单移动平均 |
|
获取series1和series2中的最大值 |
|
中位数: 求series在n个周期内居于中间的数值 |
|
获取series1和series2中的最小值 |
|
自然数幂方和 |
|
简单移动: 求series序列位移n个周期的结果 |
|
扩展指数加权移动平均: 求series序列n周期的扩展指数加权移动平均 |
|
标准差: 求series序列每n个周期的标准差 |
|
将传入的时间转换为 datetime.datetime 类型 |
|
将传入的时间转换为int类型的纳秒级时间戳 |
|
将传入的时间转换为int类型的秒级时间戳 |
|
将传入的时间转换为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型 |
|
三角移动平均: 求series的n周期三角移动平均值 |
-
tqsdk.tafunc.
ref
(series, n)¶ 简单移动: 求series序列位移n个周期的结果
注意: 当n为0, 函数返回原序列; 当n为有效值但当前的series序列元素个数不足 n + 1 个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 位移周期
- Returns:
pandas.Series: 位移后的序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) pre_close = tafunc.ref(klines.close, 1) # 将收盘价序列右移一位, 得到昨收盘序列 change = klines.close - pre_close # 收盘价序列 - 昨收盘序列, 得到涨跌序列 print(list(change))
-
tqsdk.tafunc.
std
(series, n)¶ 标准差: 求series序列每n个周期的标准差
注意: n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 标准差的周期
- Returns:
pandas.Series: 标准差序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) std = tafunc.std(klines.close, 5) # 收盘价序列每5项计算一个标准差 print(list(std))
-
tqsdk.tafunc.
ma
(series, n)¶ 简单移动平均线: 求series序列n周期的简单移动平均
计算公式: ma(x, 5) = (x(1) + x(2) + x(3) + x(4) + x(5)) / 5
注意: 1. 简单移动平均线将设定周期内的值取平均值, 其中各元素的权重都相等 2. n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 简单移动平均值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) ma = tafunc.ma(klines.close, 5) print(list(ma))
-
tqsdk.tafunc.
sma
(series, n, m)¶ 扩展指数加权移动平均: 求series序列n周期的扩展指数加权移动平均
计算公式: sma(x, n, m) = sma(x, n, m).shift(1) * (n - m) / n + x(n) * m / n
注意: n必须大于m
- Args:
series (pandas.Series): 数据序列
n (int): 周期
m (int): 权重
- Returns:
pandas.Series: 扩展指数加权移动平均序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) sma = tafunc.sma(klines.close, 5, 2) # 收盘价序列每5项计算一个扩展指数加权移动平均值 print(list(sma))
-
tqsdk.tafunc.
ema
(series, n)¶ 指数加权移动平均线: 求series序列n周期的指数加权移动平均
- 计算公式:
ema(x, n) = 2 * x / (n + 1) + (n - 1) * ema(x, n).shift(1) / (n + 1)
- 注意:
n 需大于等于1
对距离当前较近的k线赋予了较大的权重
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 指数加权移动平均线序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) ema = tafunc.ema(klines.close, 5) print(list(ema))
-
tqsdk.tafunc.
ema2
(series, n)¶ 线性加权移动平均: 求series值的n周期线性加权移动平均 (也称WMA)
- 计算公式:
ema2(x, n) = [n * x(0) + (n - 1) * x(1) + (x - 2) * x(2) + ... + 1 * x(n - 1)] / [n + (n - 1) + (n - 2) + ... + 1]
注意: 当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 线性加权移动平均线序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) ema2 = tafunc.ema2(klines.close, 5) # 求收盘价在5个周期的线性加权移动平均值 print(list(ema2))
-
tqsdk.tafunc.
crossup
(a, b)¶ 向上穿越: 表当a从下方向上穿过b, 成立返回1, 否则返回0
- Args:
a (pandas.Series): 数据序列1
b (pandas.Series): 数据序列2
- Returns:
pandas.Series: 上穿标志序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) crossup = tafunc.crossup(tafunc.ma(klines.close, 5), tafunc.ma(klines.close, 10)) print(list(crossup))
-
tqsdk.tafunc.
crossdown
(a, b)¶ 向下穿越: 表示当a从上方向下穿b,成立返回1, 否则返回0
- Args:
a (pandas.Series): 数据序列1
b (pandas.Series): 数据序列2
- Returns:
pandas.Series: 下穿标志序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) crossdown = tafunc.crossdown(tafunc.ma(klines.close, 5), tafunc.ma(klines.close, 10)) print(list(crossdown))
-
tqsdk.tafunc.
count
(cond, n)¶ 统计n周期中满足cond条件的个数
注意: 如果n为0, 则从第一个有效值开始统计
- Args:
cond (array_like): 条件
n (int): 周期
- Returns:
pandas.Series: 统计值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) # 统计从申请到的行情数据以来到当前这段时间内, 5周期均线上穿10周期均线的次数: count = tafunc.count(tafunc.crossup(tafunc.ma(klines.close, 5), tafunc.ma(klines.close, 10)), 0) print(list(count))
-
tqsdk.tafunc.
trma
(series, n)¶ 三角移动平均: 求series的n周期三角移动平均值
- 计算方法:
三角移动平均线公式, 是采用算数移动平均, 并且对第一个移动平均线再一次应用算数移动平均
注意: n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 三角移动平均值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) trma = tafunc.trma(klines.close, 10) print(list(trma))
-
tqsdk.tafunc.
harmean
(series, n)¶ 调和平均值: 求series在n个周期内的调和平均值
- 计算方法:
harmean(x, 5) = 1 / [(1 / x(1) + 1 / x(2) + 1 / x(3) + 1 / x(4) + 1 / x(5)) / 5]
注意: 1. 调和平均值与倒数的简单平均值互为倒数 2. 当n为0, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 调和平均值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) harmean = tafunc.harmean(klines.close, 5) # 求5周期收盘价的调和平均值 print(list(harmean))
-
tqsdk.tafunc.
numpow
(series, n, m)¶ 自然数幂方和
- 计算方法:
numpow(x, n, m) = n ^ m * x + (n - 1) ^ m * x.shift(1) + (n - 2) ^ m * x.shift(2) + ... + 2 ^ m * x.shift(n - 2) + 1 ^ m * x.shift(n - 1)
注意: 当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 自然数
m (int): 实数
- Returns:
pandas.Series: 幂方和序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) numpow = tafunc.numpow(klines.close, 5, 2) print(list(numpow))
-
tqsdk.tafunc.
abs
(series)¶ 获取series的绝对值
注意: 正数的绝对值是它本身, 负数的绝对值是它的相反数, 0的绝对值还是0
- Args:
series (pandas.Series): 数据序列
- Returns:
pandas.Series: 绝对值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) abs = tafunc.abs(klines.close) print(list(abs))
-
tqsdk.tafunc.
min
(series1, series2)¶ 获取series1和series2中的最小值
- Args:
series1 (pandas.Series): 数据序列1
series2 (pandas.Series): 数据序列2
- Returns:
pandas.Series: 最小值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) min = tafunc.min(klines.close, klines.open) print(list(min))
-
tqsdk.tafunc.
max
(series1, series2)¶ 获取series1和series2中的最大值
- Args:
series1 (pandas.Series): 数据序列1
series2 (pandas.Series): 数据序列2
- Returns:
pandas.Series: 最大值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) max = tafunc.max(klines.close, klines.open) print(list(max))
-
tqsdk.tafunc.
median
(series, n)¶ 中位数: 求series在n个周期内居于中间的数值
- 注意:
当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
对n个周期内所有series排序后, 若n为奇数, 则选择第(n + 1) / 2个为中位数, 若n为偶数, 则中位数是(n / 2)以及(n / 2 + 1)的平均数
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 中位数序列
Example:
例1: # 假设最近3日的收盘价为2727, 2754, 2748, 那么当前 median(df["close"], 3) 的返回值是2748 median3 = tafunc.median(df["close"], 3) 例2: # 假设最近4日的开盘价为2752, 2743, 2730, 2728, 那么当前 median(df["open"], 4) 的返回值是2736.5 median4 = tafunc.median(df["open"], 4)
-
tqsdk.tafunc.
exist
(cond, n)¶ 判断n个周期内, 是否有满足cond的条件, 若满足则值为1, 不满足为0
- Args:
cond (array_like): 条件
n (int): 周期
- Returns:
pandas.Series: 判断结果序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) # 判断4个周期中是否存在收盘价大于前一个周期的最高价, 存在返回1, 不存在则返回0 exist = tafunc.exist(klines.close > klines.high.shift(1), 4) print(list(exist))
-
tqsdk.tafunc.
every
(cond, n)¶ 判断n个周期内, 是否一直满足cond条件, 若满足则值为1, 不满足为0
- Args:
cond (array_like): 条件
n (int): 周期
- Returns:
pandas.Series: 判断结果序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) # 判断在4周期内, 3周期的简单移动平均是否一直大于5周期的简单移动平均 every = tafunc.every(tafunc.ma(klines.close, 3) > tafunc.ma(klines.close, 5), 4) print(list(every))
-
tqsdk.tafunc.
hhv
(series, n)¶ 求series在n个周期内的最高值
注意: n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 最高值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) hhv = tafunc.hhv(klines.high, 4) # 求4个周期最高价的最大值, 即4周期高点(包含当前k线) print(list(hhv))
-
tqsdk.tafunc.
llv
(series, n)¶ 求在n个周期内的最小值
注意: n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 最小值序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) llv = tafunc.llv(klines.low, 5) # 求5根k线最低点(包含当前k线) print(list(llv))
-
tqsdk.tafunc.
avedev
(series, n)¶ 平均绝对偏差: 求series在n周期内的平均绝对偏差
- 算法:
计算avedev(df["close"],3)在最近一根K线上的值: (abs(df["close"] - (df["close"] + df["close"].shift(1) + df["close"].shift(2)) / 3) + abs( df["close"].shift(1) - (df["close"] + df["close"].shift(1) + df["close"].shift(2)) / 3) + abs( df["close"].shift(2) - (df["close"] + df["close"].shift(1) + df["close"].shift(2)) / 3)) / 3
注意: n为0的情况下, 或当n为有效值但当前的series序列元素个数不足n个, 函数返回 NaN 序列
- Args:
series (pandas.Series): 数据序列
n (int): 周期
- Returns:
pandas.Series: 平均绝对偏差序列
Example:
from tqsdk import TqApi, TqSim, tafunc api = TqApi(TqSim()) klines = api.get_kline_serial("CFFEX.IF1908", 24 * 60 * 60) # 计算收盘价在5周期内的平均绝对偏差, 表示5个周期内每个周期的收盘价与5周期收盘价的平均值的差的绝对值的平均值, 判断收盘价与其均值的偏离程度: avedev = tafunc.avedev(klines.close, 5) print(list(avedev))
-
tqsdk.tafunc.
time_to_ns_timestamp
(input_time)¶ 将传入的时间转换为int类型的纳秒级时间戳
- Args:
- input_time (str/ int/ float/ datetime.datetime): 需要转换的时间:
str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000)
int: int 类型的纳秒级或秒级时间戳
float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
datetime.datetime: datetime 模块中的 datetime 类型时间
- Returns:
int : int 类型的纳秒级时间戳
Example:
from tqsdk.tafunc import time_to_ns_timestamp print(time_to_ns_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型转为纳秒时间戳 print(time_to_ns_timestamp(1571103122)) # 将秒级转为纳秒时间戳 print(time_to_ns_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为纳秒时间戳
-
tqsdk.tafunc.
time_to_s_timestamp
(input_time)¶ 将传入的时间转换为int类型的秒级时间戳
- Args:
- input_time (str/ int/ float/ datetime.datetime): 需要转换的时间:
str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000)
int: int 类型的纳秒级或秒级时间戳
float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
datetime.datetime: datetime 模块中的 datetime 类型时间
- Returns:
int : int类型的秒级时间戳
Example:
from tqsdk.tafunc import time_to_s_timestamp print(time_to_s_timestamp(1.57103449e+18)) # 将纳秒级时间戳转为秒级时间戳 print(time_to_s_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为秒级时间戳 print(time_to_s_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为秒时间戳
-
tqsdk.tafunc.
time_to_str
(input_time)¶ 将传入的时间转换为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型
- Args:
input_time (int/ float/ datetime.datetime): 需要转换的时间:
int: int 类型的纳秒级或秒级时间戳
float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
datetime.datetime: datetime 模块中的 datetime 类型时间
- Returns:
str : %Y-%m-%d %H:%M:%S.%f 格式的 str 类型时间
Example:
from tqsdk.tafunc import time_to_str print(time_to_str(1.57103449e+18)) # 将纳秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间 print(time_to_str(1571103122)) # 将秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间 print(time_to_str(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间
-
tqsdk.tafunc.
time_to_datetime
(input_time)¶ 将传入的时间转换为 datetime.datetime 类型
- Args:
input_time (int/ float/ str): 需要转换的时间:
int: int 类型的纳秒级或秒级时间戳
float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
str: str 类型的时间,如Quote行情时间的 datetime 字段 (eg. 2019-10-14 14:26:01.000000)
- Returns:
datetime.datetime : datetime 模块中的 datetime 类型时间
Example:
from tqsdk.tafunc import time_to_datetime print(time_to_datetime(1.57103449e+18)) # 将纳秒级时间戳转为datetime.datetime时间 print(time_to_datetime(1571103122)) # 将秒级时间戳转为datetime.datetime时间 print(time_to_datetime("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为datetime.datetime时间
-
tqsdk.tafunc.
barlast
(cond)¶ 最近一次条件 cond 成立到当前的周期数 (如果 cond 长度为0或cond中无 True,函数返回-1)
请注意:为了便于获取更多的 barlast 数据及统一函数返回值类型,在1.5.2版 tqsdk 将会把这个函数返回值改为一个 pandas.Series 类型的序列!
- Args:
cond (pandas.Series): 条件序列(序列中的值为 True 或 False)
- Returns:
int : 周期数
Example:
from tqsdk import TqApi from tqsdk.tafunc import barlast api = TqApi() klines = api.get_kline_serial("SHFE.cu2001", 10) # print(list(klines.close)) # print(list(klines.open)) # print(list(klines.close > klines.open)) n = barlast(klines.close > klines.open) # 计算最后一次k线收盘价大于开盘价到当前的周期数 print(n) api.close()