主要内容

rollingreturns

Period-over-period滚动收益或从价格差异

描述

例子

返回= rollingreturns (TT)计算period-over-period(流行)返回或者从相应的价格差异。为每个日期的时间表TT,返回代表了流行返回相应的价格相比,价格早些时候。

例子

返回= rollingreturns (___,名称,值)指定选项使用一个或多个可选的名称-值对参数除了输入参数在前面的语法。

例子

全部折叠

这个例子展示了如何计算同比滚动返回五年模拟日常价格,还包括业务日历的意识。

模拟五年的每日价格并将结果存储在时间表TT。然后,用isbusday只保留数据,纽约证券交易所(NYSE)业务日期。

rng (200“旋风”)时间= (datetime(2014年,1,1):caldays: datetime (2018、12、31) ';价格= 100 + 0.1 *(0:元素个数(时间)- 1)”。* cumsum (randn(元素个数(时间),1)/ 100);价格(价格* 100)/ 100 =轮;%一轮价格最近的一分钱TT =时间表(价格,“RowTimes”、时间、“VariableNames”,{“价格”});TT = TT (isbusday (TT.Properties.RowTimes):);%仅保留纽交所业务天头(TT, 10)
ans =10×1的时间表时间价格___________ ______ 02 - 100年1月- 2014年03 - 100年1月- 2014年06 - 1月- 100.02 2014 100.01 07 - 1月- 2014年08 - 1月100.04 - 2014 100.02 09年1月- 2014年1月10 - 13 - 1月- 2014 100.11 - 2014 100.06 14 - 2014年1月- 2014年1月15 - 100.12 - 100.12

使用addBusinessCalendar添加纽交所业务日历意识。业务日历逻辑决定的日期之前的时期是一个业务日期,如果它不是,那么该日期之前的最近的工作日。例如,自21 - 5 - 2016一个星期六,22 - 5 - 2016是一个星期天,同比价格周一吗22 - 5 - 2017比较到周五20 - 5 - 2016。

TT = addBusinessCalendar (TT);%添加纽交所业务日历

计算同比返回和显示过去的几个价格和相应的回报。

返回= rollingreturns (TT,“时间”,calyears);尾([TT回报))
ans =8×2时间表时间价格Prices_Return_1y ___________ ______ ___________ 19 - 12月- 2018年12月212.68 - 0.16941 20 - 215.54 - 0.19024 - 2018 21 - 12月24 - 12月- 2018 - 2018 217.66 0.18648 221.42 0.20882 26 - 12月- 2018 224.81 0.21473 27 - 12月- 2018年12月222.17 - 0.19897 28 - - 2018 0.19206 224.37 224.63 - 0.19142 2018年- 12月31日

经济数据往往是报告每个月或季度的最后一天。所以月底计算时都会出现模棱两可period-over-period回报期超过的周期性数据报告。

模拟五年的每日价格并将结果存储在时间表TT

rng (200“旋风”)时间= (datetime(2014年,1,1):caldays: datetime (2018、12、31) ';价格= 100 + 0.1 *(0:元素个数(时间)- 1)”。* cumsum (randn(元素个数(时间),1)/ 100);价格(价格* 100)/ 100 =轮;%一轮价格最近的一分钱TT =时间表(价格,“RowTimes”、时间、“VariableNames”,{“价格”});头(TT, 10)
ans =10×1的时间表时间价格___________ ______ 01 - 100年1月- 2014年02 - 100年1月- 2014年03 - 100年1月- 2014年04 - 100年1月- 2014年05 - 1月- 2014年1月100.01 06 - 07 - 1月- 2014 - 2014 100.01 100.02 100.02 08 - 1月- 2014年09年10 - 100.04 - 1月- 2014年1月- 2014年100.06

创建一个新的时间表抽样TT在每个月的最后一天,模仿月度报告。

monthEndDates = dateshift (TT.Time (1): calmonths: TT.Time(结束),“结束”,“月”);TT = TT (monthEndDates:);%样本TT在月底日期头(TT, 10)
ans =10×1的时间表时间价格___________ ______ 31日——2014年1月- 2014年2月28 - 100.47 - 100.93 2014年- 3月31日102年4月30 - 31 - 2014 102.28 - 30 - 2014年6月- 2014年5月- 103.22 103.92 102.2 2014年- 7月31日31日——8月30 - 9月- 2014 - 2014 104.79 103.11 105.29 2014年- 10月31日

显示日期和比较的一个子集的直接计算日期在前几个月的转移到本月底前一时期发生。

日期= timerange (datetime (2016、2、29), datetime (2017 - 28),“月”);[TT.Time(日期)(TT.Time(日期)- calyears) dateshift (TT.Time(日期)- calyears,“结束”,“月”)]
ans =13 x3 datetime29 - - 2016年2月28日- 2015年2月28日- 2016年2月- 2015年3月31日- - - 3月- 2015年3月31日——31日- 2015年4月30 - 30 - 2016 - 4月- 2015年4月30 - 31 - 2015 - 2016年5月- 31 - 2015 31 -可能- 2015 30 - 2015年6月- 2016年30 - 6月- 30 - 2015年6月———2016年7月31日—7月31日- 2015年8月31日- 2015年7月31日- 2016年8月31日- 2015年8月31日- 2015年30 - 2015年9月- 2016年9月30 - - 30 - 2016年9月- 2015年10月31日- - - - 2015年10月31日- 10月31日- 2015年11月30 - - 2016年30 - 2015年11月- 2015年11月30 - - 31 - - 2016年12月31日- 2015年12月31日- 2015年12月31日- 1月31 - 2017 - 1 - 2016 - 1月- 2016年2月28 - 31日- 2017年2月28日- 2月29 - 2016 - 2016

检查这些结果和注意日期的第二列和第三列最后一行是不同的。具体来说,当在第一列是当前日期2017年- 2月28日第二和第三列的日期不同,因为2016年是一个闰年。更一般的,前期的日期不同每当月天超过当前月份的收益计算。在这个例子中,月底日期存在以下模棱两可。当感兴趣的当前日期2017年- 2月28日应该减去一个日历年2016年- 2月28日2016年- 2月29日吗?

正确答案取决于应用程序,这两种方法都是有效的用例。使这一问题更加恶化,例如,在处理较上月月底价格数据和计算回报。解决月底模棱两可,rollingreturns函数支持一个金宝appEndOfMonth国旗。

返回= rollingreturns (TT,“时间”calyears,“EndOfMonth”,真正的);

EndOfMonth国旗确保rollingreturns函数使用正确的每个日历月的月底日期。在本例中,返回2017年- 2月28日正确计算的价格报告吗2016年- 2月29日而不是2016年- 2月28日

(TT(日期:)返回(日期,:))
ans =13×2时间表时间价格Prices_Return_1y ___________ ______ ___________ 2016年- 2月29日135.59 - 0.21671,3月31日——30 - 4月- 2016 - 2016 138.47 0.25052 131.44 0.11598 31 - 2016年5月- 2016年129.34 - 0.083068 30 - 6月- 132.78 - 0.046253 133.86 - 0.077865 2016年- 7月31日31日——8月30 - 9月- 2016 - 2016 140.32 0.11871 141.27 - 0.10652 136.52 - 0.087549 2016年- 10月31日11月30 - 31 - 2016 140.76 0.1053 135.96 - 0.057643 - 12月- 2016 31 - 1月- 2017 0.0056789 136.36 129.52 - 0.0099025 2017年- 2月28日

输入参数

全部折叠

输入价格时间表,指定为一个时间表。的时间表TT必须满足以下条件:

  • 所有的观察TT必须与整个日期指定为日期时间没有HH: MM: SS时间分量(无)组件)。

  • TT日期必须按升序排序。

  • TT必须没有重复的日期。

  • 每个变量在TT必须包含一个数值向量或一个数字矩阵的价格。例如,假设TT包含三个变量的日常价格。

    时间Price1 Price2价格___________交___________ 24 - 12月25 - 12月- 2018 2018 221.42 442.84 221.42 442.84 220.62 441.24 220.62 441.24 26 - 12月- 2018 224.81 449.62 224.81 449.62 27 - 12月- 2018 222.17 444.34 222.17 444.34 28 - 12月29 - 2018 224.63 449.26 224.63 449.26 225.36 450.72 225.36 450.72 - 12月- 2018 12月30 - 31 - 2018 226.73 453.46 226.73 453.46 224.37 448.74 224.37 448.74 - 12月- 2018
    相应的日常返回被格式化为三个返回这三个价格变量。
    时间Price1_Return Price2_Return Prices_Return ___________ _________________ _________________ _____________________ 24 - 12月- 2018年南南南南12月25 - 26 - 2018 -0.003613 -0.003613 -0.003613 -0.003613 - 12月- 2018 0.018992 0.018992 0.018992 0.018992 27 - 12月- 2018 -0.011743 -0.011743 -0.011743 -0.011743 28 - 12月29 - 2018 0.011073 0.011073 0.011073 0.011073 0.003249 0.003249 0.003249 0.003249 - 12月- 2018 12月30 - 31 - 2018 0.006079 0.006079 0.006079 0.006079 -0.010409 -0.010409 -0.010409 -0.010409 - 12月- 2018

请注意

包括business-calendar-awareness和非商业的占天(例如,周末,假期,市场关闭),您必须首先使用addBusinessCalendar输入函数来填充一个自定义属性TT。例如,添加业务日历逻辑只包括纽交所业务天,您可以使用TT = addBusinessCalendar (TT)

数据类型:时间表

名称-值对的观点

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:返回= rollingreturns (TT,‘时间’,calweeks (1),“EndOfMonth”,的确,“方法”,“连续”)

期计算period-over-period回报,指定为逗号分隔组成的“EndMonthRule”和一个标量日历时间(例如,caldays,calweeks,或calmonths)。

默认是在定义的时间步TT(TT.Properties.TimeStep),但只有当TT.Properties.TimeStep不是。如果TT.Properties.TimeStep,然后是必需的。

数据类型:

月底标志指示是否在当前日期的价格相比,月前的最后日期,指定为逗号分隔两人组成的“EndOfMonth”和一个标量的逻辑值真正的

  • 如果你设置EndOfMonth真正的(逻辑1),这意味着目前的价格相比,月底前的价格

  • 如果你设置EndOfMonth(逻辑0),这意味着目前的价格相比,价格记录在前面的实际日期

请注意

EndOfMonth国旗是为了解决月底日期计算时计算的日期之前一个或更多个月过去。

例如,假设你有月度价格每个月月底报告,要计算同比回报(也就是说,=calyears (1))。当感兴趣的当前日期2017年- 2月28日,设置EndOfMonth = true(逻辑1)确保返回计算2017年- 2月28日比较价格2017年- 2月28日对那些在2016年- 2月29日而不是2016年- 2月28日

同样的,假设你有月度价格每个月月底报告,要计算复返回(即,=calmonths (1))。当感兴趣的当前日期2020年- 4月30日,设置EndOfMonth = true(逻辑1)确保返回计算2020年- 4月30日比较价格2020年- 4月30日对那些在31 - 3月- 2020而不是2020年- 3月30日

数据类型:逻辑

计算的方法返回从价格,指定为逗号分隔组成的“方法”和一个标量特征向量。

  • “简单”——计算简单的(比例)返回:R (t) = P (t) / P (t期)- 1

  • “连续”——计算连续(对数)返回:R (t) =日志(P (t) / P (t期))

  • “差异”——计算差异(period-over-period变化):R (t) = P (t) - P (t期)

数据类型:字符

输出参数

全部折叠

Period-over-period十进制回报或差异,作为一个时间表返回相同的大小和格式作为输入参数TT。回报或不同的行t相关的tth日期TT和代表的返回或差异t价格P(t相对于价格在之前的时期P(t期)。如果没有找到日期之前的时期TT,然后结果是显示一个缺失值。

变量名在附加的输出_Return_Difference的变量名TT分别对回报和差异,其次是用于period-over-period结果。例如,如果TT有一个变量命名美国广播公司和周间回报计算calweeks (1),相应的输出变量命名ABC_Returns_1w

rollingreturns是一个聚合函数的频率记录价格必须等于或超过的吗返回或差异计算。例如,每天价格可以用来计算每日,每周或每月返回,但每天计算返回从每周或每月价格通常毫无意义。

算法

Period-over-period每天计算结果TT如下:

  1. 对于每一个日期tTT,日期t期计算。

    • 如果日期t时期是一个业务日期,这个日期是”一个周期之前的日期

    • 如果日期t期不是业务日期,然后每个日历天前t期检查多次,直到找到业务日期,此时这个日期日期一个周期前,或前面的日期前发生的第一次约会TT,此时不存在以前的业务资料TT

  2. 如果日期是在“一个周期之前”TT,那么相应的价格P(t期)是记录并返回R(t)计算。然而,如果日期没有找到“一个周期之前”TT,那么以前的价格P(t期)(也就是说,一个隐式的假设失踪),并返回R(t)=

  3. 重复前面的步骤,直到日期t期先于中的第一次约会TT,此时算法终止。

介绍了R2020b