Построение свечной диаграммы из csv файла

У меня есть файл .csv, содержащий информацию о запасах Amazon.

date,       closePrice, volume,  openPrice, highPrice, lowPrice
=============================================================== 
30/10/2013  361.08      4500014  362.62     365         358.65
29/10/2013  362.7       2184755  358.96     362.89      356.29
28/10/2013  358.16      3602497  359.92     362.75      357.2
25/10/2013  363.39      12034820 358.6      368.4       352.62
24/10/2013  332.21      5699188  329.63     332.6499    326.75

Я загрузил этот файл в Matlab, и теперь я хотел бы прочитать данные из этого файла, чтобы построить график свечей. вот что я сделал:

clear;
close all;

file = '/Users/Documents/MATLAB/Candlestick Chart/Amazon.csv';

candle (file(:,2), file(:,3),file(:,4),file(:,5), 'b', file(:,1))

 set(file(:,5), 'FaceColor', 'g')
 set(file(:,6), 'FaceColor', 'r')

при запуске файла .m я получаю сообщение об ошибке:

Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 2u) ==>
/10/2013,361.08,4500014,362.62,365,358.65\n

Error in csvread (line 48)
    m=dlmread(filename, ',', r, c);

Я знаю, что программное обеспечение не может преобразовать дату в вектор, может ли кто-нибудь помочь мне преобразовать дату в вектор и построить свечную диаграмму. Итак, в X-доступе я хочу отображать дату и, основываясь на максимуме, минимуме, цене закрытия и открытия, я хочу построить свечной график.


person Community    schedule 14.11.2013    source источник


Ответы (1)


Вы можете использовать textscan

 fid = fopen(filename, 'r')
 C = textscan(fid, '%s%f%f%f%f%f', 'Headerlines', 2);
 fclose(fid)

затем используйте векторы в C{2}, C{3}, ... для вашего сюжета.

person marsei    schedule 14.11.2013
comment
Он (C) создает что-то вроде этой {2516x1 ячейка} {2516x1 ячейка} {2516x1 ячейка} {2516x1 ячейка} {2516x1 ячейка}. первая ячейка содержит даты, а в других ячейках написано «Нан»? Я хочу, чтобы в моем файле были все данные, а не только дата. - person ; 15.11.2013
comment
Вы можете выбрать новые параметры сканирования текста (например, разделитель, en of line) или изменить на% s вместо% f, чтобы увидеть, что прочитано. Textscan останавливается, когда не может прочитать, поэтому у вас должна быть длина Cs = количество строк csv. - person marsei; 15.11.2013
comment
на самом деле приведенный выше код работает нормально, но он добавляет все данные в первый столбец, поэтому {2516x1 cell} {2516x1 cell} ... если я дважды щелкну по первой ячейке, я получу что-то вроде этого: 28/10/2013,358.16,3602497 , 359.92 362.75 357.2 Из этого мне было интересно, могу ли я построить свечной график, чтобы я знал, что все данные разделены запятой, поэтому на основе этого я могу построить график ?? - person ; 15.11.2013
comment
мне удалось решить проблему, сделав что-то вроде этого :textcan (fid, '% s% s% s% s% s% s', 1, 'delimiter', ','); и я создал еще один массив, который читал десятичные дроби. Затем он сохранит все в outCell по-настоящему. N Теперь, как мне построить свечной график, вот что я сделал: свеча (outCell (:, 5), outCell (:, 6), outCell (:, 2), outCell ( :, 4), 'b', outCell (:, 1)). Сначала у меня возникают две ошибки: ошибка при использовании vertcat и вторая ошибка в свече (строка 76). вы можете мне в этом помочь? - person ; 18.11.2013
comment
вам нужен вектор-столбец скаляров. Если вы наберете outCell(:,5) в командном окне, оно что-то отобразит, и вы сможете проверить характер или что-то в рабочей области (или введите whos ans). Попробуйте изменить outCell{:,5}, чтобы получить правильный формат. - person marsei; 18.11.2013
comment
Извините, я забыл упомянуть, что я также пробовал использовать {:, 1} из предыдущего вашего ответа, поэтому я добавил что-то вроде этого: свеча (outCell {:, 5} ..... outCell {:, 4}, 'b', outCell {:, 1}); но я получаю еще одну ошибку: Ошибка при использовании свечи Слишком много входных аргументов. Что-то должно быть не так с моим методом свечей, потому что я уверен, что Matlab способен обрабатывать объем данных 2517X6. - person ; 18.11.2013