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
