FAQ > 金融建模 > 应用案例 > 数据提取

Q:如何提取指定日在市交易的ETF交易代码集合?    

  • A:可通过一级市场代码获取基金的设立日与退市日进行判断,最后再获取其交易代码
    如下:
      endt:=20201230T;
      stocks:=getbkall('ETF');//所有ETF基金

      //判断出指定日在运作的
      dendt:=datetoint(endt);
      t1:=select thisrow as 'code',
            spec(base(302033),thisrow) as '交易代码',
            spec(base(302003),thisrow) as '设立日',
            GetFundLastEndDate(thisrow) as '退市日'
        from stocks end;
      t1:= select * from t1 where ['设立日'] and ['设立日']<=dendt and (['退市日']=0 or ['退市日']>=dendt) end;
      //return t1[:,"交易代码"]; //取交易代码列表
      return t1;

    注:可以将这一段代码封装出来,endt做为参数,就可以取指定日的了

    其它方式:获取ETF指定日一级市场代码

    方式一:通过FundsOperateFunds(funds,EndT)指定日指定列表中还在运作的基金进行筛选
    stocks:= getbkall("ETF");
    return FundsOperateFunds(stocks,20200101T);


    方式二:FundOperateFundsbyBkname函数可判断基金在指定日是否上市与清算,可采用该函数进行筛选
    实现代码:
    bks:='ETF';
    endt:=20200101T;
    stock1:=FundOperateFundsbyBkname(bks,endt); //从现有的“ETF”基金中去掉指定日还未上市的
    //从已退市基金中筛选出指定日还在运作的,且交易方式属于“ETF”的基金
    stock2:=FundOperateFundsbyBkname("已退市基金",endt);
    stock2:= sselect thisrow from stock2 where spec(base(302002),thisrow) in str2array(bks) end;
    return stock1 union2 stock2;//两种合并,返回指定交易方式在指定日的还在运作的基金集合