我正在尝试使用刻度数据在运行时构建股票市场条形图(快照)数据。我的股票数据提供者提供对分时级别数据的访问,其中我有一个名为 OnTick 的事件,只要数据提供者发送新分时,就会触发该事件。我希望做以下两个之一,或者如果有人可以提出一个好的选择:
选项1:
在这个选项中,我维护一个 Bar 对象,并在每次得到一个刻度时更新它。OnBar() 事件可以附加到计时器已用事件(1 分钟用于 1 分钟柱等)。
//TickMsg = double price, DateTime dttm
public void OnTick(TickMsg newTick)
{
TaskFactory.StartNew(){UpdateBar(newTick)};//Syntax not specific
}
UpdateBar()
{
//nextBar is a Bar object thats intialized to Open = 0, High = 0, Low = 0, Close = 0
if(nextBar.Open==0)
nextBar.Open = newTick.price;
if(newTick.price>nextBar.High)
nextBar.High = newTick.price;
if(newTick.price<nextBar.Low)
nextBar.Low = newTick.price;
nextBar.Close = newTick.price;
}
public void OnBar(Bar bar)
{
//Process the bar..perform calculations etc
bar = new Bar(0,0,0,0);//Reset the bar
}
选项 2:
在此选项中,我只是将刻度添加到刻度列表并在调用 OnBar 时执行计算。OnBar() 事件可以附加到计时器已用事件(1 分钟用于 1 分钟柱等)。
List <TickMsg> TickList;
public void OnTick(TickMsg newTick)
{
TickList.Add(newTick);
}
public void OnBar()//called on a timer
{
var low = TickList.Min();
var high = TickList.Max();
var close = (from entry in TickList orderby entry.TickMsg.dttm ascending).Last();
var open = (from entry in TickList orderby entry.TickMsg.dttm ascending).First();
TickList.Empty();
}
问题:
- 哪种方法处理更密集?
- 哪种方法需要更多内存?
同样,如果有人对另一种方法有建议,我会全神贯注。