playbook/docs/tsl/modules/pytsl_api.md

60 KiB
Raw Blame History

天软 pyTSL 接口使用说明

文档类型:模块 API 事实页 是否可直接用于生成代码:是,但真实账号、密码、服务地址、配置文件路径和权限范围必须来自项目上下文 遇到不确定时:index.md、项目自身部署文档、官方 pyTSL 接口文档

本页整理 pyTSL 官方 Python SDK 的可调用接口。它负责告诉智能体“pyTSL 有哪些类、函数、参数和返回结构”,不负责提供真实凭证、项目账号来源、服务权限或业务数据口径。

智能体 pyTSL 决策规则

  • 用户要“用 Python 调 TSL / 执行 TSL 代码 / 调天软函数 / 查行情 / 并发或异步取数”时,优先使用本页。
  • 用户只是要执行一段 TSL 并马上拿结果,默认使用 pyTSL.Client.exec()
  • 用户要调用服务器上已有 TSL 函数,默认使用 pyTSL.Client.call()
  • 用户要按证券、周期、开始时间、结束时间取标准行情字段,默认使用 pyTSL.Client.query()
  • 用户要一次性提交很多独立任务,先考虑 pyTSL.Batch;不要把大量循环直接写成频繁登录、退出。
  • 用户明确要求 asyncio才使用 pyTSL.AsyncClientpyTSL.async_util
  • 不要发明真实账号、密码、服务地址、代理、配置文件路径、服务节点、字段名或业务函数名。
  • 不要把登录脚本、临时验证脚本或私有凭证写进生成代码;示例只能使用占位值或从项目配置读取。

安装与支持范围

包与导入

项目 事实
安装包名 tspytsl
导入模块名 pyTSL
在线安装 pip install tspytsl
升级 pip install tspytsl -U
离线安装 下载对应 .whl 后执行 pip install 文件名.whl
手动安装 解压对应平台的 .pyd.so,放入 Python 的 site-packages 或项目目录

Python 与平台

  • pyTSL 支持 Python 3.6+。
  • 官方文档截至 2025-10-13 列出 Python 3.6 到 3.14 的 Windows、Linux x86_64、Linux arm64、MacOS x86_64 支持。
  • MacOS arm64 从 Python 3.8 到 3.14 支持Python 3.6 和 3.7 不支持。
  • Windows 需要确认已安装 VS2019 C++ 运行时库;其他系统不需要这一步。

最小同步链路

优先写成“一次登录,多次交互,最后退出”。logout() 后再次调用 Client 方法可能触发自动重新登录,频繁登录退出可能占用多个登录数。

import pyTSL
from datetime import datetime

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
try:
    if c.login() == 0:
        raise RuntimeError(c.last_error())

    r = c.exec("return close();", stock="SZ000002", time=datetime(2024, 7, 30))
    if r.error():
        raise RuntimeError(r.message())

    value = r.value()
finally:
    c.logout()

pyTSL.Client

同步客户端。构造一个 Client 会占用一个登录数。

构造函数:账号参数方式

签名:

pyTSL.Client(user, password, ip, port, proxy_ip=None, proxy_port=None, proxy_user=None, proxy_password=None)
参数位置 参数名 必填 接收类型 说明
1 user str 天软账号
2 password str 天软账号密码;支持用客户端工具生成的加密密码字符串
3 ip str 天软服务器机群地址
4 port int 天软服务器访问端口
5 proxy_ip str 代理服务器地址
6 proxy_port int 代理服务器端口
7 proxy_user str 代理服务器验证账号
8 proxy_password str 代理服务器验证密码

常见服务器:

服务器 ip port 默认服务节点
深圳服务器 "tsl.tinysoft.com.cn" 443444 "正式版"
武汉服务器 "wh.tinysoft.com.cn" 443444 "Default Service"
深圳新节点服务器 "sznew.tinysoft.com.cn" 4433 "Default Service"

构造函数ini 文件方式

签名:

pyTSL.Client(ini_file)
参数位置 参数名 必填 接收类型 说明
1 ini_file str 连接服务器信息 .ini 文件的绝对路径

ini 文件字段:

user=
password=
ip=
port=
proxy_user=
proxy_password=
proxy_ip=
proxy_port=

路径含中文并报找不到文件时,可把路径按 GBK 编码后传入。

