What is dates?

   ]c=. +/ 0.02 < | pctChange d=. ((1999 < ".  4&{. every dates) # close)
|value error: dates

Probably this...

   dates=: 0{"1 }. arr
   ]c=. +/ 0.02 < | pctChange d=. ((1999 < ".  4&{. every dates) # close)
354

I could muse at length about market volatility issues, but my short
form would be that the efficient market hypothesis is almost certainly
incorrect and that economists have had a tradition of putting too much
emphasis on the wrong issues.

Still,
   >  (I.  _.05 > pctChange periodClose) { (_10({.)\ dates)

is interesting to look at

I notice, for example, that 1987-10-23 is in there (and I think I
remember hearing some traders from Morgen Stanley saying they cleaned
up right around then, because the total valuation of the stock market
overflowed 32 bits but they had been using integers in APL, which mean
their implementation overflowed to floating point - which meant their
stock trading programs just slowed down a bit while everyone else's
crashed. And I think that that was right around when they said that
that had happened...)

I imagine that there's bits of history surrounding each of these
episodes, and that each crash corresponds to someone "cleaning up".

Thanks,

-- 
Raul

On Tue, Sep 1, 2015 at 3:53 PM, Joe Bogner <[email protected]> wrote:
> I recently invested in an S&P index fund - great timing, I know, so I
> figured I'd let J help calm my emotional response to the recent market
> volatility.
>
>
> The questions on my mind are:
>
> 1. Is this level of daily volatility extreme? -- restated as how common are
> 2% swings in daily close price (SOLVED)
>
> 2. Is it uncommon to have this much volatility over a two week period? --
> restated as how common are streaks of 2% change in price across multiple
> weeks (SOLVED)
>
> 3. How long does it take to recover after a period over period change of
> -5% (SOLVED)
>
> I set out to answer these questions:
>
> Step 1: Let's get some data
>
> require 'web/gethttp'
>
> NB. beware linebreak
> csv=: gethttp '
> http://real-chart.finance.yahoo.com/table.csv?s=%5EGSPC&d=8&e=1&f=2015&g=d&a=0&b=3&c=1950&ignore=.csv
> '
>
> arr=: >  ',' cut each LF cut csv
>
> NB. closing price is 4th column
> close =: ". every 4{"1 }. arr
>
>
> QUESTION 1 - Daily volatility
>
> pctChange =: }: -&1@% }.
>
> NB. 708 days greater than 2% change from previous close
> (+/ 0.02 < | pctChange close)
> 708
>
> NB. 4% of the time since 1950
> (+/ 0.02 < | pctChange close) % (# close)
> 0.042852
>
>
> NB. 354 times since 2000
> ]c=. +/ 0.02 < | pctChange d=. ((1999 < ".  4&{. every dates) # close)
> 354
>
> NB. which is 9% of time...
> c%(#d)
> 0.0898477
>
> so +/ 2% swings is not exceptional, relatively uncommon but nothing to
> worry about
>
> QUESTION 2 - Volatility over a two week period
>
> NB. calculate the period close over 5 sessions
> periodClose=: _5({.)\ close
>
> NB. count of consecutive periods with more than 2% volatility
> NB. http://www.jsoftware.com/pipermail/programming/2014-October/039985.html
> [ c=.+/ 2 < ([*+)/\.&.|. d=. (0.02 < | pctChange periodClose)
> 131
>
> NB. 4% of the periods since 1950 had 3 or more weeks of 2% volatility
>    c % (#d)
> 0.0396489
>
> NB. since 2000
> periodClose=: _5({.)\  ((1999 < ".  4&{. every dates) # close)
>
> NB. 50 times there have been 3 or more weeks of 2% volatility since 2000
> [ c=.+/ 2 < ([*+)/\.&.|. d=. (0.02 < | pctChange periodClose)
> 50
>
> NB. 6.3% of the time
>    c % (#d)
> 0.0635324
>
> QUESTION 3 - Given a decline of 10% in two weeks, how long does it take to
> recover?
>
> NB. close at the end of 10 sessions
> periodClose=: _10({.)\ close
>
> NB. 59 times there's been more than 5% decline over 10 sessions
> [ +/ _.05 > pctChange periodClose
>
>
> These are some of the dates:
>
>    ,.  (I.  _.05 > pctChange periodClose) { (_10({.)\ dates)
> +----------+
> |2015-08-31|
> +----------+
> |2011-08-10|
> +----------+
> |2010-07-01|
> +----------+
> |2009-03-11|
> +----------+
> |2009-02-25|
> +----------+
> |2008-11-12|
> +----------+
> |2008-10-15|
> +----------+
> |2008-09-17|
> +----------+
> |2008-01-15|
> +----------+
> |2003-01-28|
> +----------+
>
> This is starting to look more concerning....
>
> Now, to find how long it takes to recover:
>
> Here are 10 instances:
>
> 10 {. (I.  _.05 > pctChange periodClose)
> 0 102 130 163 164 171 173 175 192 317
>
> A crude attempt:
>
> NB. find # of 10 day periods between period before y and period closing
> above that close
> findRecovery =: 3 : 'y - >./ I. ((y+1) { periodClose) < ((i. y) {
> periodClose)'
>
>
> NB. number of weeks between the 5% decline over two weeks and the recovery
> 2 * findRecovery every 10 {. (I.  _.05 > pctChange periodClose)
> _ 22 10 2 8 28 72 116 252 16
>
>
> 22 weeks to recover since the last time it was > 5% decline over two weeks
>
> Graphical (from yahoo charts)
> http://pasteboard.co/k1aGw1i.png
>
> I guess I'm not feeling as great now :), but at least it's not that
> uncommon and in each case it recovered
>
> Hope this helps anyone looking at today's market and/or wishing to play
> with J
>
> Happy to take any feedback on the approach as well.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to