技术指标ta

TqSdk 内置了 60 多个经典技术指标,封装在 tqsdk.ta 模块中。和通达信公式里调函数不同,TqSdk 的指标函数直接接收 pandas DataFrame(即 get_kline_serial 返回的 K 线数据),返回的也是 DataFrame。此外还有 tqsdk.tafunc 提供更底层的序列计算函数。

ta 模块 vs tafunc 模块

模块特点使用场景
tqsdk.ta高级封装,接收整个 DataFrame直接算 MACD / BOLL 等完整指标
tqsdk.tafunc底层序列函数,接收 Series自定义指标、单列计算

日常策略优先用 tqsdk.ta,简洁直观。

均线类指标

from tqsdk import TqApi, TqAuth
from tqsdk.ta import MA, EMA, SMA, BOLL

api = TqApi(auth=TqAuth("快期账户", "账户密码"))
klines = api.get_kline_serial("SHFE.rb2410", 60, 200)

# 简单移动平均线,返回 DataFrame,列名 "ma"
ma5 = MA(klines, 5)
ma20 = MA(klines, 20)

# 指数移动平均线
ema20 = EMA(klines, 20)

# 布林带,返回 mid / top / bottom 三列
boll = BOLL(klines, 26, 2)
函数含义返回列
MA(df, n)简单移动平均ma
EMA(df, n)指数移动平均ema
SMA(df, n, m)扩展指数加权平均sma
EMA2(df, n)线性加权移动平均(WMA)ema2
TRMA(df, n)三角移动平均trma
BOLL(df, n, p)布林带mid, top, bottom

动量类指标

MACD

from tqsdk.ta import MACD

macd = MACD(klines, 12, 26, 9)
# macd 包含三列:diff(快线)、dea(慢线)、bar(柱状)
dif = macd["diff"]
dea = macd["dea"]

用法:diff 上穿 dea(金叉)偏多,下穿(死叉)偏空。

KDJ

from tqsdk.ta import KDJ

kdj = KDJ(klines, 9, 3, 3)
# 返回 k, d, j 三列

J 值最敏感,K 上穿 D 为金叉;>80 超买,<20 超卖。

RSI

from tqsdk.ta import RSI

rsi = RSI(klines, 14)
# 返回 rsi 列,范围 0~100

70 偏强,<30 偏弱。

其他动量指标

函数含义
CCI(df, n)顺势指标,±100 为趋势边界
WR(df, n)威廉指标
DMI(df, n, m)趋向指标(+DI / -DI / ADX)
ROC(df, n, m)变动速率
MTM(df, n, n1)动量指标
SAR(df, n, step, max)抛物线转向指标

波动与成交量类

from tqsdk.ta import ATR, OBV

atr = ATR(klines, 14)    # 返回 tr(真实波幅)和 atr(平均真实波幅)
obv = OBV(klines)        # 能量潮,返回 obv 列
函数含义
ATR(df, n)平均真实波幅,常用于止损
OBV(df)能量潮(量价累积)
VR(df, n)容量比率
MFI(df, n)资金流量指标
CJL(df)成交量
OPI(df)持仓量

tafunc:底层序列函数

当 ta 模块不够用时,用 tqsdk.tafunc 自己拼:

from tqsdk.tafunc import ma, ema, crossup, crossdown, barlast, count

close = klines.close

# 基础均线(接收 Series)
ma5 = ma(close, 5)
ma20 = ma(close, 20)

# 金叉/死叉判断,返回 0/1 序列
golden_cross = crossup(ma5, ma20)
death_cross = crossdown(ma5, ma20)

# 距上次条件成立的 K 线数
bars_since_golden = barlast(golden_cross)
函数含义
ma(series, n)简单移动平均
ema(series, n)指数移动平均
crossup(a, b)a 上穿 b,返回 0/1 序列
crossdown(a, b)a 下穿 b
barlast(cond)距上次条件成立的周期数
count(cond, n)过去 n 周期条件满足次数
max / min / std / var统计函数

完整示例:双均线 + MACD 策略

from tqsdk import TqApi, TqAuth, TargetPosTask
from tqsdk.ta import MA, MACD

api = TqApi(auth=TqAuth("快期账户", "账户密码"))
klines = api.get_kline_serial("SHFE.rb2410", 60, 200)
target_pos = TargetPosTask(api, "SHFE.rb2410")

while True:
    api.wait_update()
    if api.is_changing(klines.iloc[-1], "datetime"):
        ma5 = MA(klines, 5)
        ma20 = MA(klines, 20)
        macd = MACD(klines, 12, 26, 9)

        # 双均线多头 + MACD 金叉
        if ma5["ma"].iloc[-1] > ma20["ma"].iloc[-1] and \
           macd["diff"].iloc[-1] > macd["dea"].iloc[-1]:
            target_pos.set_target_volume(1)
        elif ma5["ma"].iloc[-1] < ma20["ma"].iloc[-1]:
            target_pos.set_target_volume(0)

小结

  • tqsdk.ta 提供 60+ 内置指标,接收 DataFrame,返回 DataFrame。
  • tqsdk.tafunc 提供底层序列函数,用于自定义计算。
  • 均线看趋势,MACD/KDJ/RSI 看动量强弱,BOLL/ATR 看波动区间。
  • 指标结果是序列,取 .iloc[-1] 拿最新值。

策略写好了,下一步就是用历史数据验证它: 回测 TqBacktester