IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

plot très bizarre


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut plot très bizarre
    Bonjour,

    Je demande tout simplement à matlab de me construire trois plot:

    S0=linspace(8,12,100)
    plot(S0, Europeandigitaloption(1,S0,10, 0.02, 0, 0.2, 0.5))
    hold on
    plot(S0, Europeandigitaloption(2,S0,10, 0.02, 0, 0.2, 0.5),'r')

    r = linspace(0.01, 0.03, 10)
    plot(r, Europeandigitaloption(1,10, 10, r, 0, 0.2, 0.5))
    hold on
    plot(r, Europeandigitaloption(2,10, 10, r, 0, 0.2, 0.5),'r')

    v = linspace(0.1, 0.3, 10)
    plot(v, Europeandigitaloption(1,10, 10, 0.02, 0, v, 0.5))
    hold on
    plot(v, Europeandigitaloption(2,10, 10, 0.02, 0, v, 0.5),'k')

    comme vous pouvez le voir (en PJ), les 2 premiers graphiques sont nickels mais le 3ème plante. pourtant j'ai fait tourné l'équation et j'ai comparé aux résultats sur excel et tout est bon...



    des idées.?

    Merci
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Salut,

    peut-être est-ce un problème d'orientation de tes vecteurs/matrices. Par acquis de conscience, essaye de transposer Europeandigitaloption(1,10, 10, 0.02, 0, v, 0.5) :

    v = linspace(0.1, 0.3, 10)
    plot(v, Europeandigitaloption(1,10, 10, 0.02, 0, v, 0.5)')
    hold on
    plot(v, Europeandigitaloption(2,10, 10, 0.02, 0, v, 0.5)','k')

    Si ça ne marche, il faudra expliquer un peu ton programme, notamment la structure de données Europeandigitaloption pour qu'on puisse t'aider.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Ok pas de problème:

    On me demande d'étudier l'évolution du prix d'une digital option (call et put) en fonction du prix de l'asset, du risk free rate et de sa volatilité.
    pour cela, j'ai mis en place cette fonction:

    function [ Europeandigitaloptionprice ] = Europeandigitaloption( C,S0, K, R,q, v, T)
    %EUROPEAN DIGITAL OPTION is a function to compute the price of an european
    %digital call/put option. Tap 1 if you want to price a call and 2 if you
    % want to price a put. To use this function
    % you have to know S0 the current price, K the strike
    % price, r the risk-free rate, q the dividend yield, sigma the
    % volatility and T the maturity.
    dt = v*sqrt(T)
    df=R-q-0.5*v.^2
    d2=(log(S0/K) + df * T ) / dt
    nd2=normcdf(d2)
    nd3=normcdf(-d2)
    if C==1
    Europeandigitaloptionprice = exp( - R * T ).* nd2;
    else Europeandigitaloptionprice=exp(-R*T).*nd3;
    end

    Jusque là tout marche. Cependant, pour étudier l'évolution je dois constituer trois plots en fonction des 3 déterminants cités ci dessus.
    Pour cela j'ai écrit ce script.

    subplot(311)
    S0=linspace(8,12,100);
    plot(S0, Europeandigitaloption(1,S0,10, 0.02, 0, 0.2, 0.5))
    hold on
    plot(S0, Europeandigitaloption(2,S0,10, 0.02, 0, 0.2, 0.5),'r')
    xlabel('underlying')
    ylabel('price')
    legend('Call','Put')
    title('Price underlying')

    subplot(312)
    r = linspace(0.01, 0.03, 10);
    plot(r, Europeandigitaloption(1,10, 10, r, 0, 0.2, 0.5))
    hold on
    plot(r, Europeandigitaloption(2,10, 10, r, 0, 0.2, 0.5),'r')
    xlabel('risk free rate')
    ylabel('price')
    legend('Call','Put')
    title('Price risk free rate')

    subplot(313)
    v = linspace(0, 1, 100);
    plot(v, Europeandigitaloption(1,10, 10, 0.02, 0, v, 0.5))
    hold on
    plot(v, Europeandigitaloption(2,10, 10, 0.02, 0, v, 0.5),'r')
    xlabel('volatility')
    ylabel('price')
    legend('Call','Put')
    title('Price volatility')

    Les 2 premiers graphes sont nickels de chez nickels mais le troisième déconne comme vous pouvez le constater en PJ.
    Je pense que le problème vient du fait que le v de volatilité (la variable) tourne 2 fois dans ma fonction mais je n'ai pas le choix.

    N'hésitez pas j'essaierai tous vos conseils. Bonne soirée
    Images attachées Images attachées  

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    L'appel
    Europeandigitaloption(1,10, 10, 0.02, 0, v, 0.5)
    retourne un scalaire.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Ok, dans la fonction Europeandigitaloption, il faut juste remplacer la ligne
    d2=(log(S0/K) + df * T ) / dt;
    par
    d2=(log(S0/K) + df * T ) ./ dt; % division par composante "./" au lieu de "/"

    N'oublie pas de passer en résolu si c'est le cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeurs de clés négatives très bizarres ...
    Par Christophe Charron dans le forum Requêtes
    Réponses: 15
    Dernier message: 30/03/2006, 10h42
  2. [JDBC] Erreur très bizarre dans ExecuteQuery
    Par boudou dans le forum JDBC
    Réponses: 6
    Dernier message: 17/03/2006, 18h33
  3. différence reload et location + pb très bizarre pour experts
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 09/01/2006, 12h05
  4. Problème très bizarre avec COUNT
    Par Nomade95000 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/10/2005, 14h12
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo