15 minutes intervals

135 views (last 30 days)
Lu
Lu on 18 Apr 2011
Hi everyone!
I have some mat files that look kind of like this:
19.10.09 09:00:16 1BASF.DE 39.45 39.43 39.41
19.10.09 09:00:16 1BASF.DE 39.45 39.44 39.43
19.10.09 09:00:20 1BASF.DE 39.46 39.45 39.43
… … … … … …
19.10.09 09:14:57 1BASF.DE 39.72 39.71 39.7
19.10.09 09:14:58 1BASF.DE 39.72 39.71 39.7
19.10.09 09:15:02 1BASF.DE 39.72 39.71 39.7
19.10.09 09:15:02 1BASF.DE 39.72 39.71 39.7
so the first colum is the date, the second column is the time stamp, the third is the name of the stock and the rest are prices. I want to create 15-minutes intervals that go from 9:00-9:15 am, then 9:15-9:30 am and so on until the end of the day and for these intervals the average price of the stock is taken. Do you have any ideas of how to make this?
I have seen people using datenum and the calculating the intervals , but the problem here is that my date and time stamps are in different columns and I dont know how to do it then.
Also, the timestamp column is a cell. Do you have any ideas that could help me out?
I would really appreciate it :)
Have a nice day!
  2 Comments
Lu
Lu on 19 Apr 2011
Hi Laura,
Thank you for your comment :). My data was originally a .txt file, but for some reason I never managed to load it on my workspace and work with it. (I dont really know much matlab so I am learning by doing. The .txt file looks like this:
Date Ric TRDPRC_1 SALTIM TRDVOL_1 BID1 BID2 BID3
19.10.09 08:55:02 1BASF.DE 0 : : 0 0 0 0
19.10.09 09:00:16 1BASF.DE 39.45 39.4 39.41
19.10.09 09:00:16 1BASF.DE 39.45 39.44 39.43
19.10.09 09:00:17 1BASF.DE 39.45 39.44 39.43
19.10.09 09:00:17 1BASF.DE 39.46 39.45 39.44
So I converted it into a .mat file by reading the strings and then the doubles, and then put it together in a matrix form.
So now that I have the .mat files, they look like this
19.10.09 09:00:16 1BASF.DE 39.45 39.43 39.41 ...
19.10.09 09:00:17 1BASF.DE 39.45 39.43 39.41 ...
19.10.09 09:00:18 1BASF.DE 39.45 39.43 39.41 ...
19.10.09 09:00:19 1BASF.DE 39.45 39.43 39.41 ...
first row is date, second row is time stamp, third row is stock name, and from row four to row 43 I have the prices of the stocks.
So when I type "whos ", I get the following:
EDU>> whos
Name Size Bytes Class Attributes
bid1 31591x1 6191836 cell
date 31591x1 4296376 cell
finalData 31591x43 100712108 cell
timestamp 31591x1 4296376 cell
I just typed one bid price, since the others are the same type and size.
I hope this can give you a bit more of information and I also hope you can give a hint on how to calculate the 15-minutes time intervals:)
Thank you!!

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 19 Apr 2011
Determine the first date of the range. Find the datenum() of midnight on that day. Convert the other values in to datenum() and subtract that base of midnight. Divide the resulting difference by (15*60)/(24*60*60) = 1/(24*60/15) = 1/(24*4) = 1/96 -- so multiply by 96 to do the division. Take the floor() of the result and that vector will be the number of 15 minute bins since midnight on the base date.
Once you have those bin numbers, you can add 1 to each of them and use the result as the subscript for the purposes of accumarray:
accumarray(1+binnum(:), stockprice(:), [], @mean)
  7 Comments
Lu
Lu on 20 Apr 2011
Dear Walter,
Thank you for your answer! The problem was solved by typing this :
datenumber = datenum([date{:}],'dd.mm.yy');
Thanks a lot for your help! I will now try to do the 15 minutes intervals of the data set. Have a nice day :)

Sign in to comment.

More Answers (1)

Laura Proctor
Laura Proctor on 19 Apr 2011
I imagine that the date and timestamps look something like the following varibles.
date = { '19.10.09'
'19.10.09'
'19.10.09'
'19.10.09' }
timestamp = { '09:00:16'
'09:00:17'
'09:00:18'
'09:00:19' };
You can convert these into a numeric date format. The variable t below contains the date and time together so that each row has the date and time in one number.
dateN = datenum(date,'dd.mm.yy');
timeF = datenum(timestamp,'HH:MM:SS') - datenum('00:00:00','HH:MM:SS');
t = dateN+timeF;
Here I have calculated the fraction that corresponds to 15 minutes, and then the ngroups variable tells how many groups will be contained in the data. This should hopefully get you started.
t15 = datenum('00:15','HH:MM') - datenum('00:00','HH:MM');
ngroups = ceil((max(t)-min(t))/t15)
  3 Comments
Lu
Lu on 19 Apr 2011
Dear Walter,
Thank you again for your comment! I think I have the 2010a matlab version, so it shouldnt be a problem. But, I dont know if the problem is due to the fact that my dates (dd.mm.yy format) and my timestamps (HH:MM:SS format) are contained in variables called date (<31591x1 cell>) and a variable called timestamp(<31591x1 cell>). So when I type
EDU>> ho=datenum({date},'dd.mm.yy');
??? Error using ==> datenum at 182
DATENUM failed.
Caused by:
Error using ==> datenum at 111
The input to DATENUM was not an array of strings.
and the same if I type ho=datenum({date(:)},'dd.mm.yy'); or
ho=datenum(date(:),'dd.mm.yy');
I´m really sorry to keep asking but I kind of learning by doing matlab and I dont have much knowledge about it.
I hope you can help me a bit more on this :)

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!