使用股票价格数据构建基于时间的柱

时间:2011-11-29 09:35:41

标签: c# algorithmic-trading

我正在尝试使用tick数据在运行时构建股票市场Bar(快照)数据。我的库存数据提供商提供对滴答级别数据的访问,其中我有一个名为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(); 
}

问题:

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

同样,如果某人对替代方法有建议,我会全力以赴。

3 个答案:

答案 0 :(得分:1)

在完成之前,您是否需要显示或访问该栏?如果选项2似乎没有实现这一点。选项1我无法想象会出现性能障碍。并且它将使用更少的内存,因为您似乎不会将tick数据保存到任何变量。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Trade link就如何完成就是一个很好的例子。他们的教程涵盖了这一点。此外,由于它是开源的,您可以查看它是如何完成的。 The getting started tutorial is here.