Этот пример показывает, как использовать расписания, чтобы визуализировать и вычислить еженедельную статистику от моделируемых ежедневных данных о запасе.
Шаг 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
⋮