Используя расписания в финансах

Этот пример показывает, как использовать расписания, чтобы визуализировать и вычислить еженедельную статистику от моделируемых ежедневных данных о запасе.

Шаг 1. Загрузите данные.

Данные для этого примера находятся в MAT-файле SimulatedStock.mat, который загружает следующее:

  • Даты, соответствующие ценам акций закрытия, TMW_DATES

  • Вводные курсы акций, TMW_OPEN

  • Ежедневно высоко курсов акций, TMW_HIGH

  • Ежедневно низко курсов акций, TMW_LOW

  • Цены акций закрытия, TMW_CLOSE, TMW_CLOSE_MISSING

  • Ежедневный объем проданных, TMW_VOLUME

  • Данные в таблице, TMW_TB

load SimulatedStock.mat TMW_*

Шаг 2. Создание объекта Timetable.

В расписаниях можно работать с финансовыми временными рядами, а не с векторами. При использовании timetable можно легко отследить даты. Можно управлять рядом данных на основе дат, потому что объект timetable отслеживает администрирование временных рядов.

Используйте функцию MATLAB® timetable, чтобы создать объект timetable. Также можно использовать функцию преобразования MATLAB table2timetable, чтобы преобразовать таблицу в расписание. В этом примере расписание TMW_TT создается из таблицы и только в целях рисунка. После того, как вы создадите объект timetable, можно использовать поле Description объекта timetable сохранить метаинформацию о расписании.

% Create a timetable from vector input
TMW = timetable(TMW_OPEN,TMW_HIGH,TMW_LOW,TMW_CLOSE_MISSING,TMW_VOLUME, ... 
    'VariableNames',{'Open','High','Low','Close','Volume'},'RowTimes',TMW_DATES);

% Convert from a table to a timetable
TMW_TT = table2timetable(TMW_TB,'RowTimes',TMW_DATES);

TMW.Properties.Description = 'Simulated stock data.';

TMW.Properties
ans = 
  TimetableProperties with properties:

             Description: 'Simulated stock data.'
                UserData: []
          DimensionNames: {'Time'  'Variables'}
           VariableNames: {'Open'  'High'  'Low'  'Close'  'Volume'}
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowTimes: [1000x1 datetime]
               StartTime: 04-Sep-2012
              SampleRate: NaN
                TimeStep: NaN
        CustomProperties: No custom properties are set.
      Use addprop and rmprop to modify CustomProperties.

Шаг 3. Вычислите статистику основных данных и заполните недостающие данные.

Используйте функцию summary MATLAB, чтобы просмотреть базовую статистику данных timetable. Путем рассмотрения сводных данных для каждой переменной можно идентифицировать отсутствующие значения. Можно затем использовать функцию fillmissing MATLAB, чтобы заполнить недостающие данные в расписании путем определения метода заполнения.

summaryTMW = summary(TMW);
summaryTMW.Close
ans = struct with fields:
           Size: [1000 1]
           Type: 'double'
    Description: ''
          Units: ''
     Continuity: []
            Min: 83.4200
         Median: 116.7500
            Max: 162.1100
     NumMissing: 3

TMW = fillmissing(TMW,'linear');
summaryTMW = summary(TMW);
summaryTMW.Close
ans = struct with fields:
           Size: [1000 1]
           Type: 'double'
    Description: ''
          Units: ''
     Continuity: []
            Min: 83.4200
         Median: 116.7050
            Max: 162.1100
     NumMissing: 0

summaryTMW.Time
ans = struct with fields:
          Size: [1000 1]
          Type: 'datetime'
           Min: 04-Sep-2012
        Median: 31-Aug-2014
           Max: 24-Aug-2016
    NumMissing: 0
      TimeStep: NaN

Шаг 4. Визуализируйте данные.

Чтобы визуализировать данные о расписании, используйте финансовые функции построения диаграммы, такие как highlow или movavg. В данном примере информация о скользящем среднем значении построена на том же графике для highlow, чтобы обеспечить полную визуализацию. Чтобы получить динамику акций в 2 014, используйте функцию timerange MATLAB, чтобы выбрать строки timetable. Чтобы визуализировать технический индикатор, такой как Расхождение сходимости скользящего среднего значения (MACD), передайте объект timetable в функцию macd для анализа.

index = timerange(datetime('01-Jan-2014','Locale','en_US'),datetime('31-Dec-2014','Locale','en_US'),'closed');

highlow(TMW(index,:));
hold on

ema15 = movavg(TMW(:,'Close'),'exponential',15);
ema25 = movavg(TMW(:,'Close'),'exponential',25);

ema15 = ema15(index,:);
ema25 = ema25(index,:);
plot(ema15.Time,ema15.Close,'r');
plot(ema25.Time,ema25.Close,'g');
hold off

