performance - 缺乏性能 - 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 = 现金流列表的长度。
获取InitialBalance
和CurrentBalance
不是问题,但与之相关的整个历史CashFlows
是。
强调一下,没有任何数学技巧可以从MWR_n到MWR_n+1仅使用参考日期和前一天的数据以及每次应用程序处理新的从整个历史记录中获取所有数据的操作一天离表演还很远。
考虑到这一点,我需要帮助来改进(或设计新的)解决方法。
为了使应用程序能够在不影响性能的情况下计算 MWR,可以做些什么?
自投资组合创建以来,在不构建定时炸弹的情况下获取数据的可能解决方案是什么(每个处理都会检索整个数据历史记录,因此随着时间的推移,需要更多数据)?
如今,公司一般如何使用改进的 Dietz 方法计算MWR?
提前致谢。
解决方案
推荐阅读
- python - Pandas:从具有多个字典列表的列中提取值并将值拆分为多个列
- php - 如何使用 Api-Platform 保存空数据?
- python - 使用 fsolve 和字符串方程
- python - Python shell 在打印 4788 行后重新启动
- ruby-on-rails - 如何动态地在 Rails 中创建连接
- fortran - 运行使用 f2py 编译的 fortran 程序时输出不一致
- command - (WinDbg) 在使用 WinDbg(内核模式)切换到进程上下文后,如何切换回内核上下文?
- swiftui - 我无法在 SwiftUI 中将 NavigationItemTitle 覆盖到 TabView
- javascript - 在循环内设置本地存储项
- python - 如何使表单重定向到 Django 中用户给出的 URL?