A:
在使用第三方交互接口访问天软数据库时,不建议频繁进行登录退出的操作。
因为登录与退出,需要远程与服务器进行连接会话,会非常依赖网络的稳定性及服务器的响应性能,过多的连接会存在一定的时间消耗,影响交互效率。
当连接网络不好或服务器响应不佳时,短时间内多次断开重连容易触发占用多个登录数的情况(断开连接没有及时处理),操作过于频繁还会导致账号短时间被锁定的无法登录的现象。
合理使用第三方接口应当
尽量遵循一次登录,多次交互的原则。
下面介绍几种常见的交互方式:TSLPy接口、pyTSL接口、odbc接口对于一次登陆,多次交互的一个示例展示,以供用户参考。
TSLPy使用范例
参考:FAQ:
2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
范例一:使用TSLPy盘中获取实盘行情数据
import time
from datetime import datetime
import pandas as pd
import json
import sys
import TSLPy3 as ts
path="C:/Users/86152/Desktop/download/"
sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
ts.DefaultConnectAndLogin("wh_server")#远程登录,用自己配置的别名
tsstr='''
stocks:=getbk('A股');
setsysparam(PN_Precision(),2);
ret:=array();
for i:=0 to length(stocks)-1 do
begin
setsysparam(pn_stock(),stocks[i]);
ret[i,'StockID']:=stocks[i];
ret[i,'time']:=datetimetostr(rd(-1));
ret[i,'name']:=rd(1);
ret[i,'open']:=rd(2);
ret[i,'yclose']:=rd(3);
ret[i,'high']:=rd(4);
ret[i,'low']:=rd(5);
ret[i,'price']:=rd(6);
ret[i,'amount']:=rd(9);
end
t:=exportjsonstring(ret);
return t;
'''
t=datetime.now()
while t.time()<=datetime(2000,1,1,15,00,00).time():
data=ts.RemoteExecute(tsstr,{})[1]
df=pd.DataFrame(json.loads(data))
df.to_excel(path + t.strftime("%Y%m%d%H%M%S") + ".xlsx")
print(path + t.strftime("%Y%m%d%H%M%S") + ".xlsx"," 导出成功")
time.sleep(3)
t=datetime.now()
ts.Disconnect()
执行结果:本地导出基本面与行情数据文件
范例二:使用TSLPy盘后下载期权基本面及行情数据
from datetime import datetime
import pandas as pd
import json
import sys
import TSLPy3 as ts
path="C:/Users/86152/Desktop/download/"
sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
ts.DefaultConnectAndLogin("wh_server")#远程登录,用自己配置的别名
tsstr='''
stocks:=getbk("上市期权");
data:=select * from infotable 720 of stocks where ["截止日"]=datetoint(today()) end;
t:=exportjsonstring(data);
return t;
'''
data=ts.RemoteExecute(tsstr,{})[1]
df=pd.DataFrame(json.loads(data))
t=datetime.now()
df.to_excel(path + "期权基本信息" + t.strftime("%Y%m%d") + ".xlsx")
tsstr='''
stocks:=getbk("上市期权");
data:=select * from infotable 720 of stocks where ["截止日"]=datetoint(today()) end;
t:=exportjsonstring(data);
return t;
'''
data=ts.RemoteExecute(tsstr,{})[1]
df=pd.DataFrame(json.loads(data))
df.to_excel(path + "期权行情" + t.strftime("%Y%m%d") + ".xlsx")
ts.Disconnect()
执行结果:本地导出实时行情数据文件
pyTSL使用范例
参考:FAQ:
天软pyTSL接口
范例三:使用pyTSL盘中获取实盘行情数据
import time
from datetime import datetime
import pandas as pd
import pyTSL
path="C:/Users/86152/Desktop/download/"
c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
c.login()
tsstr='''
stocks:=getbk('A股');
setsysparam(PN_Precision(),2);
ret:=array();
for i:=0 to length(stocks)-1 do
begin
setsysparam(pn_stock(),stocks[i]);
ret[i,'StockID']:=stocks[i];
ret[i,'time']:=datetimetostr(rd(-1));
ret[i,'name']:=rd(1);
ret[i,'open']:=rd(2);
ret[i,'yclose']:=rd(3);
ret[i,'high']:=rd(4);
ret[i,'low']:=rd(5);
ret[i,'price']:=rd(6);
ret[i,'amount']:=rd(9);
end
return ret;
'''
t=datetime.now()
while t.time()<=datetime(2000,1,1,15,00,00).time():
r=c.exec(tsstr)
df=r.dataframe()
df.to_excel(path + t.strftime("%Y%m%d%H%M%S") + ".xlsx")
print(path + t.strftime("%Y%m%d%H%M%S") + ".xlsx"," 导出成功")
time.sleep(3)
t=datetime.now()
c.logout()
执行结果:本地导出实时行情数据文件
范例四:使用pyTSL盘后下载期权基本面及行情数据
from datetime import datetime
import pandas as pd
import pyTSL
path="C:/Users/86152/Desktop/download/"
c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
c.login()
tsstr='''
stocks:=getbk("上市期权");
data:=select * from infotable 720 of stocks where ["截止日"]=datetoint(today()) end;
return data;
'''
r=c.exec(tsstr)
df = r.dataframe()
t=datetime.now()
df.to_excel(path + "期权基本信息" + t.strftime("%Y%m%d") + ".xlsx")
tsstr='''
stocks:=getbk("上市期权");
return select *,datetostr(["date"]) as "date"
from markettable datekey today() to today() of stocks end;
'''
r=c.exec(tsstr)
df = r.dataframe()
t=datetime.now()
df.to_excel(path + "期权行情" + t.strftime("%Y%m%d") + ".xlsx")
c.logout()
执行结果:本地导出基本面与行情数据文件
ODBC使用范例(以python为例):
参考:FAQ:
2016-07-28-应用专题-第三方交互:对ODBC接口的使用方法和范例
范例五:使用odbc盘中获取实盘行情数据
import pandas as pd
from datetime import datetime
import time
import pyodbc
conn = pyodbc.connect("dsn=tsodbc")
curs=conn.cursor()
tsstr='''
stocks:=getbk('A股');
setsysparam(PN_Precision(),2);
ret:=array();
for i:=0 to length(stocks)-1 do
begin
setsysparam(pn_stock(),stocks[i]);
ret[i,'StockID']:=stocks[i];
ret[i,'time']:=datetimetostr(rd(-1));
ret[i,'name']:=rd(1);
ret[i,'open']:=rd(2);
ret[i,'yclose']:=rd(3);
ret[i,'high']:=rd(4);
ret[i,'low']:=rd(5);
ret[i,'price']:=rd(6);
ret[i,'amount']:=rd(9);
end
return ret;
'''
path="C:/Users/86152/Desktop/download/"
t=datetime.now()
while t.time()<=datetime(2000,1,1,15,00,00).time():
curs.execute(tsstr)
rows=curs.fetchall()
df = pd.DataFrame(rows)
df.to_excel(path + t.strftime("%Y%m%d%H%M%S") + ".xlsx")
time.sleep(3) #暂停3秒
t=datetime.now()
curs.close()
conn.close()
执行结果:本地导出多个行情文件
范例六:使用odbc盘后下载期权基本面及行情数据
from datetime import datetime
import pandas as pd
import pyodbc
conn = pyodbc.connect("dsn=tsodbc")
curs=conn.cursor()
path="C:/Users/86152/Desktop/download/"
t=datetime.now()
tsstr='''
stocks:=getbk("上市期权");
data:=select * from infotable 720 of stocks where ["截止日"]=datetoint(today()) end;
return data;
'''
curs.execute(tsstr)
rows=curs.fetchall()
df = pd.DataFrame(rows)
df.to_excel(path + "期权基本信息" + t.strftime("%Y%m%d") + ".xlsx")
tsstr='''
stocks:=getbk("上市期权");
return select *,datetostr(["date"]) as "date"
from markettable datekey today() to today() of stocks end;
'''
curs.execute(tsstr)
rows=curs.fetchall()
df = pd.DataFrame(rows)
df.to_excel(path + "期权行情" + t.strftime("%Y%m%d") + ".xlsx")
curs.close()
conn.close()
执行结果:本地导出基本面与行情数据文件