说明:
python中可用列表(list)作为数组类型参数传给天软函数执行
一维数组可直接传入一个list 例:["SZ000001","SZ000002"]
二维数组采用列表与字典嵌套的方式传入参数 例:[{"代码":"SZ000001","名称":"万科A"}]
注:传入数组列名不能为实数,参考:FAQ:
Q:python调天软函数参数传递失败,结果返回为空?
pytsl接口介绍:FAQ:
天软pyTSL接口
tslpy及交互说明:FAQ:
2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
PyTSL交互范例:
范例1:获取代码集合的行情数据
//获取股票列表的指定日期区间的行情数据
import pandas as pd
import pyTSL
c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
c.login()
test = '''
function get_value(stocks,begt,endt);
begin
return select ['StockID'],
datetimetostr(['date']) as 'date',
['close'],
['high']
from Markettable datekey inttodate(begt) to inttodate(endt) of stocks end;
end;
'''
stocks=["SZ000001","SZ000002"]
begt=20210701
endt=20210705
r =c.call('get_value',stocks,begt,endt,code=test,cycle="日线")
print(pd.DataFrame(r.value()))
范例2:补充报表部分指标数据
//补充数据表部分数据
import pandas as pd
import pyTSL
c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
c.login()
test = '''
function get_value(data);
begin
return select ["代码"],
stockname(["代码"]) as "名称",
spec(base(10032),["代码"]) as "中证一级行业",
datetostr(["开始日期"])+" to "+datetostr(["截止日期"]) as "日期区间",
spec(stockzf(["开始日期"],["截止日期"]),["代码"]) as "区间涨幅(%)",
spec(stockhsl(["开始日期"],["截止日期"]),["代码"]) as "区间换手率(%)"
from data end;
end;
'''
data=[{"代码":"SZ000001","开始日期":44378,"截止日期":44381},{"代码":"SZ000002","开始日期":44378,"截止日期":44381}]
r =c.call('get_value',data,code=test,cycle="日线")
print(pd.DataFrame(r.value()))
范例3:在python中导入本地excel数据表至天软函数计算
//在本地pathname路径excel表的Sheet2的工作簿中存在列名为"代码"的数据表
//也是先将数据表转换成列表与字典嵌套的格式再传入函数计算
import pandas as pd
import pyTSL
c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
c.login()
# 换成自己的路径
pathname= 'C:/Users/86152/Desktop/代码.xlsx'
df=pd.read_excel(pathname,sheet_name='Sheet2')
df=df.to_dict(orient="records")
test = '''
function get_value(stocks,begt,endt);
begin
t:= select ['StockID'],datetimetostr(['date']) as 'date',['close'],['high']
from Markettable datekey inttodate(begt) to inttodate(endt) of stocks[:,"代码"] end;
return t;
end;
'''
r =c.call('get_value',df,20210706,20210707,code=test,cycle="日线")
print(pd.DataFrame(r.value()))
TSLPy交互范例
范例4:传入一维数组获取代码集合的行情数据
封装天软代码:
Function get_testdata(stocks,begt,endt);
Begin
{
stocks: 一维字符串数组 证券列表
begt: int 开始日期
end: int 截止日期
}
setsysparam(PN_Cycle(),cy_day());
t:= select ["stockid"],
datetostr(["date"]) as "date",
["close"]
from markettable datekey IntToDate(begt) to IntToDate(endt) of stocks end;
t:=exportjsonstring(t);
return t;
End;
python代码:
import TSLPy3 as ts
import pandas as pd
import json
import sys
sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
stocks=["SZ000001","SZ000002"]
data=ts.RemoteCallFunc("get_testdata",[stocks,20210701,20210705],{})
data=json.loads(data[1])
print(pd.DataFrame(data))
范例5:传入数据表补充数据
封装天软代码:
Function get_testtable(data);
Begin
{
data: 数据表类型 源数据
}
t:=select ["代码"],
stockname(["代码"]) as "名称",
spec(base(10032),["代码"]) as "中证一级行业",
datetostr(["开始日期"])+" to "+datetostr(["截止日期"]) as "日期区间",
spec(stockzf(["开始日期"],["截止日期"]),["代码"]) as "区间涨幅(%)",
spec(stockhsl(["开始日期"],["截止日期"]),["代码"]) as "区间换手率(%)"
from data end;
t:=exportjsonstring(t);
return t;
End;
python代码:
import TSLPy3 as ts
import pandas as pd
import json
import sys
sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
data=[{"代码":"SZ000001","开始日期":44378,"截止日期":44381},{"代码":"SZ000002","开始日期":44378,"截止日期":44381}]
data=ts.RemoteCallFunc("get_testtable",[data],{})
data=json.loads(data[1])
print(pd.DataFrame(data))