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