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

Q:python中如何将数组类型的参数传入天软函数中执行?    

  • 说明:
      python中可用列表(list)作为数组类型参数传给天软函数执行
      一维数组可直接传入一个list 例:["SZ000001","SZ000002"]
      二维数组采用列表与字典嵌套的方式传入参数 例:[{"代码":"SZ000001","名称":"万科A"}]
      注:传入数组列名不能为实数,参考:FAQ:Q:python调天软函数参数传递失败,结果返回为空?

    pytsl接口介绍:FAQ:天软pyTSL接口
    tslpy及交互说明:FAQ:2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互

    PyTSL交互范例:
    范例1:获取代码集合的行情数据

    //获取股票列表的指定日期区间的行情数据
    import pandas as pd
    import pyTSL
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
    c.login()
    test = '''
    function get_value(stocks,begt,endt);
    begin
      return select ['StockID'],
             datetimetostr(['date']) as 'date',
             ['close'],
             ['high']
          from Markettable datekey inttodate(begt) to inttodate(endt) of stocks end;
    end;
    '''
    stocks=["SZ000001","SZ000002"]
    begt=20210701
    endt=20210705
    r =c.call('get_value',stocks,begt,endt,code=test,cycle="日线")
    print(pd.DataFrame(r.value()))

    范例2:补充报表部分指标数据

    //补充数据表部分数据
    import pandas as pd
    import pyTSL
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
    c.login()
    test = '''
    function get_value(data);
    begin
      return select ["代码"],
             stockname(["代码"]) as "名称",
             spec(base(10032),["代码"]) as "中证一级行业",
             datetostr(["开始日期"])+" to "+datetostr(["截止日期"]) as "日期区间",
             spec(stockzf(["开始日期"],["截止日期"]),["代码"]) as "区间涨幅(%)",
             spec(stockhsl(["开始日期"],["截止日期"]),["代码"]) as "区间换手率(%)"
         from data end;
    end;
    '''
    data=[{"代码":"SZ000001","开始日期":44378,"截止日期":44381},{"代码":"SZ000002","开始日期":44378,"截止日期":44381}]
    r =c.call('get_value',data,code=test,cycle="日线")
    print(pd.DataFrame(r.value()))

    范例3:在python中导入本地excel数据表至天软函数计算

    //在本地pathname路径excel表的Sheet2的工作簿中存在列名为"代码"的数据表
    //也是先将数据表转换成列表与字典嵌套的格式再传入函数计算
    import pandas as pd
    import pyTSL
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443) #user为天软账号,password 为账号密码
    c.login()
    # 换成自己的路径
    pathname= 'C:/Users/86152/Desktop/代码.xlsx'
    df=pd.read_excel(pathname,sheet_name='Sheet2')
    df=df.to_dict(orient="records")
    test = '''
    function get_value(stocks,begt,endt);
    begin
    t:= select ['StockID'],datetimetostr(['date']) as 'date',['close'],['high']
      from Markettable datekey inttodate(begt) to inttodate(endt) of stocks[:,"代码"] end;
      return t;
    end;
    '''
    r =c.call('get_value',df,20210706,20210707,code=test,cycle="日线")
    print(pd.DataFrame(r.value()))


    TSLPy交互范例
    范例4:传入一维数组获取代码集合的行情数据
    封装天软代码:

    Function get_testdata(stocks,begt,endt);
    Begin
    {
      stocks: 一维字符串数组 证券列表
      begt: int 开始日期
      end: int 截止日期
    }
      setsysparam(PN_Cycle(),cy_day());
      t:= select ["stockid"],
             datetostr(["date"]) as "date",
             ["close"]
         from markettable datekey IntToDate(begt) to IntToDate(endt) of stocks end;
      t:=exportjsonstring(t);
      return t;
    End;

    python代码:

    import TSLPy3 as ts
    import pandas as pd
    import json
    import sys
    sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
    stocks=["SZ000001","SZ000002"]
    data=ts.RemoteCallFunc("get_testdata",[stocks,20210701,20210705],{})
    data=json.loads(data[1])
    print(pd.DataFrame(data))

    范例5:传入数据表补充数据
    封装天软代码:

    Function get_testtable(data);
    Begin
    {
      data: 数据表类型 源数据
    }
      t:=select ["代码"],
           stockname(["代码"]) as "名称",
           spec(base(10032),["代码"]) as "中证一级行业",
           datetostr(["开始日期"])+" to "+datetostr(["截止日期"]) as "日期区间",
           spec(stockzf(["开始日期"],["截止日期"]),["代码"]) as "区间涨幅(%)",
           spec(stockhsl(["开始日期"],["截止日期"]),["代码"]) as "区间换手率(%)"
        from data end;
      t:=exportjsonstring(t);
      return t;
    End;

    python代码:

    import TSLPy3 as ts
    import pandas as pd
    import json
    import sys
    sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
    data=[{"代码":"SZ000001","开始日期":44378,"截止日期":44381},{"代码":"SZ000002","开始日期":44378,"截止日期":44381}]
    data=ts.RemoteCallFunc("get_testtable",[data],{})
    data=json.loads(data[1])
    print(pd.DataFrame(data))