В этом примере показано, как использовать графики для визуализации и вычисления еженедельной статистики на основе моделируемых ежедневных данных о запасах.
Шаг 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.Closeans = 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')

[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×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
⋮
diff | fillmissing | isregular | issorted | retime | rmmissing | sortrows | synchronize | timerange | timetable | unique | vartype | withtol