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

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

Шаг 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
      ⋮