Thanks for that, Aai. I understand what it's doing now. I've updated: http://www.jsoftware.com/jwiki/Doc/Articles/Play193 fairly extensively to reflect this and other things (like correcting the C++code), to bring it in line with APWJ Edn 2. All J-code examples now work as advertised. The explanatory footnote doesn't have to be too bad after all.
Interestingly the alternative implementation (after Ewart Shaw) of the verb: cnd which is introduced later will work correctly with the original definition of BlackScholes, not needing the cnd"0 fix. Because for Shaw's implementation: cnd (d1,d2) <--> (cnd d1),(cnd d2) This discrepancy is something the owners of statdist.ijs in J602 might like to ponder. Ian On 6/30/09, Aai <[email protected]> wrote: > Look at the effect of the original cnd on arguments (d1 yc) (d2 yc): > > cndo (d1 yc),d2 yc > 1.0551908 > > what we need is: > > cnd (d1 yc),d2 yc > 0.3724829 0.317292 > > So leave cnd as it is and change BlackScholes: > > > > 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"0 )&(-^:x) d1, d2 > ) > > > > Hallo Ian Clark, je schreef op 30-06-09 18:45: > > > 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 > > > > -- > 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
