A:
根据pyTSL提供的两个取数接口(exec,call)从以下五个维度提供实现范例,用户可根据需求参考相关范例:
1.取个股指定日财务指标
2.取个股一段时间的财务指标
3.取股票列表指定日财务指标
4.取组合一段时间财务指标
5.取个股指定财务报表数据
实现一:取个股指定日财务指标
范例01:exec接口取数
比如:获取SZ000002在20211210日最近报告期的归母净利润数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
stock:='SZ000002';
endt:=20211210t;
setsysparam(pn_stock(),stock);
setsysparam(pn_date(),endt);
rdate:=NewReportDateOfEndT2(endt); //获取指定日最新可以取得到的报告期
infoid:=46078; //归属于母公司所有者净利润ID
return array(("最近报告期":rdate,
"指标":"归属于母公司所有者净利润",
"季度数据(亿)":LastQuarterData(rdate,infoid)/100000000,
"报告期数据(亿)":reportofall(infoid,rdate)/100000000,
"TTM数据(亿)":Last12MData(rdate,infoid)/100000000));
'''
#调用接口执行交互代码
r = c.exec(tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
范例02:call接口取数
比如:获取SZ000002在20211210日最近报告期的扣非净利润
from datetime import datetime
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
function get_data(stock,endt);
begin
setsysparam(pn_stock(),stock);
setsysparam(pn_date(),endt);
rdate:=NewReportDateOfEndT2(endt); //获取指定日最新可以取得到的报告期
infoid:=42017; //扣除非经常性损益后的净利润
return array(("最近报告期":rdate,
"指标":"扣除非经常性损益后的净利润",
"季度数据(亿)":LastQuarterData(rdate,infoid)/100000000,
"报告期数据(亿)":reportofall(infoid,rdate)/100000000,
"TTM数据(亿)":Last12MData(rdate,infoid)/100000000));
end
'''
#调用接口执行交互代码
r = c.call('get_data','SZ000002',datetime(2021,12,10),code=tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
实现二:取个股一段时间的财务指标
范例03:exec接口取数
比如:获取SZ000002在2021年-2023年每个报告期的财务指标数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
stock:='SZ000002';
setsysparam(pn_stock(),stock);
begt:=20210101t;
endt:=20231231t;
rdates:= RDateListQK(begt,endt); //区间报告期列表
rt:=array();
for i,rdate in rdates do
begin
rt[i,"报告期"]:=rdate;
rt[i,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益
rt[i,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润
rt[i,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计
rt[i,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润
rt[i,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
end
return rt;
'''
#调用接口执行交互代码
r = c.exec(tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
范例04:call接口取数
比如:获取SZ000002在2021年-2023年每个报告期的财务指标数据
from datetime import datetime
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
function get_data(stock,begt,endt);
begin
setsysparam(pn_stock(),stock);
rdates:= RDateListQK(begt,endt); //区间报告期列表
rt:=array();
for i,rdate in rdates do
begin
rt[i,"报告期"]:=rdate;
rt[i,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益
rt[i,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润
rt[i,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计
rt[i,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润
rt[i,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
end
return rt;
end
'''
#调用接口执行交互代码
r = c.call('get_data','SZ000002',datetime(2021,1,1),datetime(2023,12,31),code=tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
实现三:取股票列表指定日财务指标
范例05:exec接口取数
比如:获取上证50成分股在20211210最近报告期的财务指标数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
endt:=20211210t;
stocks:=getbkbydate("SH000016",endt);//上证50指定日成分股
setsysparam(pn_stock(),stocks[0]);
setsysparam(pn_date(),endt);
rdate:=NewReportDateOfEndT2(endt); //获取指定日最新可以取得到的报告期
rt:=array();
for i,stock in stocks do
begin
setsysparam(pn_stock(),stock);
rt[i,"代码"]:=stock;
rt[i,"名称"]:=stockname(stock);
rt[i,"最近报告期"]:=rdate;
rt[i,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益;
rt[i,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润;
rt[i,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计;
rt[i,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润;
rt[i,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
end
return rt;
'''
#调用接口执行交互代码
r = c.exec(tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
范例06:call接口取数
比如:获取上证50成分股在20211210最近报告期的财务指标数据
from datetime import datetime
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
endt=datetime(2021,12,10)
#获取指定日上证50成分股
stocks=c.exec('''return getbkbydate("SH000016",strtodatetime('{}'));'''.format(endt)).value()
tsl = '''
function get_data(stocks,endt);
begin
setsysparam(pn_stock(),stocks[0]);
setsysparam(pn_date(),endt);
rdate:=NewReportDateOfEndT2(endt); //获取指定日最新可以取得到的报告期
rt:=array();
for i,stock in stocks do
begin
setsysparam(pn_stock(),stock);
rt[i,"代码"]:=stock;
rt[i,"名称"]:=stockname(stock);
rt[i,"最近报告期"]:=rdate;
rt[i,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益;
rt[i,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润;
rt[i,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计;
rt[i,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润;
rt[i,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
end
return rt;
end
'''
#调用接口执行交互代码
r = c.call("get_data",stocks,endt,code=tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
实现四:取组合一段时间财务指标
范例07:exec接口取数
比如:获取上证50成分股在2021-2023年每个报告期的财务指标数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
begt:=20210101t;
endt:=20231231t;
rdates:= RDateListQK(begt,endt); //区间报告期列表
stocks:=GetBKByBegTEndT("SH000016",begt,endt)[:,"代码"];//上证50区间成分股
rt:=array();
x:=0;
for i,stock in stocks do
begin
setsysparam(pn_stock(),stock);
name:=stockname(stock);
for j,rdate in rdates do
begin
rt[x,"代码"]:=stock;
rt[x,"名称"]:=name;
rt[x,"报告期"]:=rdate;
rt[x,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益;
rt[x,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润;
rt[x,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计;
rt[x,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润;
rt[x,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
x++;
end
end
return rt;
'''
#调用接口执行交互代码
r = c.exec(tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
范例08:call接口取数
比如:获取上证50成分股在2021-2023年每个报告期的财务指标数据
from datetime import datetime
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
begt=datetime(2021,1,1)
endt=datetime(2023,12,31)
#获取上证50指定日期区间成分股
stocks = c.exec('''return GetBKByBegTEndT("SH000016",strtodatetime("{}"),strtodatetime("{}"))[:,"代码"];'''.format(begt,endt)).value()
tsl = '''
function get_data(stocks,begt,endt);
begin
rdates:= RDateListQK(begt,endt); //区间报告期列表
rt:=array();
x:=0;
for i,stock in stocks do
begin
setsysparam(pn_stock(),stock);
name:=stockname(stock);
for j,rdate in rdates do
begin
rt[x,"代码"]:=stock;
rt[x,"名称"]:=name;
rt[x,"报告期"]:=rdate;
rt[x,"每股收益"]:=ReportOfAll(9900000,rdate); //每股收益;
rt[x,"扣非净利润"]:=ReportOfAll(42017,rdate); //扣除非经常性损益后的净利润;
rt[x,"归母股东权益"]:=ReportOfAll(44140,rdate); //归属母公司股东权益合计;
rt[x,"归母净利润"]:=ReportOfAll(46078,rdate); // 归属于母公司所有者净利润;
rt[x,"期末现金及现金等价物余额"]:=ReportOfAll(48166,rdate); //期末现金及现金等价物余额
x++;
end
end
return rt;
end
'''
#调用接口执行交互代码
r = c.call('get_data',stocks,begt,endt,code=tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
实现五:取个股指定财务报表数据
范例09:exec接口取数
比如:获取SZ000002的资产负债表数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
stock:='SZ000002';
return select * from infotable 44 of stock end;
'''
#调用接口执行交互代码
r = c.exec(tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
范例10:call接口取数
比如:获取SZ000002在2021-2023年的利润分配表数据
import sys
import pyTSL as ts
c = ts.Client("user", "password", "tsl.tinysoft.com.cn", 443)#user 为天软账号, password 为账号密码
lg=c.login()
if lg != 1:
print("登陆天软服务器失败:",c.last_error())
sys.exit()
else:
print("登陆天软服务器成功")
tsl = '''
function get_data(stock,dbegt,dendt);
begin
return select * from infotable 46 of stock
where ["截止日"]>=dbegt and ["截止日"]<=dendt end;
end
'''
#调用接口执行交互代码
r = c.call('get_data','SZ000002',20210101,20231231,code=tsl)
if r.error() !=0:
print(r.message())
else:
print(r.dataframe())
执行结果:
