Bienvenue

Bienvenue sur Ceteris Paribus... Ce site traite d'actualité économique, de finance, de macroéconomie ainsi que de programmation Flash (actionscript 3). Vous trouverez donc, entre autres, des ressources informatiques pour des applications financières, mais également des articles techniques sur divers modèles financiers et macroéconomiques. Soucieux de vous épargner (pour les plus courageux), de longues démonstrations ennuyeuses, la plupart des modèles ne sont pas détaillés au maximum. De fait certains articles nécessitent de bonnes bases mathématiques surtout en ce qui concerne le calcul stochastique... Il ne me reste plus qu'à vous souhaiter une bonne navigation!

Note: Certaines pages de ce site contiennent des animations Flash qui nécessitent la dernière version du flash player.
Samedi 18 avril 2009 6 18 /04 /2009 12:18
- Publié dans : Programmation AS3
J'ai enfin trouvé le temps de recoder mes classes financières et je mets donc en ligne la classe Black&Scholes avec en plus les méthodes statiques pour les grecs.

package fx.bidesign.maths
{
    import fx.bidesign.maths.ProbabilityTools;

    public class BlackScholes
    {

        public function BlackScholes()
        {

        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, parité)
        public static function value( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );

            var call:Number = s * Math.exp( - c * t ) * ProbabilityTools.normalDistribution( d1 ) - k * Math.exp( - r * t ) * ProbabilityTools.normalDistribution( d2 );
            var put:Number = - s * Math.exp( - c * t ) * ProbabilityTools.normalDistribution( - d1 ) + k * Math.exp( - r * t ) * ProbabilityTools.normalDistribution( - d2 );

            return [call / p, put / p ];
        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, parité)
        public static function delta( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );

            var call:Number = Math.exp( -  c * t) * ProbabilityTools.normalDistribution( d1 );
            var put:Number = Math.exp( - c * t ) * ( ProbabilityTools.normalDistribution( d1 ) - 1 );

            return [call * 100, put * 100];
        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, parité)
        public static function gamma( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );

            var call:Number = Math.exp( - c * t ) * ( ProbabilityTools.normalDensity( d1 ) / ( s * v * Math.sqrt( t ) ) );
            var put:Number = call;

            return [call / ( p / 100 ), put / ( p / 100 )];
        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, prime du put ou du call, parité)
        public static function theta( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, fv:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );
    
            var call:Number = - Math.exp( - c * t ) * s * ProbabilityTools.normalDensity( d1 ) * v / ( 2 * Math.sqrt( t ) );
            call += - r * k * Math.exp( - r * t ) * ProbabilityTools.normalDistribution( d2 );
            call += c * s * Math.exp( - c * t ) * ProbabilityTools.normalDistribution( d1 );
           
            var put:Number = - ( s * Math.exp( - c * t ) * v ) / ( 2 * Math.sqrt( t ) ) * ProbabilityTools.normalDensity( d1 );
            put += + r * k * Math.exp( -r * t ) * ( 1 - ProbabilityTools.normalDistribution( d2 ) );
            put += - c * s * Math.exp( - c * t) * ProbabilityTools.normalDistribution( 1 - d1 );
            return [call / 52 / fv * 100, put / 52 / fv * 100];
        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, prime du put ou du call, parité)
        public static function rho( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, fv:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );

            var call:Number = k * t * Math.exp( - r * t ) * ProbabilityTools.normalDistribution( d2 );
            var put:Number = k * t * Math.exp( - r * t ) * ( ProbabilityTools.normalDistribution( d2 ) - 1 );

            return [call / fv, put / fv];
        }
        // (sous-jacent, prix d'exercice, jours restant, volatilté, taux sans risque, dividende, prime du put ou du call, parité)
        public static function vega( s:Number, k:Number, t:Number, v:Number, r:Number, c:Number, fv:Number, p:Number = 1 ):Array
        {
            var d1:Number = ( Math.log( s / k ) + ( r + Math.pow( v, 2 ) / 2 ) * t ) / ( v * Math.sqrt( t ) );
            var d2:Number = d1 - ( v * Math.sqrt( t ) );

            var call:Number = s * Math.exp(- c * t ) * ProbabilityTools.normalDensity( d1 ) * Math.sqrt( t );
            var put:Number = call;

            return [call / fv, put / fv];
        }
        // (sous-jacent, valeur du delta, prime du put ou du call)
        public static function elasticity( s:Number, del:Number, fv:Number ):Array
        {
            var call:Number = s * del / fv;
            var put:Number = s * del / fv;

            return [call / 100, put / 100];
        }
    }
}

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
Ecrire un commentaire - Voir les 0 commentaires - Recommander
Jeudi 16 avril 2009 4 16 /04 /2009 21:18
- Publié dans : Les Options
Afin de mieux comprendre le modèle binomial, considérons le cas où l'on a seulement deux états possibles. Le sous-jacent en t = 0 vaut S0 et en t = 1 peut augmenter de u avec une probabilité de p ou diminuer de d avec une probabilité de (p-1).  Si on intègre le rendement de l'actif sans risque R = 1+r, en absence d'opportunité d'arbitrage (AOA), d < 1+r < u. (Notre portefeuille se compose donc d'un actif et d'un actif sans risque)

 

On peut alors écrire le payoff en cas de hausse en t = 1: C1u =max (Su - K, 0)

On peut alors écrire le payoff en cas de baisse en t = 1: C1u =max (Sd - K, 0)

 

Ce résultat est obtenu par la duplication de cette prise de position. On va représenter notre portefeuille comme la combinaison de nos deux actifs avec α la quantité d'actif risqué et β la quantité d'actif sans risque: V0 = αS+β. On représente à nouveau en t = 1, le portefeuille en cas de hausse, puis de baisse.

V1u = αSu+β (1+r)

V1d = αSd+β (1+r)

Pour que le portefeuille duplique l'option, on cherche à résoudre le système suivant:

C1u = αSu+β (1+r)

C1d = αSd+β (1+r)


On en déduit donc l'expression suivante de notre portefeuille de couverture en t = 0:

Puisqu'en AOA la prime de l'option en t = 0 est égale à la valeur du portefeuille de couverture, V0 = C0. Pour un PUT, le raisonnement est le même:

On remarquera que les probabilités des événements de hausse comme de baisse n'interviennent pas. Pour les faire apparaître on va supposer que les pondérations de C1u et C1d dans la relation suivante correspondent à des probabilités risque-neutre. On notera au passage que ces pondérations sont non nulles et de somme unitaire. Nous les nommerons q et (1-q). Les probabilités risque-neutre impliquent que les agents soient indifférents aux primes de risques (risk premium) puisque tous les actifs ont la même espérance de rentabilité que celle d'un actif sans risque.

On pourra alors écrire l'espérance du payoff en t = 1  (Eq[C1] = q C1u+(1-q) C1d) et réécrire le Call à l'état initial:

De même en rajoutant une période on pourra vérifier:

Jusqu'à N période:

 

 

 

Sources: J. Cox, S. Ross, M. Rubinstein, Option Pricing, a simplified approach, Journal of Financial Economics (79)

R. Portait and Patrice Poncet, Finance de marché, intruments base, produits dérivés, portefeuilles et riques, Dalloz (08)
John Hull, Options, Futures et autres actifs dérivés, Pearson Education, (07)
Par Gilles De Truchis
Ecrire un commentaire - Voir les 0 commentaires - Recommander

Un problème d'affichage...?

Certaines pages de ce site contiennent des animations Flash qui nécessitent la dernière version du flash player.

haut de page

Présentation

En préparation...

Etude de la convergence entre le modèle BS et le modèle CRR.
Modèle de regime-switching: Hamilton et extensions.
Quelques modèles non-linéaires de volatilité de type ARCH.
VAR structurelles à hétéroscedasticité.



Recherche

Music Player

Calendrier

Mars 2010
L M M J V S D
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
<< < > >>
 
Créer un blog gratuit sur OverBlog - Contact - C.G.U. - Signaler un abus