【发布时间】:2013-06-15 20:42:22
【问题描述】:
我有一个期货报价数据的 CSV 文件“XPQ12.csv”,格式如下:
20090312 30:14.0 717.25 1 E
20090312 30:15.0 718.47 1 E
20090312 30:17.0 717.25 1 E
20090312 30:32.0 718.42 1 E
20090312 30:49.0 715.32 1 E
20090312 30:58.0 717.57 1 E
20090312 31:06.0 716.65 3 E
20090312 31:12.0 718.35 2 E
20090312 31:45.0 721.14 1 E
20090312 31:52.0 719.24 1 E
20090312 32:11.0 717.02 6 E
20090312 32:29.0 717.14 1 E
20090312 32:35.0 717.34 1 E
20090312 32:55.0 717.26 1 E
(第一栏是年月日,第二栏是分:秒:十秒,第三栏是价格,第四栏是交易的合约数量,第五栏表示交易是电子交易还是电子交易一个坑)。在我的实际数据集中,我可能在任何给定的分钟内都有数千个报价。
我使用以下代码读取文件:
fid = fopen('C:\Program Files\MATLAB\R2013a\XPQ12.csv','r');
[c] = fscanf(fid, '%d,%d:%d.%d,%f,%d,%c')
哪些输出:
20090312
30
14
0
717.25
1
69
20090312
30
15
0
718.47
3
69
.
.
.
(我相信 69 是 E 的 matlab 表示)
现在我想把它分成一分钟的 ohlc 柱,这样我就每分钟记录那一分钟内的第一个、最高、最低和最后一个价格。我真的很想知道解决这个问题的最佳方法。
我最初的想法是将分钟序列存储在向量d中,并且在处理数据时,每次d末尾的数字发生变化时,我都会将相应的价格记录为开盘价,记录最后一根柱线的收盘价,并找出每个开盘价和收盘价内的最大和最小价格。
c(2)是第一分钟,所以我说:
d(1)=c(2);
然后注意到我总是在到下一分钟之前数到 7,我说:
Nrows = numel(textread('XPQ12.csv','%1c%*[^\n]')); % counts rows in file
for i=1:Nrows
if mod(i-2,7)== 0;
d(end+1)=c(i);
end
end
应该用所有的分钟数填满d:
30
30
30
30
30
30
31
31
31
31
32
32
32
32
在示例数据的情况下。我有点不知道从这里做什么,或者我正在做的事情是否在正确的轨道上。
【问题讨论】:
-
对不起,不清楚,我正在编辑它。我想知道在每分钟内找到开盘高低和收盘价的最佳方法。
-
你有金融工具箱吗?
-
我有,还有其他我可能需要的。
-
根据文档
highlow()生成一个对象的图,该对象已经具有开盘高低收盘价的 4 个数据系列。highlow()在我将连续的分时数据流切割成每分钟的开盘高低和收盘价之后会很有用,但是我遇到的问题是这个将分时数据切割成 ohlc 分钟柱的过程。
标签: matlab time-series finance