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

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

Шаг 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 функция для заполнения отсутствующих данных в timetable путем определения метода заливки.

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
      ⋮

См. также

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

Похожие темы