2

我有一个指数的每日收盘价,我想在每个月的最后一天之前和之后的特定天数创建虚拟变量。

说前4天和后4天。总共9天。我有 23 年的数据。

问题是月份的长度不相等(显然),并且数据不包括所有周末(使不相等的长度更加“不相等”)。

如何以有效的方式为数据创建虚拟变量,而无需手动查看每月最后一天前 4 天和后 4 天的 6000 多个观测值和精确日期?

%------------

我设法创建了一个包含 1991 年至 2014 年不包括周末的日期和回报的表格。第一列年份、第二个月、第三天和第四列返回:

在此处输入图像描述

现在我想为该月最后一个工作日之前的 X 天和该月最后一天之后的 X 天创建虚拟变量。说9天。所以假人 D-9、D-8...T、D+1、D+2...D+9。T=当月的最后一天。总共19个假人。剩下的日子将有一个单独的假人,ROM。然后我将这些用作回报的回归量。

在此处输入图像描述

我的预期结果将是所有虚拟变量的系数,这些变量描述了当月每个选定的日子(每月月初的 19 天)和当月剩余时间 (ROM) 的回报。它应该看起来像这样:

在此处输入图像描述

@丹尼尔

我的索引的完整数据可在此处找到

4

1 回答 1

1
%shorter period for demonstration purposes
startday = datenum(2015,1,1);
endday = datenum(2015,3,1);
%just make sure our calendar contains enough data so every interesting day is included
startday=startday-27;
endday=endday+27;
alldays=startday:endday;
alldaysvec=datevec(alldays);
%logical vector which is true for mon-friday. Might be updated to reflect holidays as well
workday=weekday(alldays)<=6&weekday(alldays)>=2;
%create a calendar with only the bussines days in it:
wdays=alldaysvec(workday,:);
%identify days where month is changed
closing_days=find(diff(wdays(:,2))~=0);
%closing days
wdays(closing_days,:)
%days three bussines days after the closing days
wdays(closing_days+3,:)
于 2015-04-04T17:10:14.913 回答