График Candle Stick с данными расписания, показывающими перерывы в выходные дни

Прежде всего, я думаю, что ответы, которые я нашел, устарели:

  1. Исключение промежутков выходного дня из графиков финансовых временных рядов< /а>
  2. Исключить пропуски дат на графике временных рядов в Matlab
  3. Datetick учитывает NaN на графике

Моя проблема:
я создал свечной график на основе таблицы расписания с этими датами (формат dd/mm/yyyy):

'25/01/2019'
'24/01/2019'
'23/01/2019'
'22/01/2019'
'21/01/2019'
'18/01/2019'
'17/01/2019'
'16/01/2019'
'15/01/2019'
'14/01/2019'
'11/01/2019'
'10/01/2019'
'09/01/2019'
'08/01/2019'
'07/01/2019'
'04/01/2019'
'03/01/2019'
'02/01/2019'
'28/12/2018'
'27/12/2018'
'26/12/2018'
'21/12/2018'
'20/12/2018'
'19/12/2018'
'18/12/2018'

И этот код:

candle(this.values);

Это дает мне этот сюжет:

значения 1

Как видите, есть гэпы, соответствующие нерабочим дням.

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

  1. Создал два массива: один с датами, а другой со строками дат:

    this.dates = table2timetable(ticker(1:5:25,:));
    %sort them out because were generated in reverse order
    this.dates = timetable2table(sortrows(this.dates(:,1)));
    this.dates = this.aux(:,1);
    this.lbl = datestr(this.aux{:,1},'dd/mm/yyyy');
    
  2. Получите объект gca, чтобы установить свойства оси X:

    this.ax = gca;
    this.ax.XTick = this.dates{:,1};
    this.ax.XTickMode = 'manual';
    this.ax.XTickLabel = this.lbl;
    

И результат таков:

значения 2

Таким образом, свойства устанавливаются правильно, но пробелы остаются.

Наконец, я попытался установить свойство Timetable VariableContinuity и вызвал функцию retime для создания записей пропущенных дат с данными NaN, чтобы посмотреть, помогло ли это, но с теми же результатами:

this.values.Properties.VariableContinuity = {'event','event','event','event','event','event','event','event'};
this.values = retime(this.values,'daily');

Что еще я мог сделать, чтобы скрыть пробелы?


person Typo    schedule 01.02.2019    source источник
comment
Непонятно, как вы хотите скрыть пробелы и сохранить непрерывный масштаб? Или вас не волнует, что ось X, основанная на времени, не будет линейной во времени, когда вы удалите промежутки? С точки зрения визуализации данных я бы предпочел видеть пробелы, чем иметь ось дат, которая не показывает непрерывную дату! Если вы в отчаянии, вы можете преобразовать даты в категориальные, тогда они не будут датами, и MATLAB будет просто рассматривать их как категории, а не как непрерывную шкалу.   -  person Wolfie    schedule 01.02.2019
comment
@Wolfie, это не непрерывная шкала, это цены акций. Каждый биржевой график, который я когда-либо видел (а я видел немало), показывает только рабочие дни. Я бы предпочел не видеть пробелов. Я не в отчаянии. Тем не менее, вы понимаете, что в сообщениях, которые я упомянул, раньше было решение, которое, по-видимому, больше не работает? Я думаю, что должен быть обходной путь или какое-то свойство, которое поможет мне это сделать.   -  person Typo    schedule 01.02.2019
comment
@Wolfie также, когда вы занимаетесь техническим анализом, очень помогает отсутствие этих пробелов.   -  person Typo    schedule 01.02.2019


Ответы (1)


Я считаю, что после того, как вы начертили, вы не можете удалить пробелы. Вы должны удалить пробелы перед построением графика. В своем расписании создайте линейный массив дат (без пробелов) и используйте его для расписания, а затем постройте. Тогда пробелов не будет, но даты будут неверными. Чтобы поставить правильную дату, используйте следующий код (аналогичный вашему коду).

this.ax.XTickMode = 'manual';
this.ax.XTickLabel = YOUR_CORRECT_DATE_CELL_ARRAY
person user1097111    schedule 02.02.2019