2

我正在尝试使用刻度数据在运行时构建股票市场条形图(快照)数据。我的股票数据提供者提供对分时级别数据的访问,其中我有一个名为 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(); 
}

问题:

  • 哪种方法处理更密集?
  • 哪种方法需要更多内存?

同样,如果有人对另一种方法有建议,我会全神贯注。

4

3 回答 3

1

Don't you need to display or access the bar before it's completed? In case option 2 seems not to achieve that. Option 1 I can never imagine will be a performance clog. And it will use less memory, as you don't seem to save the tick data to any variable.

于 2012-02-02T00:06:06.470 回答
1

我认为最好的方法是第二种。当您在第一次接近时重置柱线时,最低价格永远不会小于零,因此,柱线的最低价格将始终为零。

于 2012-03-27T19:29:37.073 回答
0

贸易链接是如何完成的一个很好的例子。他们的教程涵盖了这一点。此外,由于它是开源的,您可以了解它是如何完成的。入门教程在这里。

于 2011-12-01T08:49:26.453 回答