技术指标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。