K 线与指标

固定窗口、周期、DataFrame 字段与计算示例。

本页目录

创建固定长度窗口

bars = api.watch_kline(symbol, "1m", data_length=200)

仅支持期货。周期只能是 "1m"、"5m"、"10m"、"15m"、"30m"、"1h"、"4h"、"1d"。长度为 1–10000 的整数,默认 200;True 不算有效长度。

创建时同步初始化历史窗口,初始化可能等待网络;初始化整体上限为 180 秒。相同合约、周期、长度复用同一句柄,不同长度返回不同句柄。期权没有 K 线能力,误传期权可能得到空数据。

DataFrame 结构

固定列为 timestamp、trading_day、open、high、low、close、volume、turnover、open_interest。

timestamp 表示周期结束的 Unix 毫秒,日线使用交易日北京时间零点。最后一行可能仍在形成。不要将日线时间戳解释为交易所收盘瞬间。

frame = bars.data()
print(frame.attrs["symbol"], frame.attrs["period"])
if not frame.empty:
    print(frame.iloc[-1].to_dict())

计算移动平均

import math

bars = api.watch_kline(symbol, "1m", data_length=200)
while api.wait_update():
    if bars.is_changing(["timestamp", "close"]):
        frame = bars.data()
        if len(frame) >= 20:
            frame["ma20"] = frame["close"].rolling(20).mean()
            latest = frame["ma20"].iloc[-1]
            if math.isfinite(latest):
                print("当前末行 MA20", latest)

指标添加在当前快照,不会进入 SDK 的下一份快照。需要每次重新计算或由业务层维护指标状态。rolling(20) 数据不足时产生 NaN,程序需要检查。

监测窗口推进

bars.is_changing("timestamp") 可检测时间列变化;bars.is_changing("close") 可检测价格变化。同一周期的末行可多次变化。面向已完成 K 线的策略必须额外建立完成判定和去重规则,不能把每次收盘价变化都当成新周期。

接口说明依据 exsdk 1.1.2 的公开接口与本地使用指南整理。