FAQ > 金融建模 > 第三方交互 > Python

Q:Python调pyTSL接口取数范例01:行情数据的提取    

简述

1.python与天软进行交互前,需要做相关配置,具体操作及交互接口说明请查看文档:FAQ:天软pyTSL接口
2.天软行情数据说明:FAQ:Q:高频、超高频数据说明
  • A:根据pyTSL提供的三个取数接口(exec,call,query)从以下四个维度提供实现范例,用户可根据需求参考相关范例:
    1.取个股指定时点的行情数据
    2.取个股一段时间内的行情数据
    3.取股票列表指定日行情数据
    4.取股票列表一段时间内的行情数据
    实现一:取个股指定时点的行情数据
    范例01:exec接口取数
    比如:提取万科A在2020-08-25日10点30分的价格及分钟线成交量
    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='''
    setsysparam(pn_stock(),'SZ000002'); //证券代码
    setsysparam(pn_cycle(),cy_1m()); //周期-分钟线
    endt:=20200825.1030T;
    setsysparam(pn_date(),endt); //当前时间-当高频时需要注意添加时间
    c:=close(); //收盘价
    v:=vol();//分钟线成交量
    return array(('日期时间':datetimetostr(endt),'收盘价':c,'成交量':v));
    '''
    #调用接口执行交互代码
    r = c.exec(tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例02:call接口取数范例
    比如:提取万科A在2020-08-25日10点30分的价格及分钟线成交量
    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(endt);
    begin
    setsysparam(pn_stock(),'SZ000002'); //证券代码
    setsysparam(pn_cycle(),cy_1m()); //周期-分钟线
    setsysparam(pn_date(),endt); //当前时间-当高频时需要注意添加时间
    c:=close(); //收盘价
    v:=vol();//分钟线成交量
    return array(('日期时间':datetimetostr(endt),'收盘价':c,'成交量':v));
    end
    '''
    #调用接口执行交互代码
    r = c.call('get_data',datetime(2020,8,25,10,30),code=tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例03:query接口取数范例
    比如:提取万科A在2020-08-25日10点30分的价格及分钟线成交量
    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("登陆天软服务器成功")
    #调用接口执行交互代码
    r = c.query(stock='SZ000002',
          begin_time=datetime(2020,8,25,10,30),
          end_time=datetime(2020,8,25,10,30),
          cycle='1分钟线',
          fields='date,close,vol'
          )
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    实现二:取个股一段时间内的行情数据
    范例04:exec接口取数
    比如:提取万科A在20250101-20250114每日的价格及成交量数据
    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:=20250101t;
    endt:=20250114t;
    stock:='SZ000002';
    setsysparam(pn_cycle(),cy_day()); //周期-日线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey begt to endt of stock end;
    return t;
    '''
    #调用接口执行交互代码
    r = c.exec(tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例05:call接口取数范例
    比如:提取万科A在20250101-20250114每日的价格及成交量数据
    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_cycle(),cy_day()); //周期-日线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey begt to endt of stock end;
    return t;
    end
    '''
    #调用接口执行交互代码
    r = c.call('get_data','SZ000002',datetime(2025,1,1),datetime(2025,1,14),code=tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例06:query接口取数范例
    比如:提取万科A在20250101-20250114每日的价格及成交量数据
    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("登陆天软服务器成功")
    #调用接口执行交互代码
    r = c.query(stock='SZ000002',
          begin_time=datetime(2025,1,1),
          end_time=datetime(2025,1,14),
          cycle='日线',
          fields='StockID,StockName,date,close,vol,amount,buy1,bc1,sale1,sc1'
          )
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    实现三:取股票列表指定日行情数据
    比如:提取上证50成分股在20250114日的分钟线行情数据
    范例07:exec接口取数
    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:=20250114t;
    stocks:=getbkbydate("SH000016",endt);//上证50指定日成分股
    setsysparam(pn_cycle(),cy_1m());//周期-分钟线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey endt to endt+18/24 of stocks end;
    return t;
    '''
    #调用接口执行交互代码
    r = c.exec(tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例08:call接口取数范例
    比如:提取上证50成分股在20250114日的分钟线行情数据
    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(2025,1,14)
    #获取上证50指定日成分股
    stocks = c.exec('return getbkbydate("SH000016",strtodatetime("{}"));'.format(endt)).value()
    tsl = '''
    function get_data(stocks,endt);
    begin
    setsysparam(pn_cycle(),cy_1m());//周期-分钟线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey endt to endt+18/24 of stocks end;
    return t;
    end
    '''
    #调用接口执行交互代码
    r = c.call('get_data',stocks,endt,code=tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例09:query接口取数范例
    比如:提取上证50成分股在20250114日的分钟线行情数据
    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(2025,1,14)
    #获取上证50指定日成分股
    stocks = c.exec('return getbkbydate("SH000016",strtodatetime("{}"));'.format(endt)).value()
    #调用接口执行交互代码
    r = c.query(stock=stocks,
          begin_time=endt,
          end_time=datetime(2025,1,14,18,00),
          cycle='1分钟线',
          fields='StockID,StockName,date,close,vol,amount,buy1,bc1,sale1,sc1'
          )
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    实现四:取股票列表一段时间内的行情数据
    范例10:exec接口取数
    比如:提取上证50成分股在20250101-20250114每日的行情数据
    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:=20250101t;
    endt:=20250114t;
    stocks:=GetBKByBegTEndT("SH000016",begt,endt)[:,"代码"];//上证50区间成分股代码
    setsysparam(pn_cycle(),cy_day());//周期-日线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey begt to endt of stocks end;
    return t;
    '''
    #调用接口执行交互代码
    r = c.exec(tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例11:call接口取数范例
    比如:提取上证50成分股在20250101-20250114每日的行情数据
    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(2025,1,1)
    endt=datetime(2025,1,14)
    #获取上证50指定日期区间成分股
    stocks = c.exec('return GetBKByBegTEndT("SH000016",strtodatetime("{}"),strtodatetime("{}"))[:,"代码"];'.format(begt,endt)).value()
    tsl = '''
    function get_data(stocks,begt,endt);
    begin
    setsysparam(pn_cycle(),cy_day());//周期-日线
    t:= select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',['close'],
          ['vol'],['amount'],['buy1'],['bc1'],['sale1'],['sc1']
      from Markettable datekey begt to endt of stocks end;
    return t;
    end
    '''
    #调用接口执行交互代码
    r = c.call('get_data',stocks,begt,endt,code=tsl)
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果:

    范例12:query接口取数范例
    比如:提取上证50成分股在20250101-20250114每日的行情数据
    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(2025,1,1)
    endt=datetime(2025,1,14)
    #获取上证50指定日期区间成分股
    stocks = c.exec('return GetBKByBegTEndT("SH000016",strtodatetime("{}"),strtodatetime("{}"))[:,"代码"];'.format(begt,endt)).value()
    #调用接口执行交互代码
    r = c.query(stock=stocks,
          begin_time=begt,
          end_time=endt,
          cycle='日线',
          fields='StockID,StockName,date,close,vol,amount,buy1,bc1,sale1,sc1'
          )
    if r.error() !=0:
      print(r.message())
    else:
      print(r.dataframe())

    执行结果: