我有一张表格,上面有一些资产(产品)的每日价格,有些日子不见了。我想获得月末价格以计算每年的价格波动。价格波动被定义为月末价格的标准差。
如果缺少月底日期,例如 2010 年 12 月 31 日,算法必须向后搜索产品的日期并使用最近的日期作为月底日期。
有没有一种简单的方法可以用 c# 实现这个逻辑?
好的 - 如果你想要月底...
DateTime theDate = DateTime.Now; // start with any date....
DateTime endOfMonth = new DateTime(theDate.Year, theDate.Month + 1, 1).AddDays(-1);
然后在你的 Linq 中使用它。
您需要的可能是带有目标日期和源日期的日期采样(或日期算法)。
请参阅按日期过滤和采样表 http://finaquant.com/filtering-and-sampling-tables-by-dates/2606
这不应该太复杂。
假设您有一个PriceData
实例列表,其中PriceData
包括:
class PriceData
{
public DateTime Date { get; set; }
public double Price { get; set; }
}
List<PriceData> prices = ...
var lastPricePerMonth = prices.GroupBy(x => x.Date.Year * 12 + y.Date.Month)
.Select(x => x.OrderByDescending(y => y.Date)
.First());
PriceData
这将返回每个月的最新对象。