我正在分析股票的日内交易量。我已经构建了一个(粗略的)代码,它可以很好地完成两件事,但速度很慢。在一定时期内,一只股票可以在20万股以上交易,我想分析大约200只股票。
我的代码看起来超过3个月'值得交易的数据,每天将数据分成10分钟的桶。我这样做是为了确保股票每桶交易至少x值。然后,我将日内桶统计到时间桶,以了解平均体积分布。
下面的代码示例仅显示我如何bin数据然后按bin聚合:
% 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
是否有更优雅和(更重要的)更快速的方式来计算这些类型的&#34;蛮力&#34;分析
答案 0 :(得分:1)
不使用像DateNumber这样的复杂数据,而是使用时间戳并使日期只有一次作为值。
你必须完全重写你的代码,但是考虑时间戳更多的是计算(和数据库)友好
这里有一些帮助来转换DateNumber中的时间戳:http://www.mathworks.it/matlabcentral/newsreader/view_thread/119237