【发布时间】:2020-10-16 07:14:08
【问题描述】:
我有一个 websocket api,它每秒不断地给我数据。我的目标是根据这些数据形成一个 5 分钟的开盘收盘价低点。
这是 Python 代码,它们在 Python 中也是如此:https://gist.github.com/oldmonkABA/f73f5d67bcf85316ac0470919bf54e17
我尝试如下OnTick 方法每 1 秒调用一次,每秒数据如下:
{"InstrumentToken":260105,"LastPrice":23616.6,"Timestamp":"2020-10-16T16:35:01"}
所以我会在每秒之后得到具有不同 LastPrice 和 Timestamp 的相同 json,例如:
{"InstrumentToken":260105,"LastPrice":23620,"Timestamp":"2020-10-16T14:38:02"}
{"InstrumentToken":260105,"LastPrice":23622,"Timestamp":"2020-10-16T14:38:03"}
以此类推,直到:
{"InstrumentToken":260105,"LastPrice":23644,"Timestamp":"2020-10-16T14:39:59"}
现在在下面的对象 latestTickData 我正在收集所有这些数据,预期的输出是:
open = 23616.6,因为它是基于“Timestamp”:“2020-10-16T14:35:01”的起始价格。
close = 23644,基于其最近 5 分钟的价格 "Timestamp":"2020-10-16T14:39:59"。
high = 我可以使用 MAX(所有 5 分钟数据)。
低 = 我可以使用 MIN(所有 5 分钟数据)
C#代码:
private static void OnTick(Tick TickData)
{
Console.WriteLine("Tick " + Utils.JsonSerialize(TickData));
var latestTickData = new MyObject()
{
InstrumentID = TickData.InstrumentToken,
Close = TickData.LastPrice,
High = TickData.LastPrice,
Low = TickData.LastPrice,
Open = TickData.LastPrice,
TimeStamp = TickData.Timestamp.HasValue ? TickData.Timestamp.Value : DateTime.Now
};
现在我将每秒收集一个新数据到latestTickData。
我想根据这个数据形成一个 5 分钟的开盘收盘高低。
我正在考虑对时间戳和 min max 函数进行类似 group by 以查找低位和高位,但代码不起作用。
我尝试使用此代码,但此代码超出 ontick 计算持续数据的方法:
var resultSet = MydataList.GroupBy(i => i.GetStartOfPeriodByMins(5))
.Select(gr =>
new
{
StartOfPeriod = gr.Key,
Low = gr.Min(item => item.Low),
High = gr.Max(item => item.High),
Open = gr.OrderBy(item => item.TimeStamp).First().Open,
Close = gr.OrderBy(item => item.TimeStamp).Last().Close
});
public DateTime GetStartOfPeriodByMins(int numMinutes)
{
int oldMinutes = TimeStamp.Minute;
int newMinutes = (oldMinutes / numMinutes) * numMinutes;
DateTime startOfPeriod = new DateTime(TimeStamp.Year, TimeStamp.Month, TimeStamp.Day, TimeStamp.Hour, newMinutes, 0);
return startOfPeriod;
}
【问题讨论】:
-
“我要识别开收高低数据”那是什么?
-
让我重新表述我的问题。你能定义什么是开放数据吗?高数据?低数据?关闭数据?
-
您的问题是什么?请附上minimal reproducible example,说明该代码的作用、您希望它做什么以及具体您需要什么帮助。 LINQ 对数据项的枚举(序列)进行操作;您的帖子中没有任何内容显示任何数据结构,这些数据结构会累积您似乎想要处理的数据,更不用说任何显示您尝试处理它的内容。
-
听起来像是某种“时间序列”——你在天蓝色吗?
-
我认为您需要查看Rx.Net。它具有可能对您有所帮助的操作。 P.S.:不要搜索 RX.NET 本身!!!!我已经链接到github了。