Client 方法总表

方法 签名 返回 用途
login login() bool 登录天软服务器;成功 1,失败 0
last_error last_error() list 最近一次错误,结构为 [错误代码, 错误信息]
logout logout() int 断开连接;成功 0
exec exec(code, **kwargs) TSResultValue 执行 TSL 代码串
call call(funcname, *args, **kwargs) TSResultValue 调用 TSL 函数
query query(**kwargs) TSResultValue 提取行情数据
list_bgrun list_bgrun() list 列出委托执行任务
stop_bgrun stop_bgrun(handle) int 停止指定委托执行任务;成功 1
admin admin(**kwargs) str 执行天软客户端任务管理命令
set_callback set_callback(function) 未说明 设置 rdo2 回调函数
default_service default_service(service) str 设置或返回默认服务节点
server_list server_list() list 返回服务节点列表
download_list download_list(type, timeout=0) list 下载指定类型列表
download download(type, key, ver=0, timeout=0) list 下载指定关键字内容
upload upload(type, key, data, timeout=0) list 上传数据至指定关键字
remove remove(type, key, timeout=0) list 删除指定关键字内容
is_logined is_logined() bool 已登录返回 1,未登录返回 0
is_closed is_closed() bool 已断开返回 1,未断开返回 0

exec(code, **kwargs)

执行 TSL 代码串。结果通过 TSResultValue 读取。

参数位置 参数名 必填 接收类型 说明
1 code str 要执行的 TSL 代码串
2 **kwargs 见下表 执行上下文属性

call(funcname, *args, **kwargs)

调用 TSL 函数。*args 会自动转换常见 Python 类型到 TSL 类型。

参数位置 参数名 必填 接收类型 说明
1 funcname str 函数名
2 *args float / int / bool / str / bytes / list / dict / tuple / pandas.DataFrame / numpy.ndarray / 日期时间类型 传给 TSL 函数的位置参数
3 **kwargs 见下表 执行上下文属性,可通过 code 传入临时函数定义

Python 到 TSL 的自动转换:

Python 类型 TSL 类型
float / numpy.float32 / numpy.float64 / datetime / numpy.datetime64 real / tdatetime
bool / int / numpy.int32 / numpy.int64 int
str / bytes str
list / dict / tuple / pandas.DataFrame / numpy.ndarray array

exec / call 共享 kwargs

参数名 必填 接收类型 默认值 说明
stock str None 当前股票代码,如 "SZ000002"
cycle str "日线" 当前周期
time datetime / int / float / str 今天 当前时间,如 datetime(2019, 10, 1)43739.020191001"2019-10-01 14:03:01"
rate int 0 复权方式:0 不复权,1 比例复权,2 复杂复权
rateday datetime / int / float / str 0 复权基准日:0 最后交易日,-1 上市日,其他值为指定基准日
precision int -1 浮点数精度
viewpoint datetime / int / float / str 0 仿真时点
code str None 临时定义函数代码段,不必先保存到服务器
service str 由登录服务器决定 指定执行服务节点
timeout int None 超时,单位毫秒;None 表示无超时时限
bgrun int 0 委托执行;1 表示委托执行
resultname str None exec 支持;bgrun=1 时用于指定委托保存的结果集名称
reportmode int -1 报表数据规则
emptymode int 0 空记录模式

query(**kwargs)

提取行情数据。适合标准证券、周期、时间区间、字段查询。

参数位置 参数名 必填 接收类型 说明
1 **kwargs 见下表 查询属性,必须包含 stockcyclebegin_timeend_time
参数名 必填 接收类型 默认值 说明
stock str / 一维数组 None 当前股票代码;可指定多只股票
cycle str "日线" 当前周期
begin_time datetime / int / float / str None 数据开始时间
end_time datetime / int / float / str None 数据结束时间
fields str / tuple / list 所有字段 查询字段;字符串用逗号分隔
rate int 0 复权方式:0 不复权,1 比例复权,2 复杂复权
rateday datetime / int / float / str 0 复权基准日
precision int -1 浮点数精度
viewpoint datetime / int / float / str 0 仿真时点
service str 由登录服务器决定 指定执行服务节点
timeout int None 超时,单位毫秒
cyclefilter int 0 周期过滤器以及集合竞价分离器

委托、任务管理和服务节点方法

list_bgrun()

参数位置 参数名 必填 接收类型 说明
不接收参数

返回 ["+OK", [委托任务1], ...]。委托任务结构为 [handle, 执行的函数名, 开始执行时间, 已运行时间]

stop_bgrun(handle)

参数位置 参数名 必填 接收类型 说明
1 handle float 委托任务编号

返回整数,成功为 1

admin(**kwargs)

参数位置 参数名 必填 接收类型 说明
1 **kwargs str 天软客户端任务管理命令,如 "oa""ou"

返回对应指令的查询信息。

set_callback(function)

参数位置 参数名 必填 接收类型 说明
1 function Python 可调用对象 设置 rdo2 回调函数

rdo2 callback(...) 调用时会回到 Python 函数;不要把已经通过 register_proc 注册过的函数再当作该回调。

default_service(service)

参数位置 参数名 必填 接收类型 说明
1 service str 为空时返回当前服务节点;非空时设置当前服务节点

返回字符串,内容为服务节点。

server_list()

参数位置 参数名 必填 接收类型 说明
不接收参数

返回服务节点列表。

下载、上传和删除

类型取值

类型值 可用于 说明
0x2001 download_list / download 系统板块
0x2002 download_list / download / upload / remove 用户板块
0x5001 download_list / download 系统基本面表描述
0x6001 download_list / download / upload / remove 用户函数
0x6002 download_list / download 共享函数
0x6003 download_list / download 系统公用函数
0x6004 download_list / download 系统函数
0x8001 download_list / download / upload / remove 用户数据表

download_list(type, timeout=0)

参数位置 参数名 必填 接收类型 说明
1 type int 指定类型
2 timeout int 超时,单位毫秒;默认 0 表示无超时限制

返回长度为 2 的列表。无错误返回 [0, 结果列表],有错误返回 [错误代码, 错误信息]。结果列表中的单项结构为 [关键字, 版本, 修改时间]

download(type, key, ver=0, timeout=0)

参数位置 参数名 必填 接收类型 说明
1 type int 指定类型
2 key str 关键字,如函数名、板块名
3 ver int 关键字版本;默认 0 表示最新版本
4 timeout int 超时,单位毫秒;默认 0 表示无超时限制

无错误返回 [0, 结果],有错误返回 [错误代码, 错误信息]。结果结构包含:

说明
"data" 关键字内容TSL 流格式,可用 pyTSL.DecodeStream() 转换
"LastModified" 版本
"LastTime" 修改时间

upload(type, key, data, timeout=0)

参数位置 参数名 必填 接收类型 说明
1 type int 只支持 0x20020x60010x8001
2 key str 关键字,如函数名、板块名、用户数据名
3 data Any 上传至关键字的数据
4 timeout int 超时,单位毫秒;默认 0 表示无超时限制

无错误返回 [0, 结果],有错误返回 [错误代码, 错误信息]

remove(type, key, timeout=0)

参数位置 参数名 必填 接收类型 说明
1 type int 只支持 0x20020x60010x8001
2 key str 关键字,如函数名、用户数据名
3 timeout int 超时,单位毫秒;默认 0 表示无超时限制

无错误返回 [0, 结果],有错误返回 [错误代码, 错误信息]

pyTSL.AsyncClient

异步客户端,适用于 Python asyncio。与 Client 一样会占用登录数;异步任务数量受账号并发数限制,普通账号常见并发数为 5应保留资源。

构造方式同 Client

pyTSL.AsyncClient("user", "password", "tsl.tinysoft.com.cn", 443)
pyTSL.AsyncClient("E:\\my.ini")

也支持空构造后复用已有 Client

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
ac = pyTSL.AsyncClient()
ac.c = c
方法 签名 返回 参数来源
login login() bool 无参数;成功 1,失败 0
logout logout() int 无参数;成功 0
exec exec(code, **kwargs) TSResultValue Client.exec
call call(funcname, *args, **kwargs) TSResultValue Client.call
query query(**kwargs) TSResultValue Client.query
admin admin(**kwargs) str Client.admin
download_list download_list(type, timeout=0) list Client.download_list
download download(type, key, ver=0, timeout=0) list Client.download
upload upload(type, key, data, timeout=0) list Client.upload
remove remove(type, key, timeout=0) list Client.remove
task_list task_list() list 返回异步任务列表
task_cancel task_cancel(task) int 取消异步任务;成功 1,失败 0

