Mercredi 25 février 2009
3
25
/02
/2009
23:05
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
Par Gilles De Truchis
-
Publié dans : Programmation AS3
0
-
Recommander