[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Code for CUMULATIVE normal distribution



PureBytes Links

Trading Reference Links

Hi PS --

Let ask again.  How will you be using these? 

If it is part of a Monte Carlo analysis, the code I posted is more than accurate enough. 

An example of Monte Carlo is to generate uniform random numbers, transform them to normal distribution, and use those results to perturb some price data.  In a single Monte Carlo analysis, this will be done thousands of times.

Is this the kind of thing you will be doing? 

Don't worry about an exact match with some other distribution.  The variation in the process of generating random numbers will be much larger than the difference between the two distributions.

If you need more accuracy, there are two alternatives.

1.  Whenever you need a number from the normal distribution, generate it using a formula.  Most, but not all, of the formulas begin with a uniform random number.  On-the-fly generation of numbers drawn from the normal distribution is complex and time consuming.  That is why lookup tables are often used.

2.  Find, or generate, a table such as the one I posted.  That only has to be done one time.  Fill in the coefficients.  Do this either by reading the values during an initialization phase of the afl program or including them in the afl code.  Whenever you need a number from the normal distribution, generate a number from the uniform distribution and use it to select the corresponding number from the normal distribution.  More accuracy requires a larger table, but the calculation is pretty efficient -- just an index into the array.

Thanks,
Howard
www.quantitativetradingsystems.com




On 5/30/07, vlanschot <vlanschot@xxxxxxxxx> wrote:

Thanks Howard,

This very much looks like the list of Z-scores I had seen before, as
mentioned in my mail yesterday !

Still, your function is equal to Excel's NORMSINV(p) function which I
already got. Iow, I have functions to translate a standardized z-
score into a prob and vice versa. Using the A&S mentioned below, I
can get probs for values where Mu and SD are not zero, resp 1.
However, they do not match XL's values.

Thx anyway, I'll continue digging.

PS



--- In amibroker@xxxxxxxxxxxxxxx, "Howard B" <howardbandy@xxx> wrote:
>
> Hi --
>
> How will you be using the distribution?
>
> How much accuracy do you need?
>
> Here is afl code that will initialize an array with the Cumulative
> Distribution Function of the Normal Distribution.
>
> //---------------------------
>
> // InitializeNormalCDF.afl
> //
> function InitializeNormalCDF()
> // Initialize the array that holds the coefficients
> // for the Normal Cumulative Distribution function.
> {
> NormCDF[0] = -3.090;
> NormCDF[1] = -2.326;
> NormCDF[2] = -2.053;
> NormCDF[3] = -1.881;
> NormCDF[4] = -1.751;
> NormCDF[5] = -1.645;
> NormCDF[6] = -1.555;
> NormCDF[7] = -1.476;
> NormCDF[8] = -1.405;
> NormCDF[9] = -1.341;
> NormCDF[10] = -1.282;
> NormCDF[11] = -1.227;
> NormCDF[12] = -1.175;
> NormCDF[13] = -1.126;
> NormCDF[14] = -1.080;
> NormCDF[15] = -1.036;
> NormCDF[16] = -0.994;
> NormCDF[17] = -0.954;
> NormCDF[18] = -0.915;
> NormCDF[19] = -0.878;
> NormCDF[20] = -0.842;
> NormCDF[21] = -0.806;
> NormCDF[22] = -0.772;
> NormCDF[23] = -0.739;
> NormCDF[24] = -0.706;
> NormCDF[25] = -0.674;
> NormCDF[26] = -0.643;
> NormCDF[27] = -0.613;
> NormCDF[28] = -0.583;
> NormCDF[29] = -0.553;
> NormCDF[30] = -0.524;
> NormCDF[31] = -0.496;
> NormCDF[32] = -0.468;
> NormCDF[33] = -0.440;
> NormCDF[34] = -0.412;
> NormCDF[35] = -0.385;
> NormCDF[36] = -0.358;
> NormCDF[37] = -0.332;
> NormCDF[38] = -0.305;
> NormCDF[39] = -0.279;
> NormCDF[40] = -0.253;
> NormCDF[41] = -0.228;
> NormCDF[42] = -0.202;
> NormCDF[43] = -0.176;
> NormCDF[44] = -0.151;
> NormCDF[45] = -0.126;
> NormCDF[46] = -0.100;
> NormCDF[47] = -0.075;
> NormCDF[48] = -0.050;
> NormCDF[49] = -0.025;
> NormCDF[50] = 0.000;
> NormCDF[51] = 0.025;
> NormCDF[52] = 0.050;
> NormCDF[53] = 0.075;
> NormCDF[54] = 0.100;
> NormCDF[55] = 0.126;
> NormCDF[56] = 0.151;
> NormCDF[57] = 0.176;
> NormCDF[58] = 0.202;
> NormCDF[59] = 0.228;
> NormCDF[60] = 0.253;
> NormCDF[61] = 0.279;
> NormCDF[62] = 0.305;
> NormCDF[63] = 0.332;
> NormCDF[64] = 0.358;
> NormCDF[65] = 0.385;
> NormCDF[66] = 0.412;
> NormCDF[67] = 0.440;
> NormCDF[68] = 0.468;
> NormCDF[69] = 0.496;
> NormCDF[70] = 0.524;
> NormCDF[71] = 0.553;
> NormCDF[72] = 0.583;
> NormCDF[73] = 0.613;
> NormCDF[74] = 0.643;
> NormCDF[75] = 0.674;
> NormCDF[76] = 0.706;
> NormCDF[77] = 0.739;
> NormCDF[78] = 0.772;
> NormCDF[79] = 0.806;
> NormCDF[80] = 0.842;
> NormCDF[81] = 0.878;
> NormCDF[82] = 0.915;
> NormCDF[83] = 0.954;
> NormCDF[84] = 0.994;
> NormCDF[85] = 1.036;
> NormCDF[86] = 1.080;
> NormCDF[87] = 1.126;
> NormCDF[88] = 1.175;
> NormCDF[89] = 1.227;
> NormCDF[90] = 1.281;
> NormCDF[91] = 1.341;
> NormCDF[92] = 1.405;
> NormCDF[93] = 1.476;
> NormCDF[94] = 1.555;
> NormCDF[95] = 1.645;
> NormCDF[96] = 1.751;
> NormCDF[97] = 1.881;
> NormCDF[98] = 2.054;
> NormCDF[99] = 2.326;
> NormCDF[100] = 3.090;
> return(Null);
> }
> //Figure 22.5 Initialization of CDF
> //--------------------------
>
> A fairly detailed discussion about how to use it, including an
example, is
> on pages 295 through 305 of my book -- Quantitative Trading Systems.
>
> Thanks,
> Howard
> www.quantitativetradingsystems.com
>
>
>
>
> On 5/30/07, vlanschot <vlanschot@xxx> wrote:
> >
> > I have various functions for normal distributions, but for some
reason
> > none seem to be able to replicate Excel's NORMDIST
(x,mean,stdev,TRUE).
> >
> > I've applied the Abramowitz & Stegun approximation to calculate
the
> > cumulative normal function. However, the pdf agrees with Excel's
> > NORMDIST(x,mean,stdev,FALSE), but the cdf does not match its
NORMDIST
> > (x,mean,stdev,TRUE).
> >
> > I did read there have been criticisms expressed as to the
accuracy of
> > XL's approximations, but doubt this is applicable in this case.
> >
> > Any suggestions appreciated.
> >
> > PS
> >
> >
> >
>


__._,_.___

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html





SPONSORED LINKS
Investment management software Investment property software Investment software
Investment tracking software Return on investment software

Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___