Mega Code Archive

 
Categories / C# / Development Class
 

The normdist

// -------------------------------------------------------------------------------------------------------------------- // <copyright file="Simulator.Utils.cs" company=""> //    // </copyright> // <summary> //   The simulator. // </summary> // -------------------------------------------------------------------------------------------------------------------- #region Latence Algo Trading Solution by Sunix First Ltd // -------------------------------------------------------------------------- // THIS SOURCE FILE IS A PART OF THE LATENCE TRADING SUITE DEDICATED TO EMPOWER ALGORITHMIC TRADING ACTIVITIES. // BY USING ALL OR ANY PART OF THE SOFTWARE COMPONENT OR SOURCES, YOU AGREE TO THE TERMS OF THE COMMERCIAL LICENCE ISSUED BY SUNIX FIRST LTD. // DO NOT USE THE SOFTWARE UNTIL YOU HAVE CAREFULLY READ AND AGREED TO THE TERMS AND CONDITIONS OF THE LICENCE. // THE MATERIALS ARE PROVIDED "AS IS". SUNIX DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES WITH RESPECT TO THEM, // INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, AND FITNESS FOR ANY PARTICULAR PURPOSE. // SUNIX SHALL NOT BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING,WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE. // contact@latence.co.uk // --------------------------------------------------------------------------- #endregion #region using System; #endregion namespace Latence.Providers.Simulator {     /// <summary>The simulator.</summary>     public partial class Simulator     {         #region Methods         /// <summary>The normdist.</summary>         /// <param name="x">The x.</param>         /// <param name="mean">The mean.</param>         /// <param name="std">The std. </param>         /// <param name="cumulative">The cumulative.</param>         /// <returns>The normdist.</returns>         private static double NORMDIST(double x, double mean, double std, bool cumulative)         {             if (cumulative)             {                 return Phi(x, mean, std);             }             var tmp = 1/(Math.Sqrt(2*Math.PI)*std);             return tmp*Math.Exp(-.5*Math.Pow((x - mean)/std, 2));         }         // from http://www.cs.princeton.edu/introcs/...Math.java.html         // fractional error less than 1.2 * 10 ^ -7.         // cumulative normal distribution         /// <summary>The phi.</summary>         /// <param name="z">The z.</param>         /// <returns>The phi.</returns>         private static double Phi(double z)         {             return 0.5*(1.0 + erf(z/Math.Sqrt(2.0)));         }         // cumulative normal distribution with mean mu and std deviation sigma         /// <summary>The phi.</summary>         /// <param name="z">The z.</param>         /// <param name="mu">The mu.</param>         /// <param name="sigma">The sigma.</param>         /// <returns>The phi.</returns>         private static double Phi(double z, double mu, double sigma)         {             return Phi((z - mu)/sigma);         }         /// <summary>The erf.</summary>         /// <param name="z">The z.</param>         /// <returns>The erf.</returns>         private static double erf(double z)         {             var t = 1.0/(1.0 + 0.5*Math.Abs(z));             // use Horner's method             var ans = 1 -                       t*                       Math.Exp(                           -z*z - 1.26551223 +                           t*                           (1.00002368 +                            t*                            (0.37409196 +                             t*                             (0.09678418 +                              t*                              (-0.18628806 +                               t*                               (0.27886807 +                                t*(-1.13520398 + t*(1.48851587 + t*(-0.82215223 + t*0.17087277)))))))));             if (z >= 0)             {                 return ans;             }             return -ans;         }         #endregion     } }