Построить основанные на времени бары, используя данные биржевых тиков - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь построить данные гистограммы фондового рынка во время выполнения, используя тиковые данные. Мой провайдер данных акций предоставляет доступ к данным уровня тиков, где у меня есть событие 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 ]

1 голос
/ 02 февраля 2012

Вам не нужно отображать или получать доступ к панели до ее завершения?В случае варианта 2, кажется, не достичь этого.Вариант 1, который я никогда не могу себе представить, будет сабом производительности.И он будет использовать меньше памяти, поскольку вы, кажется, не сохраняете данные тиков в какую-либо переменную.

1 голос
/ 27 марта 2012

Я думаю, что лучший подход это второй.Когда вы сбрасываете бар при первом подходе, самая низкая цена никогда не будет меньше нуля, поэтому самая низкая цена на баре всегда будет нулевой.

0 голосов
/ 01 декабря 2011

Торговая ссылка является хорошим примером того, как это делается.Их уроки покрывают это.Кроме того, поскольку это открытый исходный код, вы можете посмотреть, как это делается. Учебник по началу работы находится здесь.

...