跳转至

client_plugin

TSL语言的跨平台实现的Client插件,用于发起向服务器发送请求。

安装

(已集成到mytsl发行版中)

动态库文件:Windows: client_plugin.dll, Linux: libclient_plugin.so。

把相关的动态库文件拷贝到执行服务器或者TSL目录的plugin目录。

(如果需要下载兼容正式版的Windows版本的动态库文件请访问这里)。

使用指南

提供的TSL函数:

client_session

client_session(host, port, user, passwd, [proxy]): 发起会话。

  • 参数列表

    参数 描述
    host 服务器地址。
    port 服务器端口。
    user 用户名
    password 密码。
    proxy 代理服务器信息,字符串对数组类型,包含的字段如下:
    Address 代理服务器地址。
    Port 代理服务器端口。
  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 会话ID

    会话ID将会在下面的函数中用到。

client_session_alias

client_session_alias(alias): 用配置别名发起会话。

  • 参数列表

    参数 描述
    alias 别名。

    配置文件是tslclient.ini,配置和天软客户端一致。

  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 会话ID

client_destroy

client_destroy(session): 关闭会话。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
  • 返回值 1

Note

会话是自动管理的,并不强制要求关闭。显式关闭可以提取释放系统资源。

client_exec

client_exec(session, body, [sysparam], [timeout]): 发起执行代码请求。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    body 代码。
    sysparam 系统参数,字符串对数组,可选参数。
    timeout 超时设置,毫秒精度,可选参数。

    “魔法参数”模式下: sysparam和timeout参数将由魔法参数代替,支持的魔法参数有:

    参数 描述
    @stock 股票
    @time 当前时间
    @cycle 当前周期
    @rate 复权方式
    @rateday 复权基准日
    @precision 精度设置
    @viewpoint 设定仿真的时点
    @reportmode 报表数据规则
    @emptymode 空记录模式
    @nday 周期数目
    @freecycle 自由周期
    @stockarr 当前组合
    @cdmode 股本获取方式
    @cyclefilter 周期过滤器
    @profiler 优化器类型
    @bk 板块名称
    @fp 精度设置,同@precision
    @cf 周期过滤器,同@cyclefilter
    @timeout 超时设置,毫秒精度
    @service 指定服务器群
  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 结果
    2 辅助结果

client_call

client_call(session, func, param, [sysparam], [timeout]): 发起调用函数请求。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    func 函数名。
    param 函数参数,数组格式,可选参数。
    sysparam 系统参数,字符串对数组,可选参数。
    timeout 超时设置,毫秒精度,可选参数。

    如果func是@开头的表达式类型将开启“魔法参数”模式: param不需要了,因为已经在@func的表达式中了。sysparam和timeout参数将由魔法参数代替,支持的魔法参数同client_exec,另外额外支持:

    参数 描述
    @code 代码

    例如:

    client_call(session
       , @close() // 带参数的例子:@getbk("A股")
       , @stock("SZ000001")
       , @cycle(cy_day())
       , @time(today())
       , @rate(1)
       , @rateday(today())
       , @fp(1));
    
  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 结果
    2 辅助结果

client_info

client_info(seesion): 返回相关用户配置信息。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
  • 返回值

    字符串对数组,其中EventList项对应的就是服务器群。

client_admin

client_admin(seesion, cmd): 发送管理命令。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    cmd 命令,字符串类型。
  • 返回值

    字符串类型。

client_default_service

client_default_service(seesion, service): 设置会话缺省的服务器群。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    service 指定的服务器群。
  • 返回值

    上次设置的服务器群或者空字符串。

client_bgrun_exec

client_bgrun_exec(seesion, body, [sysparam]): 发起委托执行请求。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    body 代码。
    sysparam 系统参数,字符串对数组,可选参数。

    “魔法参数”模式: sysparam参数将由魔法参数代替,支持的魔法参数同client_exec,除了timeout的设置。

  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0

client_bgrun_list

client_bgrun_list(seesion): 列出当前正在运行的委托执行。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 [委托执行句柄,名称,发起时间,已运行时间]
    ... ...

其中委托执行句柄可以用来取消委托执行。

client_bgrun_cancel

client_bgrun_cancel(seesion, handle): 取消某个委托执行。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    handle 委托执行句柄
  • 返回值 1

client_batch_exec

client_batch_exec(session, body, [sysparam], [service], [key]): 发起批执行代码请求。

  • 参数列表

    参数 描述
    session 会话ID。
    body 代码。
    sysparam 系统参数,字符串对数组,可选参数。
    service 指定执行的服务群,可选参数。
    key 关键字,字符串类型,可选参数。
    tag 分组标签,字符串类型,可选参数。

    “魔法参数”模式: sysparam、service和key参数将由魔法参数代替,支持的魔法参数同client_exec,另外支持: @key 关键字 @tag 分组标签

  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 批任务的ID

client_batch_call

