使用时间表处理金融数据 -凯发k8网页登录
使用时间表根据模拟的每日股票数据可视化和计算每周统计数据。
第 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
对象能够跟踪时间序列的管理。
使用 matlab® 函数创建 timetable
对象。或者,您也可以使用 matlab 转换函数 将表转换为时间表。在此示例中,时间表 tmw_tt
是从表转换构建的,仅用于说明目的。创建 timetable
对象后,您可以使用 timetable
对象的 description
字段存储关于时间表的元信息。
% 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 函数查看 timetable
数据的基本统计信息。通过查看每个变量的摘要,您可以确定缺失值。然后,您可以使用 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
绘制在同一张图上,以提供完整的可视化信息。要获得 2014 年的股票表现,请使用 matlab 函数选择 timetable
的行。要可视化技术指标,例如平滑异同移动平均线 (macd),请将 timetable
对象传递给 函数进行分析。
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
。
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)
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 函数,对以每周为采样周期的时间表中的每一行应用函数。
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
⋮
另请参阅
| | | | | | | | | | | |