「Java 开发小记」计算收益率(XIRR)

382 阅读1分钟

🙏废话不多说系列,直接开干🙏

女23.webp

一、第三方依赖

(1)Maven 依赖
<dependency>
    <groupId>org.decampo</groupId>
    <artifactId>xirr</artifactId>
    <version>1.2</version>
</dependency>
(2)程序演示
public static void main(String[] args) {
    double rate = new Xirr(
        new Transaction(-1000, "2016-01-15"),
        new Transaction(-2500, "2016-02-08"),
        new Transaction(-1000, "2016-04-17"),
        new Transaction( 5050, "2016-08-24")
    ).xirr();
    // Prints 0.2504234710540838
    System.out.println(rate);
}

⚠注意:excelWPSOffice)和此程序的差异!

image.png

二、再次封装程序

针对 org.decampo.xirr 封装,得到 java-xirr 依赖包程序。(这个自己网上下载哈,见 附录

image.png

(1)测试程序
import com.littlefox.IRRUtil;
import com.littlefox.xirr.Transaction;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 封装 XIRR 程序
 */
public class XirrUtil {

    public static void main(String[] args) {
        testXirr();
        testIrr();
    }

    public static void testXirr(){
        List list = Arrays.asList(
                new Transaction(-10000,"2008-01-01"),
                new Transaction(3250,"2009-02-15"),
                new Transaction( 2750,"2009-04-01"),
                new Transaction(4250,"2008-10-30"),
                new Transaction(2750,"2008-03-01")
        );
        //Assert.assertEquals("0.3733625335190808", s);
        String s = IRRUtil.xirr(list, 365).toString();
        //Assert.assertEquals("0.3733625335188315", s1);
        String s1 = IRRUtil.xirr(list, 365, 0.1D).toString();
        System.out.println(s + " " + s1);
    }

    public static void testIrr(){
        Double[] arrays= {-700000.0,120000.0,150000.0,180000.0,210000.0,260000.0};
        List<Transaction> list= Arrays.stream(arrays).map(x -> new Transaction(x)).collect(Collectors.toList());

        //Assert.assertEquals("0.08663094803653153", s);
        String s = IRRUtil.irr(list).toString();
        //Assert.assertEquals("0.0866309480365316", s1);
        String s1 = IRRUtil.irr(list, 0.3D).toString();
        System.out.println(s + " " + s1);
    }
}

得出结果:

0.3733625335190808 0.3733625335188315
0.08663094803653153 0.0866309480365316

附录

  1. XIRR 计算语法:XIRR 函数 (microsoft.com)
  2. XIRR maven 仓库地址:org.decampo : xirr - Maven Central Repository Search
  3. 国内兼容XIRR的JAR包:java-irr/IRRUtil.java at master · rockychen1221/java-irr · GitHub【附件】

🙏至此,非常感谢阅读🙏

女23.webp