使用股票滴答数据构建基于时间的条形图
本文关键字:时间 条形图 于时间 滴答 构建 数据 | 更新日期: 2023-09-27 18:15:58
我试图在运行时使用tick数据构建股票市场酒吧(快照)数据。我的股票数据提供程序提供了对交易点水平数据的访问,其中我有一个名为OnTick的事件,每当数据提供程序发送新的交易点时就会触发该事件。我希望做下面两个中的一个,或者如果有人能建议一个好的选择:
选项1:
在这个选项中,我维护一个Bar对象并在每次得到一个tick时更新它。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:
在这个选项中,我只是将tick添加到tick列表中,并在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();
}
问题:
- 哪种方法的处理强度更高?
- 哪种方法需要更多内存?
再说一遍,如果有人对另一种方法有什么建议,我洗耳恭听。
您不需要在完成之前显示或访问该栏吗?如果选项2似乎不能实现这一点。我无法想象选项1会成为性能障碍。并且它将使用更少的内存,因为您似乎不会将tick数据保存到任何变量。
我认为最好的方法是第二种。当您在第一次接近时重置工具条时,最低价格将永远不会小于零,因此,工具条上的最低价格将始终为零。
贸易链接就是一个很好的例子。他们的教程涵盖了这一点。此外,由于它是开源的,您可以窥探它是如何完成的。