基金复权算法:
比例复权:
利用基金当天的单位净值与前一交易日的单位净值的比例近似计算。
计算公式:复权净值=单位净值*复权因子。
其中,复权因子的计算考虑了基金的分红和拆分,计算公式如下:
基准日:复权因子=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;
部分结果:
