如果我在2011年6月3日拥有50%的权重,在2011年1月6日拥有50%权重,则加权平均值将为2011年2月6日。
现在,我似乎不知道如何在权重不均匀的情况下做到这一点,因为这不像你可以用DateTime乘以两倍,然后总结结果(或者你可以吗?)。
DateTime dateA = ...;
DateTime dateB = ...;
TimeSpan difference = dateA - dateB;
double units = difference.Ticks;
// Do your weighted logic here on 'units'.
DateTime average = dateA + new TimeSpan(units);
类似于上面的内容(你已经明白了——基本上需要将差异标准化为一种你可以使用的格式,即ticks等)。
您可以找到两个日期(开始和结束)之间的天数差异。在difference_days
上应用权重,并通过startdate + weightedDays
获得最终输出日期
您不能将日期时间乘以一个双精度,但您可以按比例(1到100)为日期1和日期2设置一个值,并计算出您的值在中间的位置。在50/50的情况下,1对100最终是50。
然后,您必须计算出该范围内的天数。然后,您可以乘以加权小数(百分比),并将其转换为天数。然后将该天数与第一个值相加。
既然你可以把日期变成数字,这就提供了一些非常有趣的其他方法来实现这一点。TimeSpan是将其设置为数字的一种方法。
使用DateTime对象的长时间戳。
您能使用DateTime
的Ticks
属性吗?类似于:
DateTime firstDate = new DateTime(2011, 6, 5);
DateTime secondDate = new DateTime(2011, 6, 1);
double weight1 = 0.4;
double weight2 = 0.6;
var averageTicks = (firstDate.Ticks * weight1) + (secondDate.Ticks * weight2) / 2;
DateTime averageDate = new DateTime(Convert.ToInt64(averageTicks));
我认为加权平均公式应该是sumproduct (Weights*Dates)/sum
(Weights)
其中,sumproduct是指所有因素的总和。权重和日期刻度的乘积。如果权重之和=1,则只剩下分子。
我也有同样的问题,只是货币(现金流),这意味着有一个复合的增长折现率\价值衰减率,称为货币的时间价值)。。。
为了避免这个错误,我编写了一个电子表格,位于:https://1drv.ms/x/s!AqGuYeJW3VHggc9ARWCxcHIeodd2Pg
你只需要试验一下!!!。。。请理解,在0%的利率下,结果与其他帖子中描述的加权平均值相同,但随着利率的增加,会出现偏差。然后你必须为你的编程语言构建一个XNPV函数,并将其与你的应用程序融合。
代数书中也有许多增长的例子。也许它们与现金流中的日期时间偏移量有交集