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

Q:Python调天软取数范例01:行情数据的提取    

简述
1、在进行交互取数前,需做相关的配置,其操作请查看文档:FAQ:2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
2、天软返回的数据为gkb编码,在python3及以上版本中,对汉字或字符串的返回需要进行转码操作。
参考:FAQ:Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题
  • 本页范例的文档版本可下载:附件:Python调天软取数应用范例.pdf
    范例中相关天软函数附件:附件:第三方交互取数建模.tslfunc

    范例01:取个股指定时间点收盘价
    方法一:执行天软语句串
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    t=ts.EncodeDate(2019,4,12)
    #取个股t日收盘价-执行语句串
    data=ts.RemoteExecute("return close();",{"StockID":"SZ000002","CurrentDate":t,"Cycle":"日线"})
    if not data[0]:
      print(data[1])
    else:
      print(data[0],data[2].decode("gbk"))

    方法二:调用天软函数
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    t=ts.EncodeDate(2019,4,12)
    #取个股指定T日收盘价-调用天软函数
    data=ts.RemoteCallFunc("close",[],{"StockID":"SZ000002","CurrentDate":t,"Cycle":"日线"})
    if not data[0]:
      print(data[1])
    else:
      print(data[0],data[2].decode("gbk"))

    范例02:取个股截面数据:执行天软语句串
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    import json
    #取个股截面数据-执行语句串
    s='''
     data:=``array('stockid':DefaultStockID(),'date':datetostr(sp_time()),'close':close(),'vol':vol,'amount':amount());
      t:=exportjsonstring(data);
      return t;
    '''
    t=ts.EncodeDate(2019,4,12)
    data=ts.RemoteExecute(s,{"StockID":"SZ000002","CurrentDate":t,"Cycle":"日线"})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))

    范例03:取个股时间序列数据
    方法一:取个股时间序列数据-执行语句串s1:nday用法
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    import json
    s1="""
     setsysparam(pn_stock(),'SZ000002');//股票
     setsysparam(pn_cycle(),cy_day());//周期
     setsysparam(pn_date(),20190418T);//截止时间点
     n:=tradedays(20190410T,20190418T);//时间段内交易日数
     data:=nday(n,'date',datetostr(sp_time()),'close',close(),'vol',vol(),'amount',amount());
     return exportjsonstring(data);
    """
    data=ts.RemoteExecute(s1,{})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))

    方法二:取个股时间序列数据-执行语句串s2:markettable
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import json
    import TSLPy3 as ts
    s2='''
      data:=select ['date'],['close'],['vol'],['amount'] from markettable datekey 20190410T to 20190418T of 'SZ000002' end;
      return exportjsonstring(data);
    '''
    data=ts.RemoteExecute(s2,{"Cycle":"日线"})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))

    方法三:取个股时间序列数据-调用天软函数->在天软中封装取数模型GetData_01(StockStr,begT,endT,cy)
    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import json
    import TSLPy3 as ts
    StockStr='SH000001'
    begT=ts.EncodeDate(2019,4,10)
    endT=ts.EncodeDate(2019,4,18)
    cy='日线'
    data=ts.RemoteCallFunc("GetData_01",[StockStr,begT,endT,cy],{})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))

    范例04:取组合截面数据
    方法一:取组合截面数据-执行天软语句串
    import sys
    sys.path.append("C:/program files/Tinysoft/Analyse.NET")
    import TSLPy3 as ts
    tsstr="""
    setsysparam(pn_cycle(),cy_day());
    a:=array('SZ000001','SH600000','SH603967','SZ000333');
    t:=select ['StockID'],datetostr(['date']) as 'date',['open'],['high'],['low'],['close'] from markettable datekey 20190507T to 20190507T+0.999 of a end;
    return t;
    """
    data= ts.RemoteExecute(tsstr,{})
    if not data[0]:
      print(data[1])
    else:
      print(data[0],data[2].decode("gbk"))

    方法二:取组合截面数据-调用天软函数->在天软中封装取数模型GetData_02(StockStr,EndTime,cy,rate,rateday)
    import sys
    sys.path.append("C:/program files/Tinysoft/Analyse.NET")
    import TSLPy3 as ts
    import json
    data= ts.RemoteCallFunc('GetData_02',['SZ000001;SH600000;SH603967;SZ000333',ts.EncodeDate(2019,5,7),"日线",0,-1],{})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))

    范例05:取组合时间序列数据
    方法一:取组合时间序列数据-执行天软语句串s1:Nday
    import sys
    sys.path.append("C:/program files/Tinysoft/Analyse.NET")
    import TSLPy3 as ts
    tsstr="""
    SetSysParam(pn_date(),20190507T); //设置当前时间
    SetSysParam(pn_cycle(),cy_day()); //设置系统周期
    t:=array();
    a:=array('SZ000001','SH600000','SH603967','SZ000333');
    for i:=0 to length(a)-1 do
    begin
     setsysparam(pn_stock(),a[i]);
     t&=Nday(5,'date',datetostr(sp_time()), //&的作用相当于union--将数组纵向合并
       'open',open(),
       'high',high(),
       'low',low(),
       'close',close());
    end
    return t;
    """
    data= ts.RemoteExecute(tsstr,{})
    if not data[0]:
      print(data[1])
    else:
      print(data[0],data[2].decode("gbk"))

    方法二:取组合时间序列数据-执行天软语句串s2:Markettable
    import sys
    sys.path.append("C:/program files/Tinysoft/Analyse.NET")
    import TSLPy3 as ts
    tsstr="""
    SetSysParam(pn_cycle(),cy_day()); //设置系统周期
    a:=array('SZ000001','SH600000','SH603967','SZ000333');
    t:=select ['StockID'],datetostr(['date']) as 'date',['open'],['high'],['low'],['close'] from markettable datekey 20190429T to 20190507T+0.999 of a end;
    return t;
    """
    data= ts.RemoteExecute(tsstr,{})
    if not data[0]:
      print(data[1])
    else:
      print(data[0],data[2].decode("gbk"))

    方法三:取组合时间序列数据-调用天软函数->在天软中封装取数模型GetData_03(StockStr,begt,endt,cy,rate,rateday)
    import sys
    sys.path.append("C:/program files/Tinysoft/Analyse.NET")
    import TSLPy3 as ts
    import json
    data= ts.RemoteCallFunc('GetData_03',['SZ000001;SH600000;SH603967;SZ000333',ts.EncodeDate(2019,4,29),ts.EncodeDate(2019,5,7),"日线",0,-1],{})
    if not data[0]:
      print(json.loads(data[1]))
    else:
      print(data[0],data[2].decode("gbk"))