最小异步示例:

import asyncio
import pyTSL
from datetime import datetime

async def main():
    c = pyTSL.AsyncClient("user", "password", "tsl.tinysoft.com.cn", 443)
    try:
        if await c.login() == 0:
            raise RuntimeError("login failed")
        r = await c.exec("return close();", stock="SZ000002", time=datetime(2024, 7, 30))
        if r.error():
            raise RuntimeError(r.message())
        return r.value()
    finally:
        await c.logout()

value = asyncio.run(main())

pyTSL.async_util

async_util 把普通 Client 的操作包装为可 await 的函数。所有函数第一个参数都是 pyTSL.Client 实例。

函数 签名 返回 对应同步方法
async_login async_login(c) bool c.login()
async_logout async_logout(c) int c.logout()
async_exec async_exec(c, code, **kwargs) TSResultValue c.exec(...)
async_call async_call(c, funcname, *args, **kwargs) TSResultValue c.call(...)
async_query async_query(c, **kwargs) TSResultValue c.query(...)
async_admin async_admin(c, **kwargs) str c.admin(...)
async_download_list async_download_list(c, type, timeout=0) list c.download_list(...)
async_download async_download(c, type, key, ver=0, timeout=0) list c.download(...)
async_upload async_upload(c, type, key, data, timeout=0) list c.upload(...)
async_remove async_remove(c, type, key, timeout=0) list c.remove(...)

pyTSL 全局方法

DatetimeToDouble(datetime, timezone=8)

参数位置 参数名 必填 接收类型 说明
1 datetime datetime.date / datetime.datetime Python 日期或日期时间
2 timezone int 时区,默认 8,即北京时间

返回 TSL 的时间类型 TDateTime,精度到毫秒。

DoubleToDatetime(t)

参数位置 参数名 必填 接收类型 说明
1 t TDateTime / float TSL 时间类型

返回 Python datetime,精度到毫秒。

DataFrameDiff(df1, df2)

参数位置 参数名 必填 接收类型 说明
1 df1 pandas.DataFrame 第一个 DataFrame结构需与 df2 一致
2 df2 pandas.DataFrame 第二个 DataFrame结构需与 df1 一致

返回两个 DataFrame 的不同数据以及行列位置。

EncodeStream(obj)

参数位置 参数名 必填 接收类型 说明
1 obj Python 变量 要转换的 Python 对象

返回 TSL 流格式。

DecodeStream(bytes, parse_date=False)

参数位置 参数名 必填 接收类型 说明
1 bytes TSL 流格式 要解码的 TSL 流
2 parse_date bool / list / tuple 是否把日期字段转成 Python datetime

parse_date 取值:

取值 说明
False 默认值不转换TSL TDateTime 保持实数
True 将 TSL TDateTime 或日期字符串转换为 Python datetime
["date"] / ("date",) 只转换指定字段

返回 Python 变量。

register_proc(funcname1, funcname2)

参数位置 参数名 必填 接收类型 说明
1 funcname1 str TSL 本地调用时使用的名称
2 funcname2 Python 可调用对象 Python 中定义的函数

将 Python 函数注册为天软函数,可在交互语句中用 rdo2 调用。importfileexportfile 已有默认实现,不要注册同名函数。

DataFrameToTSArray(DataFrame)

参数位置 参数名 必填 接收类型 说明
1 DataFrame pandas.DataFrame 要转换的 DataFrame

返回 TSL 的 array 数据结构。Client.call() 传入 DataFrame 时也会自动转换。

start_network_threads(n)

参数位置 参数名 必填 接收类型 说明
1 n int 额外启动的网络 IO 处理线程数

返回 None。pyTSL 默认有 1 个线程处理网络 IO多连接场景可以增加线程。

pyTSL.Batch

用于并发执行多个天软任务,只占用一个登录数。并发数受账号资源限制,不是越大越好;普通账号常见并发数为 5建议保守设置。

构造函数

签名:

pyTSL.Batch(parallel=5, reconnect=0)
参数位置 参数名 必填 接收类型 说明
1 parallel int 并行任务数,默认 5
2 reconnect int 是否重新连接;0 不重新连接,1 重新连接,默认 0

Batch 方法

方法 签名 返回 说明
exec exec(client, code, **kwargs) list 并发执行 TSL 代码串
call call(client, functionname, *args, **kwargs) list 并发调用 TSL 函数
query query(client, **kwargs) list 并发查询行情数据
__len__ __len__() int 通过 len(iter(batch)) 返回迭代器中剩余元素个数

Batch.exec() 参数:

参数位置 参数名 必填 接收类型 说明
1 client pyTSL.Client 已构造的客户端实例
2 code str TSL 代码串
3 **kwargs Client.exec 不支持委托执行;额外支持 key

Batch.call() 参数:

参数位置 参数名 必填 接收类型 说明
1 client pyTSL.Client 已构造的客户端实例
2 functionname str TSL 函数名
3 *args Client.call 传给 TSL 函数的位置参数
4 **kwargs Client.call 不支持委托执行;额外支持 key

Batch.query() 参数:

参数位置 参数名 必填 接收类型 说明
1 client pyTSL.Client 已构造的客户端实例
2 **kwargs Client.query 不支持委托执行;额外支持 key

key 参数:

参数名 必填 接收类型 默认值 说明
key str "" 标识每个任务;也可通过返回的 Task.key(str) 设置

返回结构:

情况 返回
提交成功 [1, Task对象]
提交失败 [0, 错误信息字符串]

结果读取:

for r in iter(batch):
    print(r.key(), r.value())

遍历时每个 rTSResultValue

pyTSL.Task

Batch 执行任务的标识。

方法 签名 返回 说明
id id() int 返回任务 ID
key key(str=None) str 有参数时设置关键字;无参数时返回当前关键字

TSResultValue

Client.exec()Client.call()Client.query()、异步方法和 Batch 迭代结果都会返回或产出 TSResultValue

方法 签名 返回 说明
error error() int 0 表示无错误,非 0 表示出错
message message() str 有错误时返回错误信息,无错误时为空
value value(parse_date=False) list / 标量 / 对象 返回结果值
dataframe dataframe() pandas.DataFrame 输出 DataFrame相当于把 value() 转表
stream stream() TSL 流格式 返回 TSL 流格式结果
stn stn() str 返回 TSL STN 格式结果
key key() str 返回任务关键字,配合 Batch 使用
cancelled cancelled() bool 返回任务是否被取消

value(parse_date=...)

取值 说明
False 默认值不转换日期TSL TDateTime 保持实数
True 将一维数组或单个值中的 TSL 日期时间、日期字符串转换为 Python datetimequery() 的默认行为是转换日期
["date1", "date2"] / ("date1", "date2") 对二维数组或表格中的指定日期字段做转换

推荐错误处理:

r = c.exec("return 1 + 1;")
if r.error():
    raise RuntimeError(r.message())
value = r.value()

pyTSL.Const

常量模块包含周期、行情字段、文件导入导出类型和文件读写类型。导入方式:

from pyTSL.Const import *

周期常量

常量 对应值
cy_month "月线"
cy_day "日线"
cy_week "周线"
cy_quarter "季线"
cy_halfyear "半年线"
cy_1m "1分钟线"
cy_2m "2分钟线"
cy_3m "3分钟线"
cy_5m "5分钟线"
cy_10m "10分钟线"
cy_15m "15分钟线"
cy_20m "20分钟线"
cy_30m "30分钟线"
cy_40m "40分钟线"
cy_60m "60分钟线"
cy_120m "120分钟线"
cy_detail "成交明细"
cy_halfs "半秒线"
cy_1s "1秒线"
cy_2s "2秒线"
cy_3s "3秒线"
cy_4s "4秒线"
cy_5s "5秒线"
cy_6s "6秒线"
cy_10s "10秒线"
cy_12s "12秒线"
cy_15s "15秒线"
cy_20s "20秒线"
cy_30s "30秒线"
cy_f30m "期货30分钟线"
cy_f60m "期货60分钟线"

行情字段常量

