2009-11-16 19 views
0

J'ai un ensemble de données qui se compose ainsi:Stock Condensation données

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 

J'utilise Octave pour manipuler ces données. Je voudrais utiliser ces données tick pour créer divers fichiers contenant les données à intervalles de 5, 10 et 30 minutes. Avec ce format, ils pourraient être représentés sous la forme d'un graphique en forme de barre/chandelier et d'autres calculs effectués. Cependant, je n'ai vraiment aucune idée de la façon d'approcher la boucle sur les données pour créer de tels fichiers. Je connais Octave et j'utilise ce logiciel, mais cette tâche particulière pourrait être entreprise dans d'autres logiciels pour produire des fichiers à importer ultérieurement dans Octave.

Ma première tentative de coder ce Octave donne cette erreur: -

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 

Le code qui le produit est

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

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

Le code vérifie le FMM vecteur "minutes" et devrait extraire et créer un nouveau vecteur "min_5_vec" contenant toutes les données de tick qui se sont produites entre les heures HH: 45: 00 et HH: 49: 59 pour chaque heure. La chose est que ce code, qui fait partie d'une fonction, semble échouer seulement sur cette ligne particulière que je trouve très étrange car elle a été copiée et collée et seulement les figures 45 et 50 ont été changées, et les autres parties similaires de le code de fonction jusqu'à la ligne 105 n'échoue pas. J'ai vérifié visuellement les données brutes et je ne vois aucune raison pour que la nature des données soit la cause de l'échec. Des suggestions pour la cause possible de l'échec?

Répondre

0

Tout d'abord, l'utilisation datenum pour convertir vos année, mois, jour, heure, minute, seconde variables à temps:

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

renverra le nombre de jours écoulés depuis 1/1/0000. Disons que vous sauvegardez tous les temps dans un vecteur appelé temps. maintenant, il devrait être assez facile de trouver la première/dernière fois que vous avez:

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

une minutes est égale à:

ONE_MINUTE = 1/24/60 

maintenant le binning se fait comme:

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 

Juste pour l'exemple, j'ai calculé les moyennes des données dans chaque casier. Je suppose que vous avez un vecteur appelé données qui contient des données pour chaque fois.

(Je sais que cela peut être optimisé beaucoup, mais j'ai préféré la clarté sur les performances pour cette réponse)