c# - XIRR Calculation -


how calculate excel's xirr function using c#?

according xirr function openoffice documentation (formula same in excel) need solve xirr variable in following f(xirr) equation:
enter image description here
you can calculate xirr value by:

  1. calculating derivative of above function -> f '(xirr)
  2. after having f(xirr) , f'(xirr) can solve xirr value using iterative newton's method - famous formula->
    enter image description here

edit
i've got bit of time so, here - complete c# code xirr calculation:

class xirr     {         public const double tol = 0.001;         public delegate double fx(double x);          public static fx composefunctions(fx f1, fx f2) {             return (double x) => f1(x) + f2(x);         }          public static fx f_xirr(double p, double dt, double dt0) {             return (double x) => p*math.pow((1.0+x),((dt0-dt)/365.0));         }          public static fx df_xirr(double p, double dt, double dt0) {             return (double x) => (1.0/365.0)*(dt0-dt)*p*math.pow((x+1.0),(((dt0-dt)/365.0)-1.0));         }          public static fx total_f_xirr(double[] payments, double[] days) {             fx resf = (double x) => 0.0;              (int = 0; < payments.length; i++) {                 resf = composefunctions(resf,f_xirr(payments[i],days[i],days[0]));             }              return resf;         }          public static fx total_df_xirr(double[] payments, double[] days) {             fx resf = (double x) => 0.0;              (int = 0; < payments.length; i++) {                 resf = composefunctions(resf,df_xirr(payments[i],days[i],days[0]));             }              return resf;         }          public static double newtons_method(double guess, fx f, fx df) {             double x0 = guess;             double x1 = 0.0;             double err = 1e+100;              while (err > tol) {                 x1 = x0 - f(x0)/df(x0);                 err = math.abs(x1-x0);                 x0 = x1;             }              return x0;         }          public static void main (string[] args)         {             double[] payments = {-6800,1000,2000,4000}; // payments             double[] days = {01,08,16,25}; // days of payment (as day of year)             double xirr = newtons_method(0.1,                                          total_f_xirr(payments,days),                                          total_df_xirr(payments,days));              console.writeline("xirr value {0}", xirr);         }     } 

btw, keep in mind not payments result in valid xirr because of restrictions of formula and/or newton method!

cheers!


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -