次の形式の先物ティック データの 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
(最初の列は年月日、2 番目の列は分:秒:10 秒、3 番目の列は価格、4 番目の列は取引された限月の数、5 番目の列は取引が電子的であったかピットで行われたかを示します) . 私の実際のデータ セットでは、特定の 1 分間に数千の価格見積もりが表示される場合があります。
次のコードを使用してファイルを読み取りました。
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 は EI の matlab 表現です)
ここで、これを 1 分間の ohlc バーに分割して、1 分ごとに、その分内の最初、最高、最低、および最後の価格を記録します。これについて最善の方法を知りたいです。
私の最初のアイデアは、分のシーケンスを vector に保存することでしd
た。データを処理している間、 の最後の数字が変更されるたびにd
、対応する価格を始値として記録し、前の価格を最後の終値として記録します。バーを開き、始値と終値のそれぞれで最大値と最小値を見つけます。
c(2)
は最初の 1 分なので、次のように言いました。
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
サンプルデータの場合。私はここから何をすべきか、または私がしていることが正しい軌道に乗っているかどうか、ちょっと迷っています.