常量 字段值 说明
STOCKID "StockID" 股票代码
STOCKNAME "StockName" 股票名称
DATE "date" 当前时间
PRICE "price" 价格
CLOSE "close" 收盘价
OPEN "open" 开盘价
HIGH "high" 最高价
LOW "low" 最低价
VOL "vol" 成交量
AMOUNT "amount" 成交金额
CJBS "cjbs" 成交笔数
YCLOSE "yclose" 上次价
SYL1 "syl1" 市盈率 1
SYL2 "syl2" 市盈率 2
BUY1 "buy1" 买一价
BUY2 "buy2" 买二价
BUY3 "buy3" 买三价
BUY4 "buy4" 买四价
BUY5 "buy5" 买五价
SALE1 "sale1" 卖一价
SALE2 "sale2" 卖二价
SALE3 "sale3" 卖三价
SALE4 "sale4" 卖四价
SALE5 "sale5" 卖五价
BC1 "bc1" 买一量
BC2 "bc2" 买二量
BC3 "bc3" 买三量
BC4 "bc4" 买四量
BC5 "bc5" 买五量
SC1 "sc1" 卖一量
SC2 "sc2" 卖二量
SC3 "sc3" 卖三量
SC4 "sc4" 卖四量
SC5 "sc5" 卖五量
WB "wb" 委比
LB "lb" 量比
ZMM "zmm" 买卖标识
BUY_VOL "buy_vol" 主买量
BUY_AMOUNT "buy_amount" 主买金额
SALE_VOL "sale_vol" 主卖量
SALE_AMOUNT "sale_amount" 主卖金额
W_BUY "w_buy" 委买
W_SALE "w_sale" 委卖
SECTIONAL_BUY_VOL "sectional_buy_vol" 时点当日累计主买量
SECTIONAL_BUY_AMOUNT "sectional_buy_amount" 时点当日累计主买金额
SECTIONAL_SALE_VOL "sectional_sale_vol" 时点当日累计主卖量
SECTIONAL_SALE_AMOUNT "sectional_sale_amount" 时点当日累计主卖金额
SECTIONAL_W_BUY "sectional_w_buy" 时点当日累计委买
SECTIONAL_W_SALE "sectional_w_sale" 时点当日累计委卖
SECTIONAL_YCLOSE "sectional_yclose" 前日收盘
SECTIONAL_OPEN "sectional_open" 时点当日开盘
SECTIONAL_HIGH "sectional_high" 时点当日最高
SECTIONAL_LOW "sectional_low" 时点当日最低
SECTIONAL_VOL "sectional_vol" 时点当日累计成交量
SECTIONAL_AMOUNT "sectional_amount" 时点当日累计成交金额
SECTIONAL_CJBS "sectional_cjbs" 时点当日累计成交笔数
SECTIONAL_WB "sectional_wb" 时点当日累计委比

文件导入导出类型常量

常量 说明
ftCSV 0 逗号分割文件类型
ftXLS 1 Excel 文件类型
ftStream 2 天软对象流文件类型
ftString 3 天软对象字符串文件类型
ftADO 4 ADO 文件类型
ftXML 5 XML 文件类型
ftXLS2 6 支持多表头的 Excel 文件类型
ftXLS3 7 Excel 文件类型
ftDBF 8 DBF 文件类型

文件读写类型常量

常量 说明
rwByte 0 字节流读写类型
rwInt 1 整数流读写类型
rwReal 2 实数流读写类型
rwStr 3 字符串流读写类型
rwObj 4 对象流读写类型
rwRaw 5 原始读写类型
rwBinary 6 二进制读写类型

query 周期与字段

周期字符串

分类 可用值
低频 "日线""周线""月线""季线""半年线""年线"
高频 "1分钟线""2分钟线""3分钟线""5分钟线""10分钟线""15分钟线""20分钟线""30分钟线""40分钟线""60分钟线""120分钟线"
超高频 "成交明细""半秒线""1秒线""2秒线""3秒线""4秒线""5秒线""6秒线""10秒线""12秒线""15秒线""20秒线""30秒线"
其他 "任意周期""期货30分钟线""期货60分钟线"

低频字段

字段 数据类型 名称 说明
StockID string 代码 股票 ID
StockName string 名称 股票名称
date datetime 日期 当前时间
price real 最新价 该周期内最后一笔成交价
open real 开盘价 交易所公布的开盘价
close real 收盘价 交易所公布的收盘价
high real 最高价 周期内最高价
low real 最低价 周期内最低价
vol real 成交量 周期内成交量;股票单位为股,基金单位为份,期货和期权单位为合约数量
amount real 成交金额 周期内成交金额
cjbs real 成交笔数 股票为成交笔数;期货/期权可表示持仓变动量,日线表示当日持仓量
yclose real 系统昨收 交易所发布的考虑分红送股后的价格
syl1 real 市盈率 1 期货/期权日线表示当日结算价;其他通常为 0
syl2 real 市盈率 2 期货/期权表示昨日结算价ETF/LOF 表示时点净值;其他通常为 0

高频与 Level1 字段

字段 数据类型 名称 说明
StockID string 代码 股票 ID
StockName string 名称 股票名称
date datetime 时间 当前时间
price real 价格 交易明细为该时间点最后一笔成交价;其他为该周期最后一笔成交价
vol real 成交量 周期内成交量;分钟周期表示该分钟成交量,不是开盘累计
amount real 成交金额 周期内成交金额;分钟周期表示该分钟成交金额
cjbs real 成交笔数 股票为成交笔数;期货/期权为周期内持仓变动量
yclose real 上次价 上一周期的收盘价
syl1 real 市盈率 1 期货/期权分钟线或秒线中,当日结算价存储在当日最后成交记录中;其他通常为 0
syl2 real 市盈率 2 期货/期权为昨日结算价ETF/LOF 为时点净值;其他通常为 0
buy1buy5 real 买一价至买五价 期货没有 buy2buy5
sale1sale5 real 卖一价至卖五价 期货没有 sale2sale5
bc1bc5 int 买一量至买五量 对应价位的委买量
sc1sc5 int 卖一量至卖五量 对应价位的委卖量
wb real 委比 公式为委买/委卖
lb int 量比 秒线取交易明细最后一笔1 分钟线按过去 5 日均量和当日累计开市时间计算;其他分钟线取周期内最后一分钟
zmm int 买卖标识 交易明细中 1 主买,2 主卖,3 集合竞价/涨停/跌停等;非交易明细无意义
buy_vol real 主买量 主买成交量加买卖标识为 3 的成交量一半
buy_amount real 主买金额 主买成交金额加买卖标识为 3 的成交金额一半
sale_vol real 主卖量 主卖成交量加买卖标识为 3 的成交量一半
sale_amount real 主卖金额 主卖成交金额加买卖标识为 3 的成交金额一半
w_buy real 委买 一个周期内的委买量
w_sale real 委卖 一个周期内的委卖量
sectional_buy_vol real 时点当日累计主买量 从开盘到当前时间的主买量之和
sectional_buy_amount real 时点当日累计主买金额 从开盘到当前时间的主买金额之和
sectional_sale_vol real 时点当日累计主卖量 从开盘到当前时间的主卖量之和
sectional_sale_amount real 时点当日累计主卖金额 从开盘到当前时间的主卖金额之和
sectional_w_buy real 时点当日累计委买 从开盘到当前时间的委买量之和
sectional_w_sale real 时点当日累计委卖 从开盘到当前时间的委卖量之和
sectional_yclose real 前日收盘 上一交易日收盘价,与 yclose 的“上一周期收盘价”不同
sectional_open real 时点当日开盘 今天开盘价
sectional_high real 时点当日最高 从开盘到当前时间的最高价
sectional_low real 时点当日最低 从开盘到当前时间的最低价
sectional_vol real 时点当日累计成交量 从开盘到当前时间成交量之和
sectional_amount real 时点当日累计成交金额 从开盘到当前时间成交金额之和
sectional_cjbs int 时点当日累计成交笔数 股票为成交笔数;股指期货/期权可表示市场现有持仓量
sectional_wb real 时点当日累计委比 当日累计委买/当日累计委卖

数据类型转换规则

TSL Python TSL 转 Python Python 转 TSL
数值型 float / int 自动转换 自动转换
字符串 str 自动转换 自动转换
布尔型 bool / int 自动转换 自动转换为整数语义
日期时间实数 datetime pyTSL.DoubleToDatetime() pyTSL.DatetimeToDouble()
array pandas.DataFrame TSResultValue.dataframe() pyTSL.DataFrameToTSArray()
TSL 流 Python 变量 pyTSL.DecodeStream() pyTSL.EncodeStream()

TSL 日期时间是一个实数,例如 20240730.145533T 对应日期和时间;Client.call() 中的日期时间参数可直接传 Python datetimepyTSL 会自动转换。

pyTSLPy 兼容模块

pyTSLPy 是用 pyTSL 实现旧版 TSLPy3.pyd 功能的兼容模块。安装命令:

pip install pyTSLPy

迁移入口:

import pyTSLPy as ts

支持情况:

旧接口 支持情况 说明
DefaultConnectAndLogin 支持 通过配置文件登录
ConnectServer 支持 连接服务器
LoginServer 支持 登录用户
Disconnect 支持 断开连接
Logined 支持 判断是否连接
SetService 支持 设置服务器类型
GetService 支持 获得服务器类型
RemoteExecute 不完全支持 不支持本地交互
RemoteCallFunc 不完全支持 不支持本地交互
EncodeDate / EncodeTime / EncodeDateTime 支持 在 Python 中构造 TSL 日期、时间、日期时间
DecodeDate / DecodeTime / DecodeDateTime 支持 将 TSL 日期、时间、日期时间转换到 Python 数组
SetComputeBitsOption / GetComputeBitsOption 暂不支持 计算服务器位数相关
SetSysParam / GetSysParam 暂不支持 系统参数相关

如果旧代码使用本地交互函数,pyTSLPy 只直接支持 ExportFileImportFile;其他本地交互函数应通过 pyTSL.register_proc() 注册。

常见风险

  • import pyTSL 失败并提示找不到模块时Windows 先确认 VC 运行库。
  • 旧版本出现字符串对象分配错误时,先升级 pyTSL。
  • MacOS 导入报签名或权限问题时,需要按系统权限策略放开对应模块。
  • Client(ini_file) 路径含中文时,可传入 GBK 编码后的路径。
  • logout() 后再次执行 Client 方法可能自动重新登录;生成长期任务时遵循一次登录、多次交互。
  • pyTSL 返回值编码为 UTF-8不需要再手动从 GBK 转码。
  • 使用代理时,代理需要支持 HTTP CONNECT只支持应用层代理的环境需要使用官方协议网关方案。
  • Linux 旧版本在子进程场景可能出现网络线程初始化问题;应使用较新 pyTSL。
  • 非中国时区下日期时间转换有偏差时,使用 DatetimeToDouble(datetime, timezone) 显式指定时区。

常用示例

执行 TSL 代码串

import pyTSL

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
try:
    if c.login() == 0:
        raise RuntimeError(c.last_error())

    r = c.exec("return 1 + 1;")
    if r.error():
        raise RuntimeError(r.message())
    print(r.value())
finally:
    c.logout()

查询行情并转 DataFrame

import pyTSL
from datetime import datetime

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
try:
    if c.login() == 0:
        raise RuntimeError(c.last_error())

    r = c.query(
        stock=["SZ000001", "SZ000002"],
        cycle="日线",
        begin_time=datetime(2020, 1, 1),
        end_time=datetime(2020, 3, 20),
        fields="StockID,StockName,date,close",
    )
    if r.error():
        raise RuntimeError(r.message())
    df = r.dataframe()
finally:
    c.logout()

通过 code 临时定义并调用 TSL 函数

import pyTSL
from datetime import date

tsl_code = """
function getValue(begt, endt);
begin
    n := tradeDays(begt, endt);
    return nday(n, "date", dateToStr(spTime()), "close", close(), "vol", vol(), "amount", amount());
end;
"""

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
try:
    if c.login() == 0:
        raise RuntimeError(c.last_error())

    r = c.call("getValue", date(2019, 4, 10), date(2019, 4, 18), code=tsl_code, stock="SH000001", cycle="日线")
    if r.error():
        raise RuntimeError(r.message())
    df = r.dataframe()
finally:
    c.logout()

并发任务

import pyTSL

c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
try:
    if c.login() == 0:
        raise RuntimeError(c.last_error())

    batch = pyTSL.Batch(3, 0)
    for stock in ["SH600028", "SH600030", "SH600036"]:
        ok, task = batch.exec(c, "return stockMarketValue(20240410T);", stock=stock, key=stock)
        if ok == 0:
            print(task)

    for r in iter(batch):
        if r.error():
            print(r.key(), r.message())
        else:
            print(r.key(), r.value())
finally:
    c.logout()