1

株式の日中出来高プロファイルを分析しています。私は2つのことをうまく行う(大まかな)コードを作成しましたが、ゆっくりとしています。1 つの株は、特定の期間に 20 万件以上の取引を行うことができ、約 200 株を分析したいと考えています。

私のコードは 3 か月分の取引データを検索し、データを毎日 10 分のバケットに分割します。これは、株式がバケットごとに少なくとも x 値で取引されるようにするためです。次に、日中のバケットを時間のバケットだけに集計して、平均ボリューム分布を把握します。

以下のコード サンプルは、データをビン化し、ビンごとに集計する方法を示しています。

% Totals by time bucket

for i = 1:size(VALUE,1)
    MyDay = day(datenum(sprintf('%d',VALUE(i,1)),'yyyymmdd'));
    MyMonth = month(datenum(sprintf('%d',VALUE(i,1)),'yyyymmdd'));
    MyYear = year(datenum(sprintf('%d',VALUE(i,1)),'yyyymmdd'));
    StartHour = hour(VALUE(i,2));
    StartMinute = minute(VALUE(i,2));
    EndHour = hour(VALUE(i,3));
    EndMinute = minute(VALUE(i,3));
    if StartMinute ~= 50
        t = (day(MyTrades(:,1)) == MyDay & month(MyTrades(:,1)) == MyMonth & year(MyTrades(:,1)) == MyYear & hour(MyTrades(:,1)) == StartHour & minute(MyTrades(:,1)) >= StartMinute & minute(MyTrades(:,1)) <= EndMinute);
    else
        t = (day(MyTrades(:,1)) == MyDay & month(MyTrades(:,1)) == MyMonth & year(MyTrades(:,1)) == MyYear & hour(MyTrades(:,1)) == StartHour & hour(MyTrades(:,1)) < EndHour & minute(MyTrades(:,1)) >= StartMinute);
    end    
    tt = MyTrades(t,:);
    MyVALUE(i,1) = sum(tt(:,5));
end  





% Aggregate totals

for ii = 1:50
    VWAP(ii,1) = datenum(0,0,0,9,0,0)+datenum(0,0,0,0,10,0)*ii-datenum(0,0,0,0,10,0) ;
    VWAP(ii,2) = datenum(0,0,0,9,0,0)+datenum(0,0,0,0,10,0)*ii;
    StartTime = VWAP(ii,1);
    temp = (VALUE(:,2) == StartTime);
    temp2 = VALUE(temp,:);
    VWAP(ii,3) = sum(temp2(:,4))/100;
end

これらのタイプの「ブルートフォース」分析を計算する、よりエレガントで(より重要なことに)より高速な方法はありますか?

4

1 に答える 1

1

DateNumberのような複雑なデータを使用する代わりに、タイムスタンプを使用して、日付を1回だけ値にします。

コードを完全に書き直す必要がありますが、タイムスタンプで考える方がコンピューティング(およびDB)に適しています

DateNumberのタイムスタンプから変換するためのいくつかのヘルプがあります:http://www.mathworks.it/matlabcentral/newsreader/view_thread/119237

于 2012-09-17T12:13:38.957 に答える