Neat, Aai.

But it raises more questions than it answers.

The verb cnd is used elsewhere. It's going to need an awfully cunning
footnote to explain to the J beginner why the original Hu Zhe example
needs modifying in this way.

Ian



On 6/30/09, Aai <[email protected]> wrote:
> AFAICS you only have to change the first cnd verb to:
>
>  cnd =: 3 : 'normalprob 0, 1,__,y'"0
>
>
>
>
>  Hallo Ian Clark, je schreef op 30-06-09 07:54:
>
> > To follow this you'll need to refer to the page:
>  >  http://www.jsoftware.com/jwiki/Doc/Articles/Play193
>  >
>  > I'm testing the code for Edn 2 of APWJ, and it doesn't give the result
>  > I expect. It checks out  fine until I come to this example about
>  > halfway down, attributed to Oleg:
>  >
>  > BlackScholes=: 4 : 0
>  > 'S X T r v' =. y.
>  > d1=. ((ln S%X)+(r+-:*:v)*T)%(v * sqrt T)
>  > d2=. d1 - v * sqrt T
>  > (S, X * exp-r*T) (-/ . * cnd)&(-^:x.) (d1, d2)
>  > )
>  >
>  > At the end of the article, Gene gives a sample result with his
>  > improved Black-Scholes formula BS as follows (this I can reproduce, so
>  > I'm happy that BS works):
>  >
>  >    yc=:60 65 0.25 0.08   0.3
>  >    BS yc
>  > 2.13337
>  >    yp=:60 65 0.25 0.08 _0.3
>  >    BS yp
>  > _5.84628
>  > (ignore the minus... a side-effect of a clever trick to specify 'put' or 
> 'call'.
>  >
>  > The example verbs attributed to Hu Zhe work okay also:
>  >
>  >    BlackScholesCall yc
>  > 2.13338
>  >    BlackScholesPut yc
>  > 5.84629
>  >
>  > ...well, near enough
>  >
>  > I reason that the given verb BlackScholes should check out in like
>  > manner using the same yc:
>  >
>  >    0 BlackScholes yc   NB. left arg 0/1 decides if a 'put' or a 'call'
>  > 2.13337
>  >    1 BlackScholes yc
>  > 5.84629
>  >
>  > ...or maybe it's the other way around...?
>  > But I don't get anything like these values. I get _3.91783 and 3.508
>  > respectively.
>  >
>  > I can verify that the intermediate values d1 and d2 in BlackScholes
>  > get the same values as they do in the Hu Zhe example (_0.325285 and
>  > _0.475285 respectively). It's the final line that's the mischief:
>  >
>  > (S, X * exp-r*T) (-/ . * cnd)&(-^:x.) (d1, d2)
>  >
>  > Somehow, over the years, J must have changed in how it executes it.
>  > Can anyone debug it, please, to give the expected result?
>  >
>  > BTW: It seems to me the given example should also work if x and y
>  > replace deprecated x. and y. respectively. Unfortunately the
>  > subsequent examples won't work then, because x clashes with its use as
>  > a work-variable to hold the second element of yc. This can be overcome
>  > by adhering rigidly to the earlier convention of using S X T for the
>  > first 3 elements of yc instead of s x t --which the article lapses
>  > into doing. But that is (I think) an independent issue.
>  >
>  > Ian Clark
>
> > ----------------------------------------------------------------------
>  > For information about J forums see http://www.jsoftware.com/forums.htm
>  >
>  >
>  >
>
>
>  --
>  Met vriendelijke groet,
>  =@@i
>
>  ----------------------------------------------------------------------
>  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