FAQ > 金融建模 > 建模问题 > 基金相关

Q:天软基金复权净值的提取与算法说明    

  • 基金复权算法:
    比例复权:
      利用基金当天的单位净值与前一交易日的单位净值的比例近似计算。
        计算公式:复权净值=单位净值*复权因子。

      其中,复权因子的计算考虑了基金的分红和拆分,计算公式如下:
        基准日:复权因子=1;
        后复权:复权基准日之后到指定日期分红了N次;
         
        Naw:除权除息日单位净值
        CF:拆分比,无拆分时,拆分比为1
        FH:红利比
        RightFactor:复权因子
        前复权:复权基准日之前到指定日期分红了N次;
            
        Naw:除权除息日单位净值
        CF:拆分比,无拆分时,拆分比为1
        FH:红利比
        RightFactor:复权因子
    复杂复权:
        后复权:复权基准日之后到指定日期分红了n次;
        
        NW:指定日复权净值
        Naw:指定日单位净值
        CF:拆分比,无拆分时,拆分比为1
        FH:红利比
        前复权:复权基准日之前到指定日期分红了n次;
          
        NW:指定日复权净值
        Naw:指定日单位净值
        CF:拆分比,无拆分时,拆分比为1
        FH:红利比
    附件:
    附件:基金比例复权手算.xlsx
    附件:基金复杂复权手算.xlsx

    基金复权净值的提取:
    FundNAWByRateBegtEndt
    定义:FundNAWByRateBegtEndt(Begt:DateTime,Endt:DateTime):Array
    说明:利用基金的单位净值计算其复权净值。该函数与系统参数证券代码、复权方式、复权基准日有关。
       证券代码:基金的一级市场代码,如OF000001
       复权方式:0为不复权(默认值)、1为比例复权、2为复杂复权。
       复权基准日:
          在复权方式不为0的情况下,
          -1为以基金设立日为基准日,则所有的数据后复权;
          0为最后交易日(即基金净值最后公布日)为复权基准日,则所有的数据前复权;
          任意日期Endt,即为当上市日<EndT<当前日期,则计算日期小于EndT时进行前复权,计算日期大于EndT时进行后复权。
    参数:
      Begt:DateTime 开始日期
      Endt:DateTime 截止日期
    范例:
    范例一:比例复权

    //计算华夏上证50ETF从设立日至20190425的复权净值(比例复权)。
    setsysparam(pn_stock(),"OF510050");
    setsysparam(pn_rate(),1);         //比例复权
    setsysparam(PN_RateDay(),-1);    //设立日为基准日复权,后复权
    begt:=inttodate(base(302003));     //设立日
    endt:=20190425T;
    FQ:=FundNAWByRateBegtEndt(begt,endt);   // 设立日到 20190425的复权净值
    return FQ;

    部分结果:

    范例二:复杂复权

    //计算华夏上证50ETF从设立日至基金净值最后公布日的复权净值(复杂复权)。
    setsysparam(pn_stock(),"OF510050");
    setsysparam(pn_rate(),2);         //复杂复权
    setsysparam(PN_RateDay(),0);    //最后交易日为基准复权,即基金净值最后公布日为基准日
    begt:=inttodate(base(302003));    //设立日
    endt:=inttodate(base(328001));    //基金净值最后公布日
    FQ:=FundNAWByRateBegtEndt(begt,endt);   
    return fq;

    部分结果:

    范例三:复权净值增长率

    //计算华OF161005从设立日至基金净值最后公布日的复权净值(比例复权),累计增长率。
    setsysparam(pn_stock(),"OF161005");
    setsysparam(pn_rate(),1);         //比例复权
    setsysparam(PN_RateDay(),0);    //最后交易日为基准复权,即基金净值最后公布日为基准日
    begt:=inttodate(base(302003));    //设立日
    endt:=inttodate(base(328001));    //基金净值最后公布日
    FQ:=FundNAWByRateBegtEndt(begt,endt);
    FQ[:,"复权净值增长率(%)"]:=(FQ[:,"复权净值"]/FQ[0,"复权净值"]-1)*100;
    return fq;

    部分结果: