Gilles De Truchis

Cette article fait partie d'une series de pré-requis nécessaire à la programmation d'un Pricer d'Option

Dans la formule de BS avec dividende continue on note N la fonction de répartition de la loi normale:


L'implémentation peut être faite de 2 manière. La 1ère, approximative, est présentée en commentaire. La seconde est celle de la fonction de répartition.

package fx.bidesign.maths
{
    import fx.bidesign.maths.Factorial;
    import fx.bidesign.maths.GammaEuler;
   
    public class ProbabilityTools
    {
        public function ProbabilityTools()
        {

        }

        public static function normalDistribution( p:Number ):Number
        {
            var f:Number;
            var u:Number;
            var s:Number;
            var t:Number;
            var s1:Number;

            u = p * p;

            if (u > 55.5)
            {
                if (p > 0) return 1;
                else return 0;
            }
            else
            {
                s = 0;
                t = 1;
                f = 3;
               
                while ( s != s1 )
                {
                    s1 = s;
                    s = s + t;
                    t = t * u / f;
                    f = f + 2;
                }
                return p * s / ( Math.sqrt( 8 * Math.atan(1) * Math.exp(u) ) ) + 0.5;
            }
        }
        public static function normalDensity( p:Number ):Number
        {
            return ( 1 / 2 * Math.PI ) * Math.exp( - ( p * p / 2 ) );
        }
        public static function chiDistribution( p:Number, deg:int )
        {
           
        }
        public static function chiDensity( p:Number, deg:int )
        {
            /*var result:Number = Math.pow( 0.5, deg/ 2 ) / GammaEuler( deg / 2 );
           
            result *= Math.pow( p, ( deg / 2 ) - 1 ) * Math.exp( - p / 2 );
           
            return result;*/
        }
        public static function tDistribution( p:Number, deg:int )
        {
           
        }
        public static function tDensity( p:Number, deg:int )
        {
            /*var result:Number = 1 / Math.sqrt( deg * Math.PI );
           
            result *= GammaEuler( ( deg + 1 ) / 2 ) / GammaEuler( deg / 2 );
           
            result *= 1 / Math.pow( 1 + ( p * p / deg ), ( deg + 1 ) / 2 );
           
            return result;*/
        }
    }
}

Cette classe appartient au package fx.bidesign.maths. Les sources seront mises à dispositions lorsques l'ensemble des tutoriaux concernant le pricer seront publiés

Mer 25 fév 2009 Aucun commentaire