2

ティック データを使用して実行時に株式市場バー (スナップショット) データを構築しようとしています。私の株式データ プロバイダーは、新しいティックがデータ プロバイダーによって送信されるたびにトリガーされる 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(); 
}

質問:

  • 処理負荷が高いのはどちらのアプローチですか?
  • より多くのメモリが必要なアプローチはどれですか?

繰り返しますが、誰かが別のアプローチについて提案をしている場合は、私はすべて耳を傾けます。

4

3 に答える 3

1

完了する前にバーを表示またはアクセスする必要はありませんか? オプション2がそれを達成していないように思われる場合。オプション 1 パフォーマンスが低下することは決して想像できません。また、ティックデータを変数に保存していないように見えるため、使用するメモリが少なくなります。

于 2012-02-02T00:06:06.470 に答える
1

最善のアプローチは2番目だと思います。最初のアプローチでバーをリセットすると、最低価格がゼロ未満になることはありません。そのため、バーの最低価格は常にゼロになります。

于 2012-03-27T19:29:37.073 に答える