legend('Price','15-Day EMA','25-Day EMA')
title('Highlow Plot for TMW')

[macdLine, signalLine] = macd(TMW(:,'Close'));

plot(macdLine.Time,macdLine.Close);
hold on
plot(signalLine.Time,signalLine.Close);
hold off

title('MACD for TMW')
legend('MACD Line', 'Signal Line')

Шаг 5. Создайте ряд энергозависимости и еженедельный отчет.

Чтобы вычислить еженедельный отчет от ежедневных курсов акций, необходимо передискретизировать частоту данных от ежедневной газеты до еженедельника. При работе с расписаниями используйте функции MATLAB retime или synchronize с различными методами агрегации, чтобы вычислить еженедельную статистику. Чтобы настроить данные о расписании к основанию временного вектора, используйте retime и используйте synchronize с несколькими расписаниями.

weeklyOpen = retime(TMW(:,'Open'),'weekly','firstvalue');
weeklyHigh = retime(TMW(:,'High'),'weekly','max');
weeklyLow = retime(TMW(:,'Low'),'weekly','min');
weeklyClose = retime(TMW(:,'Close'),'weekly','lastvalue');
weeklyTMW = [weeklyOpen,weeklyHigh,weeklyLow,weeklyClose];

weeklyTMW = synchronize(weeklyTMW,TMW(:,'Volume'),'weekly','sum');
head(weeklyTMW)
ans=8×6 timetable
       Time         Open      High      Low      Close       Volume  
    ___________    ______    ______    ______    ______    __________

    02-Sep-2012       100    102.38     98.45     99.51    2.7279e+07
    09-Sep-2012     99.72    101.55     96.52     97.52    2.8518e+07
    16-Sep-2012     97.35     97.52      92.6     93.73    2.9151e+07
    23-Sep-2012     93.55     98.03     92.25     97.35     3.179e+07
    30-Sep-2012      97.3    103.15     96.68     99.66    3.3761e+07
    07-Oct-2012     99.76    106.61      98.7    104.23    3.1299e+07
    14-Oct-2012    104.54    109.75    100.55    103.77    3.1534e+07
    21-Oct-2012    103.84    104.32     96.95     97.41    3.1706e+07

Чтобы выполнить вычисления на записях в timetable, используйте функцию rowfun MATLAB, чтобы применить функцию к каждой строке еженедельного расписания частоты.

returnFunc = @(open,high,low,close,volume) log(close) - log(open);
weeklyReturn = rowfun(returnFunc,weeklyTMW,'OutputVariableNames',{'Return'});

weeklyStd = retime(TMW(:,'Close'),'weekly',@std);
weeklyStd.Properties.VariableNames{'Close'} = 'Volatility';

weeklyTMW = [weeklyReturn,weeklyStd,weeklyTMW]  
weeklyTMW=208×8 timetable
       Time          Return       Volatility     Open      High      Low      Close       Volume  
    ___________    ___________    __________    ______    ______    ______    ______    __________

    02-Sep-2012      -0.004912     0.59386         100    102.38     98.45     99.51    2.7279e+07
    09-Sep-2012      -0.022309     0.63563       99.72    101.55     96.52     97.52    2.8518e+07
    16-Sep-2012      -0.037894     0.93927       97.35     97.52      92.6     93.73    2.9151e+07
    23-Sep-2012       0.039817      2.0156       93.55     98.03     92.25     97.35     3.179e+07
    30-Sep-2012       0.023965      1.1014        97.3    103.15     96.68     99.66    3.3761e+07
    07-Oct-2012       0.043833      1.3114       99.76    106.61      98.7    104.23    3.1299e+07
    14-Oct-2012     -0.0073929      1.8097      104.54    109.75    100.55    103.77    3.1534e+07
    21-Oct-2012      -0.063922      2.1603      103.84    104.32     96.95     97.41    3.1706e+07
    28-Oct-2012      -0.028309      0.9815       97.45      99.1     92.58     94.73    1.9866e+07
    04-Nov-2012    -0.00010566       1.224       94.65      96.1     90.82     94.64    3.5043e+07
    11-Nov-2012       0.077244      2.4854       94.39    103.98     93.84    101.97    3.0624e+07
    18-Nov-2012       0.022823     0.55896      102.23    105.27    101.24    104.59    2.5803e+07
    25-Nov-2012      -0.012789       1.337      104.66    106.02    100.85    103.33    3.1402e+07
    02-Dec-2012      -0.043801      0.2783      103.37    103.37     97.69     98.94    3.2136e+07
    09-Dec-2012      -0.063475      1.9826       99.02     99.09     91.34     92.93    3.4447e+07
    16-Dec-2012      0.0025787      1.2789       92.95      94.2     88.58     93.19    3.3247e+07
      ⋮