【发布时间】:2022-01-02 09:43:19
【问题描述】:
我从股票提供商处获取数据,其中包含延长交易时间的数据。
数据是我从 JSON 转换为 List<Aggregate> 的聚合 1 分钟数据点,其中聚合包含高、低、打开、关闭和聚合 1 分钟窗口开始的时间。
我的查询包含多个交易日——可能是数百个,也可能是数千个。而且我对指标的计算必须排除盘后数据。
所以我有一个包含数百个对象的列表:
public class Aggregate
{
public decimal Close { get; set; }
public decimal UnixTimestamp { get; set; } // milliseconds
...
}
还有跨越数百天的DateTime FromDate 和DateTime ToDate。
现在,过滤盘后数据的一种可靠方法是将每个项目的UnixTimestamp 与太平洋标准时间上午 9:30 至下午 16:00 的常规交易时间窗口进行比较。这需要将每个UnixTimestamp 转换为DateTime。这是很多比较...直观地说,最好将FromDate 和ToDate 转换为UnixTimestamp 并使用Linq 过滤掉项目。
long unixTimeMsecToDate = new DateTimeOffset(aggrParams.ToDate).ToUnixTimeMilliseconds();
long unixTimeMsecFromDate = new DateTimeOffset(aggrParams.FromDate).ToUnixTimeMilliseconds();
但是,我无法确定确切的代码...循环查看日期?怎么样?
【问题讨论】:
-
如果您有
List<Aggregate,那么您只需使用LINQWhere方法过滤:listAggregate.Where(a => unixTimeMsecFromDate <= a.UnixTimestamp && a.UnixTimestamp <= unixTimeMsecToDate)。您可以选择在末尾执行ToList()来记忆过滤。 -
问题是 Aggregate FromDate 和 ToDate 是 DateTime 格式,我有多个日期,我已经聚合了 1 分钟的数据......所以,unixTimeMsecFromDate 和 unixTimeMsecToDate 需要以某种方式计算每个日期...
-
“聚合 FromDate 和 ToDate”指的是什么?您有一个从日期到日期的范围,您可以将其转换为 Unix 时间戳格式,然后直接使用
Where进行过滤。那是两次转换。你的public class Aggregate说public decimal UnixTimestamp=> 在Aggregate中没有DateTime。