A:本文中主要展示开发者用户在python中通过OPI接口获取天软函数具体实现,提供以下两种取数范例:
1.通过
URI:/Service/Call/funcName的方式获取行情数据;
2.通过
URI:/Service/Run/天软语句串的方式获取行情数据;
相关说明:
OPI接口说明:FAQ:
2026-04-08-应用专题-第三方交互:TS-OPI用户指南
天软行情取数说明:FAQ:
Q:高频、超高频数据说明
实现范例
范例1:通过Call天软函数的方式获取行情数据
取数说明:获取指定代码在指定日期区间的分钟线行情数据
取数代码
import requests
from requests.auth import HTTPBasicAuth
import pandas as pd
import json
from datetime import datetime, timedelta
# TSL TDateTime 的基点为1899年12月30日
TSL_EPOCH = datetime(1899, 12, 30)
def tslDateToPy(dvalue: float) -> datetime:
return TSL_EPOCH + timedelta(days=dvalue)
def pyDateTotsl(dt: datetime) -> float:
return (dt - TSL_EPOCH) / timedelta(days=1)
#requests.post 方式有参数函数
#调用天软平台用户函数
url='https://opi.tinysoft.com.cn/Service/Call/FAQ_OPI_TradeDetails'
headers={'Connection': 'keep-alive',
'Content-Type': 'application/json',
'TS-EVENTNAME': 'auto',
'JSON-Encode': 'gbk'}
# 传入参数
postdata=["SZ000001","1分钟线",pyDateTotsl(datetime(2026,5,10)),pyDateTotsl(datetime(2026,5,25))]
session = requests.Session()
session.auth = HTTPBasicAuth('user', 'password')# 使用 HTTPBasicAuth进行基本认证
session.headers.update(headers)
response = session.post(url,json=postdata)
if response.status_code==200:
print("请求成功,结果如下:")
data=response.text
#打印返回的数组结果
print(pd.DataFrame(json.loads(data)))
else:
print(f"请求失败,状态码: {response.status_code}")
print(f"响应内容: {response.text}")
response.close()
执行结果:
调用用户函数说明:FAQ_OPI_TradeDetails
附件:FAQ_OPI_TradeDetails.fun
导入用户函数参考:FAQ:
如何批量导入导出函数?
主要取数模型:
Tradedetails
实现代码:
Function FAQ_OPI_TradeDetails(stockid="SZ000001",cy="日线",begt=20260520T,endt=20260525T,Rate=0,Rateday=0,FutureTradeType=0);
Begin
setsysparam(pn_stock(),stockid);
setsysparam(pn_cycle(),cy);
setsysparam(pn_rate(),rate);
setsysparam(pn_rateday(),rateday);
return TradeDetails(BegT,EndT,cy,FutureTradeType);
End;
范例2:通过Run天软代码串的方式获取行情数据
取数说明:获取上证50指定日期区间的日线行情数据
取数代码
import requests
from requests.auth import HTTPBasicAuth
import pandas as pd
import json
#requests.post 方式有参数函数
#调用天软平台用户函数
url='https://opi.tinysoft.com.cn/Service/Run/'
headers={'Connection': 'keep-alive',
'Content-Type': 'application/json',
'TS-EVENTNAME': 'auto',
'JSON-Encode': 'gbk'}
# 天软代码串
ts_str='''
begt:=20260510t;
endt:=20260525t;
stocks:=GetBkByDate("SH000016",endt);//指定日上证50成份股
setsysparam(pn_cycle(),cy_day());//设置为日线
t:=select ['StockID'],['StockName'],datetostr(['date']) as 'date',
['close'],['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
from Markettable datekey begt to endt of stocks end;
return t;
'''
# 传入天软取数代码串
postdata={'body':ts_str}
session = requests.Session()
session.auth = HTTPBasicAuth('user', 'password')# 使用 HTTPBasicAuth进行基本认证
session.headers.update(headers)
response = session.post(url,json=postdata)
if response.status_code==200:
print("请求成功,结果如下:")
data=response.text
#打印返回的数组结果
print(pd.DataFrame(json.loads(data)))
else:
print(f"请求失败,状态码: {response.status_code}")
print(f"响应内容: {response.text}")
response.close()
执行结果:
