Needs["StableM`"];
data=Uncompress[Import["http://www.mathestate.com/tools/Financial/data/spy.dat","Text"]];
fomcdt={{2007,8,7},{2007,9,18},{2007,10,31},{2007,12,11},{2008,1,30},{2008,3,18}};
lr=Differences[Log[N[data[[All,5]]]]];
lrdata=Transpose[{Rest[data[[All,1]]],lr}];
plts=DateListPlot[data[[All,{1,5}]],PlotRange->{{Join[ fomcdt[[#]],{9,30,0}],Join[ fomcdt[[#]],{16,0,0}]},{130,156}},Joined->True, PlotLabel-> DateString[fomcdt[[#]],"DateShort"]]&/@Range[5];

Federal Open Market Committee Meetings

On days that the Federal Open Market Committee releases its decision on interest rates there is a spike in volatility, immediately following the information that persists for some time after.  The graphs below show some recent meeting dates and the price changes of the SPY exchange traded fund immediately following the decision at 14:15 Eastern time.

GraphicsArray[{{plts[[1]],plts[[2]]},{plts[[3]],plts[[4]]},{plts[[5]]}}]

The series of graphs below shows the minute by minute log returns on FOMC meeting days.  The graphs are all on the same scale so volatility before and after the decision can be compared.  There was more baseline volatility before the August meeting than on the other days.

vplts=DateListPlot[lrdata,PlotRange->{{Join[ fomcdt[[#]],{9,30,0}],Join[ fomcdt[[#]],{16,0,0}]},{-0.005,0.005}},Joined->True,PlotLabel-> DateString[fomcdt[[#]],"DateShort"]]&/@Range[5];
GraphicsArray[{{vplts[[1]],vplts[[2]]},{vplts[[3]],vplts[[4]]},{vplts[[5]]}}]

The next series of graphs extends the observation period.  Each graph shows minute by minute volatility starting the day before the meeting through the whole day after the meeting.  The x-axis is a sequential list of trading minutes, excluding the gaps when the market was closed.  Below each graph is the stable fit of minute log returns, parameters, {α, β, γ, δ}, for the period before the 14:15 decision followed by the fit for the returns following the decision.

dtrng=Sort[Join[Take[fomcdt,5],DatePlus[#,1]&/@Take[fomcdt,5],DatePlus[#,-1]&/@Take[fomcdt,5]]];
Clear[SelFn];SelFn=Function[{dw},Select[lrdata,Take[#[[1]],3]==dw&]];
lrp=SelFn[#][[All,2]]&/@dtrng;
lrp1=Flatten/@Partition[lrp,3];
ListPlot[lrp1[[1]],Joined->True,PlotRange->{All,{-0.005,0.005}},PlotLabel->DateString[fomcdt[[1]],"DateShort"],Frame->True,Axes->False]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[1]],391+285],SR->4,NN->1024]],"Text"]]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[1]],391+285-1173],SR->4,NN->1024]],"Text"]]
ListPlot[lrp1[[2]],Joined->True,PlotRange->{All,{-0.005,0.005}},PlotLabel->DateString[fomcdt[[2]],"DateShort"],Frame->True,Axes->False]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[2]],391+285],SR->4,NN->1024]],"Text"]]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[2]],391+285-1173],SR->4,NN->1024]],"Text"]]
ListPlot[lrp1[[3]],Joined->True,PlotRange->{All,{-0.005,0.005}},PlotLabel->DateString[fomcdt[[3]],"DateShort"],Frame->True,Axes->False]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[3]],391+285],SR->4,NN->1024]],"Text"]]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[3]],391+285-1173],SR->4,NN->1024]],"Text"]]
ListPlot[lrp1[[4]],Joined->True,PlotRange->{All,{-0.005,0.005}},PlotLabel->DateString[fomcdt[[4]],"DateShort"],Frame->True,Axes->False]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[4]],391+285],SR->4,NN->1024]],"Text"]]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[4]],391+285-1173],SR->4,NN->1024]],"Text"]]
ListPlot[lrp1[[5]],Joined->True,PlotRange->{All,{-0.005,0.005}},PlotLabel->DateString[fomcdt[[5]],"DateShort"],Frame->True,Axes->False]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[5]],391+285],SR->4,NN->1024]],"Text"]]
CellPrint[TextCell[Quiet[SFit[Take[lrp1[[5]],391+285-1173],SR->4,NN->1024]],"Text"]]

{1.7962348435417783`,0.30915141076132285`,0.00037225095322407207`,0.00004863161247417504`}

{1.4441258756356274`,0.12419928800885242`,0.00039543596858279657`,0.00005823036282019076`}

{1.76104851013932`,0.15519093727536232`,0.00017250915886546272`,4.774035705447248`*^-6}

{1.75007793863686`,0.14882052811677607`,0.00024967740175804904`,0.00001896232668095651`}

{1.715127929238763`,-0.05703698894852644`,0.00015704263326870799`,-1.50670016634487`*^-6}

{1.6743448856990266`,-0.08710760615675285`,0.00035450454706011146`,-0.00002583678305736305`}

{1.7910602626603842`,0.1320576585886196`,0.00017218291400901523`,0.00001501587887024448`}

{1.6431435373265402`,-0.2905245827030387`,0.0004244639594755575`,-0.00007953743358568238`}

{1.7079192621381132`,0.0396904558370586`,0.00028743462679795185`,4.973979535431072`*^-6}

{1.7647937999818388`,-0.18806232786573415`,0.000614887310060875`,0.00002620663150350205`}

There is some variation in the fit to α. but the most striking change is in the magnitude of γ, before and after the decision.  There was not much change of γ after the August meeting, but γ was already high before the meeting.  The graphs all show a very much higher volatility from the time of the decision until the market close of the same day.  The changes are provoked by a very large increase in volume per minute, following the decision.

dtrng=Sort[Join[Take[fomcdt,5],DatePlus[#,1]&/@Take[fomcdt,5],DatePlus[#,-1]&/@Take[fomcdt,5]]];
Clear[SelFn];SelFn=Function[{dw},Select[data,Take[#[[1]],3]==dw&]];
vol=SelFn[#][[All,6]]&/@dtrng;
vol1=Flatten/@Partition[vol,3];
ListPlot[vol1[[1]],PlotRange->{All,All},PlotLabel->"Volume "<>DateString[fomcdt[[1]],"DateShort"],Frame->True,Axes->False,Filling->Axis]
ListPlot[vol1[[2]],PlotRange->{All,All},PlotLabel->"Volume "<>DateString[fomcdt[[2]],"DateShort"],Frame->True,Axes->False,Filling->Axis]
ListPlot[vol1[[3]],PlotRange->{All,All},PlotLabel->"Volume "<>DateString[fomcdt[[3]],"DateShort"],Frame->True,Axes->False,Filling->Axis]
ListPlot[vol1[[4]],PlotRange->{All,All},PlotLabel->"Volume "<>DateString[fomcdt[[4]],"DateShort"],Frame->True,Axes->False,Filling->Axis]
ListPlot[vol1[[5]],PlotRange->{All,All},PlotLabel->"Volume "<>DateString[fomcdt[[5]],"DateShort"],Frame->True,Axes->False,Filling->Axis]

We plan to look at this prospectively.  If anyone has data from the past that they would share, we would also like to look at prior FOMC meeting days -- contact: Bob Rimmer.  The market response on these days provides an interesting natural experiment that probably tells us something of the state of markets at the time.  It also shoots some holes in the rational-investor hypothesis.  On some of these days the Fed did what was widely expected according to the news media, why then was there a huge spike in volume after the decision if the results were expected?  The answer must be that individually investors may expect to achieve some kind of advantage by trading in the midst of higher volatility, but collectively, it doesn't appear rational.  There is clearly higher risk in the market after the decision is announced.  The response also clearly shows that the behavior of markets does not follow a stationary distribution, the scale factor may increase by more than double after the announcement.

txcolor=RGBColor[181/255,18/255,27/255];
t1 = Graphics[Text[Hyperlink[Framed[Style["Financial Home", {txcolor, Bold, Larger}]], "../map/Overview.html"], {-5, 0}]];
t2 = Graphics[Text[Hyperlink[Framed[Style["Next", {txcolor, Bold, Larger}]],  "../r07/Volatility.html"], {0, -0.5}]];
t3 = Graphics[Text[Hyperlink[Framed[Style["Download Notebook", {txcolor, Bold, Larger}]], "../f00/FOMC.nb"], {5, 0}]];
t4 = Graphics[Text[Hyperlink[Framed[Style["Previous", {txcolor, Bold, Larger}]], "../r06/MarketData.html"], {0, 0.5}]];

Show[ t1, t2, t3,t4, ImageSize -> 500]
CellPrint[TextCell["\n\n© Copyright " <>ToString[DateList[][[1]]]<>" mathestate    "<>DateString[DateList[],"DateShort"], "Text"]]

© Copyright 2008 mathestate    Fri 15 Feb 2008