ティック データを使用して実行時に株式市場バー (スナップショット) データを構築しようとしています。私の株式データ プロバイダーは、新しいティックがデータ プロバイダーによって送信されるたびにトリガーされる OnTick というイベントがあるティック レベル データへのアクセスを提供します。以下の2つのうちの1つを実行したいと考えています。または、誰かが良いオプションを提案できる場合:
オプション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();
}
質問:
- 処理負荷が高いのはどちらのアプローチですか?
- より多くのメモリが必要なアプローチはどれですか?
繰り返しますが、誰かが別のアプローチについて提案をしている場合は、私はすべて耳を傾けます。