0

次のように構成されたデータセットがあります。

2009,11,01,17,00,23,1.471700,1.472000

2009,11,01,17,01,04,1.471600,1.471900

2009,11,01,17,01,09,1.471900,1.472100

2009,11,01,17,01,12,1.472000,1.472300

2009,11,01,17,01,13,1.471900,1.472200

2009,11,01,17,01,14,1.471600,1.471900

2009,11,01,17,01,18,1.471700,1.472000

2009,11,01,17,01,18,1.471900,1.472200

このデータを操作するために Octave を使用しています。このティック データを使用して、5 分、10 分、30 分間隔のデータを含むさまざまなファイルを作成したいと考えています。この形式を使用すると、棒/ローソク足チャートとしてプロットし、さらに計算を実行できます。ただし、データをループしてそのようなファイルを作成する方法がまったくわかりません。

私は Octave に精通しており、このソフトウェアを使用していますが、この特定のタスクを他のソフトウェアで実行して、後で Octave にインポートするファイルを生成することができます。

これを Octave で最初にコーディングしようとすると、次のエラーが発生します:-

error: A(I,J,...) = X: dimensions mismatch
error: called from:
error:  /home/andrew/Documents/forex_convert/tick_to_min.m at line 105, column 25

それを生成するコードは

[i,j]=find(fMM>=45 & fMM<50);

min_5_vec(1:length(i),1)=tick_data(min(i):max(i),1);   % line 105

コードは「分」ベクトル fMM をチェックし、毎時 HH:45:00 と HH:49:59 の間に発生したすべてのティック データを含む新しい「min_5_vec」ベクトルを抽出して作成する必要があります。問題は、関数の一部であるこのコードが、この特定の行でのみ失敗するように見えることです。これは、コピーして貼り付けられ、数字 45 と 50 のみが変更されているため、非常に奇妙だと思います。 105 行目までの関数コードは失敗しません。生データを視覚的に確認しましたが、データの性質が失敗の原因となる原因はわかりません。失敗の考えられる原因について何か提案はありますか?

4

1 に答える 1

0

まず、datenum を使用して、年、月、日、時、分、秒の変数を時間に変換します。

datenum(2009,11,01,17,00,23)

0000 年 1 月 1 日からの経過日数を返します。times というベクトルにすべての時間を保存するとします。今、あなたが持っている最初/最後の時間を見つけるのは簡単なはずです:

first = min(times); 
last = max(times);

1 分は次のようになります。

ONE_MINUTE = 1/24/60

ビニングは次のように行われます。

index = 1;
means = [];
for t = first:5*ONE_MINUTE:last
    current_bin = (times>=t) & (times<t+5*ONE_MINUTE)
    % do something with all the data for which current_bin==1
    means(index) = mean(data(current_bin));
    index = index+1;
end

例として、各ビンのデータの平均を計算しました。毎回のデータを含む data というベクトルがあるとします。

(これはかなり最適化できることはわかっていますが、この回答ではパフォーマンスよりも明快さを優先しました)

于 2009-11-25T13:02:33.107 に答える