exponenta event banner

Использование расписаний в Финансах

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

Шаг 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 объект отслеживает администрирование временного ряда.

Используйте 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. Вычислите статистику основных данных и заполните недостающие данные.

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

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 для обеспечения полной визуализации. Для получения результатов по запасам в 2014 году используйте MATLAB timerange для выбора строк 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')

Figure contains an axes. The axes with title Highlow Plot for TMW contains 3 objects of type line. These objects represent Price, 15-Day EMA, 25-Day EMA.

[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')

Figure contains an axes. The axes with title MACD for TMW contains 2 objects of type line. These objects represent 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×5 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, используйте MATLAB rowfun для применения функции к каждой строке еженедельного расписания частот.

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×7 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
      ⋮

См. также

| | | | | | | | | | | |

Связанные темы