FAQ > 金融建模 > 第三方交互 > TS-OPI

Q:python&OPI方式调用示例:获取行情数据    

  • 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()
    执行结果: