我正在分析股票的日内交易量概况。 我建立了一段(粗糙的)代码,可以很好地完成两件事,但是速度很慢。 在给定的时间内,一支股票的交易量可以超过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

有没有更优雅,更重要(更快)的方法来计算这些类型的“蛮力”分析?

#1楼 票数:1

而不是使用复杂的数据(如DateNumber),而要使用时间戳并使dateenum仅获得一次值。

您将不得不完全重写代码,但是考虑使用时间戳更易于计算(和数据库)

以下是一些有关从DateNumber中的时间戳转换的帮助: http : //www.mathworks.it/matlabcentral/newsreader/view_thread/119237

  ask by E.D. translate from so

未解决问题?本站智能推荐:

2回复

如何加快循环速度?

我有以下代码需要很长时间才能运行。 我如何加快速度?
2回复

for循环中的计算速度

我在matlab中编写了一个小循环来生成随机NxN矩阵。 循环是 我第一次尝试循环例程, 这给了我0.000169秒的tau。 我认为循环然后需要大约1.69秒。 它没有,它花了555.018280s与球迷疯狂。 在那儿 a)速度与迭代次数线性无关的原因是什么? b)为
1回复

Matlab中每个for循环迭代的速度降低

我在Matlab中编写了一个while循环,应该使用Matlab中的tic toc延迟在指定的时间间隔内将数组中的每个值从Matlab发送到arduino,然后读取值并将它们存储在变量中并对其进行图形化。 while循环的输出随着每次连续的迭代而减慢。 我增加了缓冲区大小,这对它有很大帮
1回复

ODE45加快循环速度

我有一个耦合的一阶ODE来解决表格 这取决于我必须在某个范围内解决的通用参数。 我可以使用ODE45和for循环来解决系统,该循环会在每个循环中增加目标参数,但是,这非常慢。 我可以避免循环解决此问题吗? 或针对此类问题的最佳实践是什么。
1回复

OpenCV执行速度(用于循环和meanStdDev)

我是OpenCV和C ++的新手(如果在MATLAB和LabView上进行图像处理,则可以公平地学习之后,现在学习)。 我有一个很奇怪的问题,想问一下您的意见。 我正在尝试做一个相当简单的事情:在灰度图像(〜4500X2000 pix)上移动窗口1x9 stdev。 这是代码的核心:
2回复

Matlab:使用字符串分析加快循环速度

我有一个非常有趣的csv文件,其中包含三列。 现在,我想将这些列尽快加载到matlab矩阵中。 目前我正在做的是 但是,对于20万行,这需要30秒钟。 这意味着每条线150 µs。 这真的很慢。 parfor不接受该代码。 现在,我想知道是什么原因导致了for循环中的瓶颈,以
2回复

使用嵌套的for循环时提高数组填充的速度-MATLAB

我已经编写了此函数以根据某些条件查找索引。 它应该可以工作,问题是在我的PC上运行需要2-3天。 有什么办法可以将其降低到一个小时以下(或更快)? 这确实不需要非常快。 但是2天太慢了。 我不希望对该功能进行深入分析(尽管会很好)。 只是一些一般的改进。 本质上就是3个for循
2回复

向量化时由于内存不足而加快了循环速度

我可以在矢量化此for循环中获得帮助,但是如果我尝试在array1 / xfreq_orig有500,000行或t_rebuilt有500,000行时运行它,我用完了16gig的ram。 这是向量化版本,但是当array1 / xfreq_orig行的大小大如500,000时,或者如果t_r