首页 > 解决方案 > 缺乏性能 - MWR Dietz 方法

问题描述

我一直在开发一个负责投资组合历史数据处理的.NET 5应用程序。它基本上通过运行后台服务来编排计算,该服务在处理结束时将数据写入AWS Aurora内的MySQL 5.7.12数据库。

数据库建模由 4 个主表表示:3 个其列是通过 REST API 从外部数据集请求数据写入的,1 个其列是根据前 3 个表的数据计算和写入的。

由于应用程序处理大量数据,几乎所有计算都是通过使用数学技巧完成的,其中包括使用当前参考日期的数据以及前一天的数据。通过这样做,应用程序可以节省计算资源并变得更加高性能。

但是,由于修改后的 Dietz 方法需要自投资组合创建以来的数据,因此无法使用此技巧进行货币加权收益率计算。

澄清一下,之所以选择修改后的 Dietz 方法,是因为最常见的内部收益率计算不适合公司的财务需求。

因此,公式如下所示:

MWR = (InitialBalance - CurrentBalance - SUM(CashFlows_i)) / (CurrentBalance - SUM(Weight_i * CashFlows_i))

两个SUMS都在日期间隔(从第一个日期到参考日期)和Weight_i = ni/n上定义,其中n = 现金流列表的长度。

获取InitialBalanceCurrentBalance不是问题,但与之相关的整个历史CashFlows是。

强调一下,没有任何数学技巧可以从MWR_nMWR_n+1仅使用参考日期和前一天的数据以及每次应用程序处理新的从整个历史记录中获取所有数据的操作一天离表演还很远。

考虑到这一点,我需要帮助来改进(或设计新的)解决方法。

为了使应用程序能够在不影响性能的情况下计算 MWR,可以做些什么?

自投资组合创建以来,在不构建定时炸弹的情况下获取数据的可能解决方案是什么(每个处理都会检索整个数据历史记录,因此随着时间的推移,需要更多数据)?

如今,公司一般如何使用改进的 Dietz 方法计算MWR

提前致谢。

标签: performancefinancesoftware-designportfolioirr

解决方案


推荐阅读