client_batch_call(session, func, [param], [sysparam], [service], [key], [tag]): 发起批函数调用请求。

  • 参数列表

    参数 描述
    session client_session 返回的会话ID。
    func 函数名。
    param 函数参数,数组类型,可选参数。
    sysparam 系统参数,字符串对数组,可选参数。
    service 指定执行的服务群,可选参数。
    key 关键字,字符串类型,可选参数。
    tag 分组标签,字符串类型,可选参数。

    如果func是@开头的表达式类型将开启“魔法参数”模式: param不需要了,因为已经在@func的表达式中了。sysparam、service和key参数将由魔法参数代替,支持的魔法参数同client_exec,另外支持: @key 关键字 @tag 分组

  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 批任务的ID

client_batch_any

client_batch_any(): 等待任意一个批任务完成并返回结果。

  • 参数列表 无

  • 返回值

    如果没有任务,返回结果为空数组。否则,数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息
    2 关键字
    3 分组
    4 任务状态

    没有错误:

    下标
    0 0
    1 结果
    2 辅助结果
    3 关键字
    4 分组
    5 任务状态

    任务状态:

    说明
    0 正常完成
    1 超时
    2 取消

client_batch_all

client_batch_all(): 等待所有批任务完成并获取所有批任务的结果。

  • 参数列表 无

  • 返回值

    如果没任务,返回空数组。 否则,返回内容是client_batch_any返回结果的数组。

client_batch_wait

client_batch_wait(job_id): 等待指定批任务完成并返回结果。 client_batch_wait(@tag): 等待指定分组批任务中任何一个完成并返回结果。

  • 参数列表

    参数 描述
    job_id 任务ID

    魔法参数: @timeout 超时设置,毫秒精度。

  • 返回值

    如果没有任务,返回结果为空数组。否则,数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息
    2 关键字
    3 分组
    4 任务状态

    没有错误:

    下标
    0 0
    1 结果
    2 辅助结果
    3 关键字
    4 分组
    5 任务状态

client_batch_cancel

client_batch_cancel(job_id): 取消指定批任务。 client_batch_cancel(@tag): 取消指定分组批任务。

  • 参数列表

    参数 描述
    job_id 任务ID
    @tag 分组标签
  • 返回值

    数组类型,如果发生错误:

    下标
    0 错误代码
    1 错误信息

    没有错误:

    下标
    0 0
    1 取消结果

client_batch_setparallel

client_batch_setparallel(max_parallel): 设置批任务最大的并发执行数,具体和用户相关。

  • 参数列表

    参数 描述
    max_parallel 最大的并发执行数,整数类型。
  • 返回值

    上次设置设置的最大并发数,或者默认的并发数,系统缺省是5。

范例

会话

[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
ra := client_exec(session, "return datetimetostr(now());");
echo tostn(ra);
ra := client_exec(session, "return rd(1);", array("StockID":"SZ000001"));
echo "rd(1)=", tostn(ra);
ra := client_call(session, "close", array(), array("StockID":"SZ000001"));
echo "close=", tostn(ra);
client_destroy(session);

批功能

[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
bk := client_call(session, "getbk", array("A股"));
for k, s in bk[1] do
    client_batch_call(session, "close", array(), array("StockID":s), "", s);
while True do
begin
    r := client_batch_any();
    echo tostn(r);
    if r[0] then break;
end;

委托执行

[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
// 发起委托执行
ra := client_bgrun_exec(session, " while 1 do sleep(100);");
// 列出委托执行列表
ra := client_bgrun_list(session);
echo tostn(ra);
// 取消第一个委托执行
ra := client_bgrun_cancel(session, ra[0][0]);
// 再次列出委托执行列表
ra := client_bgrun_list(session);
echo tostn(ra);

魔法参数

[err, session] := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
[err, bk] := client_call(session, @getbk("A股"));
for k, s in bk do
    client_batch_call(session, @close(), @stock(s), @key(s));
while True do
begin
    r := client_batch_any();
    println("{}", r);
    if r[0] then break;
end;
client_destroy(session);

client调用就像在写本地TSL代码,是不是感觉很亲切,瞬间神清气爽 ;-)

异步执行和取消

[err, c]   := client_session("tsl.tinysoft.com.cn", 443, "user", "password");
[err, job] := client_batch_exec(c, "Sleep(2000); return 2000;");
[err, res] := client_batch_wait(job, @timeout(500)); // 将会返回超时错误信息
[err, res] := client_batch_cancel(job);
[err, res] := client_batch_wait(job);

这时返回结果的任务状态是取消。

任务分组

// "SH" 分组
for _,s in array('SH000001', 'SH000002') do
    client_batch_call(c, "close", array(), array("StockID":s), "", s, "SH");

// "SZ" 分组    
for _,s in array('SZ000001', 'SZ000002') do
    client_batch_call(c, "close", array(), array("StockID":s), "", s, "SZ");

rs := client_batch_wait(@tag("SZ"));

这时返回的是“SZ”分组的结果。

附录

更新历史

  • 2022-7-8 更新文档。
  • 2021-8-25 初始发布。