main content

使用时间表处理金融数据 -凯发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')

figure contains an axes object. the axes object 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 object. the axes object with title macd for tmw contains 2 objects of type line. these objects represent 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
      ⋮

另请参阅

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

相关主题

    网站地图