FAQ > 金融建模 > 数据提取 > 行情数据

Q:如何获取复权因子数据?    

  • A:天软行情数据中,提供了复权与不复权的行情数据,复权因子可以通过取复权与不复权之后的价格进行计算得到,本文主要介绍通过这种方式计算的复权因子模型用法。
    按交易所发送的除权后的昨收(系统昨收)与实际昨收计算复权比例进行累乘得到的复权因子,取数方式参考:FAQ:Q:怎么取股票复权因子

    复权因子模型stock_Adjust_ForwardPriceFactor_Cal
    定义:stock_Adjust_ForwardPriceFactor_Cal(Endt,Rateday:date,Rate:int):real
    说明:从endt收盘买入到Rateday收盘值多少钱,
    以endt为复权基准日,取begt的复权价/不复权价作为复权因子。
    当取后复权因子时,endt<rateday,一般endt可为上市日;
    当取前复权因子时,endt>rateday,一般endt可为最新交易日;
    注:endt<上市日时,复权因子为1。
    支持证券:股票、ETF、LOF、可转债 ,其中ETF与LOF用交易代码取数。
    参数
      endt:日期,指定日
      rateday:日期,复权基准日,参考:pn_RateDay
      rate:整数,复权方式,参考:pn_Rate
    返回:real,指定日价格复权因子。
    范例
    范例01:获取个股指定日后复权比例复权因子
    //获取SZ300775在20260430的后复权比例复权因子
    setsysparam(pn_stock(),"SZ300775");
    endt:=firstday();
    rateday:=20260430t;
    rate:=1; //比例复权
    return stock_Adjust_ForwardPriceFactor_Cal(endt,rateday,rate);
    //0.9721


    范例02:获取个股指定日期区间的前复权比例复权因子
    //获取SZ300775在自上市-20260609的前复权比例复权因子
    setsysparam(pn_stock(),"SZ300775");
    begt:=firstday();
    endt:=20260609t;
    rate:=1; //比例复权
    setsysparam(pn_date(),endt);
    n:=StockTradeDays(begt,endt);
    return nday(n,"日期",datetostr(sp_time()),
          "复权因子",stock_Adjust_ForwardPriceFactor_Cal(endt,sp_time(),rate));
    部分结果:


    范例03:获取多个股票指定日的后复权复杂复权因子
    //获取科创50股票在20260430的后复权复杂复权因子
    rateday:=20260430t;
    stocks:=getbkbydate("SH000688",rateday);//指定日成份股列表
    r:=array();
    rate:=2; //复杂复权
    strt:=datetostr(rateday);
    for i,stock in stocks do
    begin
      setsysparam(pn_stock(),stock);
      endt:=firstday();
      r[i,"代码"]:=stock;
      r[i,"名称"]:=stockname(stock);
      r[i,"日期"]:=strt;
      r[i,"复权因子"]:=stock_Adjust_ForwardPriceFactor_Cal(endt,rateday,rate);
    end
    return r;
    部分结果:


    范例04:获取多个股票指定区间的前复权复杂复权因子
    //获取科创50股票在20240101-20260430的前复权复杂复权因子
    begt:=20240101t;
    endt:=20260430t;
    days:=MarketTradeDayQk(begt,endt);
    stocks:=getbkbydate("SH000688",endt);//指定日成份股列表
    rate:=2; //复杂复权
    r:=array();
    for i,stock in stocks do
    begin
      setsysparam(pn_stock(),stock);
      name:=stockname(stock);
      for j,day in days do
      begin
        r[x,"代码"]:=stock;
        r[x,"名称"]:=name;
        r[x,"日期"]:=datetostr(day);
        r[x,"复权因子"]:=stock_Adjust_ForwardPriceFactor_Cal(endt,day,rate);
        x++;
      end
    end
    return r;
    部分结果: