2017-01-12 10 views
-2

Можете ли вы помочь мне со следующей проблемой?Matlab: Внутридневная временная серия Задание №

У меня есть большой набор данных внутридневных финансовых данных. Более конкретно, цена закрытия акций каждые 15 минут в течение нескольких дней. Я сталкиваюсь с проблемой при составлении расписания таймсеров данных. Вот пример из моей серии:

'29-Dec-2016 15:00:00' 62.8400000000000 
'29-Dec-2016 15:15:00' 62.8300000000000 
'29-Dec-2016 15:30:00' 62.8900000000000 
'29-Dec-2016 15:45:00' 62.8550000000000 
'29-Dec-2016 16:00:00' 62.8900000000000 (Closing of the market) 
'30-Dec-2016 09:45:00' 62.7300000000000 (Opening of the market) 
'30-Dec-2016 10:00:00' 62.2900000000000 
'30-Dec-2016 10:15:00' 62.2400000000000 
'30-Dec-2016 10:30:00' 62.0900000000000 
'30-Dec-2016 10:45:00' 62.1100000000000 
'30-Dec-2016 11:00:00' 62.3000000000000 
'30-Dec-2016 11:15:00' 62.2300000000000 

Если я сюжет вышеупомянутую подвыборки MATLAB сюжет будет иметь вид, как на следующей картинке:

Picture 1 (time as X)

Как вы можете видеть заговоры Matlab заполняет горизонтальную ось с промежутком времени между закрытием рынка и открытием рынка, что заставляет цену выглядеть «растянутой».

В противоположность, если я использую все большее число наблюдения (например, от 1 до 100 ...) проблема снимается как на следующей картинке:

Picture 2 (no time as X)

Есть ли способ, чтобы избежать «вытягивать» от цены и все еще есть время на моей горизонтальной оси?

Заранее спасибо.

+1

Ввести значения «NaN» с отметками времени сразу после закрытия цен и/или перед их открытием. Альтернативно выстраивайте каждый день отдельно. –

+0

Сплоть каждый день отдельно невозможно, так как у меня есть 6 лет из 5,10 и 15 минут данных. Кроме того, если я собираюсь добавить значения NaN в вектор цены закрытия, тогда вектор цен будет иметь разные размеры переменной времени, которые у меня есть. – Whitebeard13

+0

Внимательно прочитайте комментарий: «Вставьте значения« NaN »** с отметками времени ** сразу после закрытия цен».Matlab не отображает сегменты линии, если любой из концов NaN, что дает вам именно то, что вы хотите. Я также не понимаю, почему построение дней отдельно невозможно - это всего лишь 6 * 255 раз. –

ответ

0

Вы можете сделать это так:

Первый участок только цена данных

plot(price) 

Затем установить XTickLabel:

set(gca,'XTickLabel',datevector) 

Это позволит установить X оси с вашими данными

enter image description here

Вы можете поместить это внутри функции

function plotprices(data) 

datevector = data(:,1);  %store dates in first column 
price = num2cell(data(:,2)); %store prices in second column 
plot(price) 
set(gca,'XTickLabel',datevector) 
0

Вы можете прочитать положения х-тиков на графике, и заменить их ярлыки с вашими собственными строками. Таким образом, если предположить:

а) y имеет цены на акции, и

б) Date имеет строки даты, можно добавить следующий код в конце второго участка, чтобы получить что-то близкое к чему вас хочу:

% limit the x-axis such that all ticks are within the data range 
xlim([1, length(y)]); 

% read the marks of the x-ticks 
xt=get(gca, 'XTick'); 
% this would place the x tick marks at the same locations 
% that Matlab chose by default. If you want to place them 
% at some other points, just assign those points to xt, e.g. 
% xt = (1:10:length(y)) 

% replace the labels of the marks 
set(gca, 'XTick', xt); % rewrite this in case you modify xt 
set(gca,'XTickLabel',Date(xt)) 

BTW, потенциально более простая альтернатива является использование вашего первого сюжета, но вместо сплошной линии, используйте только маркер. Например, plot(Date, y, '.');