Intégration et utilisation de la biblioth`eque Financial Numerical

Transcription

Intégration et utilisation de la biblioth`eque Financial Numerical
Intégration et utilisation de la bibliothèque
Financial Numerical Recipes
Daniel Herlemont
L’objectif de ce TP est d’intégrer et d’utiliser la bibliothèque de programmes ”Financial
Numerical Recipes” de Bernt Arne Odegaard.
Cette librairie est téléchargeable à partir de l’adresse http://finance.bi.no/∼bernt/
gcc prog. Elle est distribuée sous une licence ”open source” GPL (GNU Public Licence).
Ces librairies ont un double objectif : implémenter la plupart des méthodes numériques
les plus utilisées en finance tout en se familiarisant avec les développement C++ : ”The
current manscript therefore has various intented audiences. Primarily it is for students of
finance who desires to see a complete discussion and implementation of some formula. But the
manuscript is also useful for students of finance who wants to learn C++, and for computer
scientists who want to understand about the finance algorithms they are asked to implent
and embed into their programs”.
Cette librairie est assez complète, elle couvre :
– Les taux d’intérêt : évaluation par actualisation, duration, courbe des taux...
– Les produits dérivés
– les options vanilla,
– les options exotiques (Digitales, Barrières, Lookback, Asiatiques, ...),
– options américaines,
– méthodes numériques : binomiales, Monte Carlo, éléments finis,
– Les modèles de taux (Nelson Siegel, Cox Ingersoll Ross. ...) et produits dérivés de taux.
– La gestion de Portefeuille (Markowtiz, ...)
– Le risque de crédit (Modèle de Merton)
Etant largement diffusé et utilisé, le code source est d’une grande qualité, tant au niveau
de la documentation, complète et didactique qu’au niveau de la qualité des algorithmes.
Tout en étant bien adapté à l’enseignement, cet environnement constitue une excellente
base de départ pour des applications industrielles de développement (En pratique, on procède
souvent de la sorte, partant d’une base existante en l’enrichissant, voire la modifiant, en
fonction des besoins).
1
3 UN SIMPLE TEST
1
Environnent de développement MinGW
Les programmes sont développés en ANSI/C++ donc compatibles avec tout compilateur
conforme à la la norme et portable dans divers environnements : UNIX et WINDOWS. Dans
les deux cas, il est recommandé d’utiliser les outils GNU (gcc, g++, ...).
Sous WINDOWS, on pourra utiliser l’environnement MinGW. MinGW est un environnement de compilation GNU GCC dans sa version adaptée à Windows. Pour installer et
configurer MinGW ainsi que les outils associées voir le TP sur MinGW.
2
Compilation de la librairie
Télécharger le code source à l’adresse : http://finance.bi.no/∼bernt/gcc prog/recipes/
recipes.zip disponible également sous R:/downloads/recipes.zip
Décompresser le fichier recipes.zip dans un répertoire, disons, c:/financial-recipes.
Lire le fichier readme.txt (toujours lire le readme !)
se placer dans le répertoire c:/financial-recipes, puis exécuter les commandes
>make lib
... compile l’ensemble de code source
... genere le fichier "librecipes.a"
3
Un simple test
créer un répertoire, disons c:/financial-rercipes/test puis le fichier test.cc
Copier les fichiers suivant dans ce répertoire :
– fin_recipes.h, ce fichier contient les délcaration des points d’entrée de la librairie,
pour la compilation
– librecipes.a, ce fichier contient le code objet de la librairie, il faudra l’indiquer lors
de l’édition de liens.
#include <iostream>
using namespace std;
#include "fin_recipes.h"
void test_exotics_lookback(){
Daniel Herlemont
2
4 UN PROGRAMME GÉNÉRAL
double S=100; double Smin=S; double q = 0; double r = 0.06;
double sigma = 0.346; double time = 1.0;
cout << " Lookback call price = "
<< option_price_european_lookback_call(S,Smin,r,q,sigma,time)
<< endl;
};
int main() {
test_exotics_lookback();
}
Compiler et ”linker” à l’aide de la commande
>g++ test.cc librecipes.a
Cette comande genère le fichier exécutable a.exe.
Pour changer le nom du fichier, on utilisera par exemple :
>g++ -o test.exe test.cc librecipes.a
Il suffit ensuite d’exécuter le programme qui affiche le résultat à la console :
>a.exe
Lookback cal price = 27.0713
4
Un programme général
L’objet de cet exercice consiste à mettre en plae un programme en ligne de commande
interactif pour la saisie de paramètres, permettant d’afficher le prix d’une options vanille
pour différents
– prix du sous jacent S
– strike K
– taux d’intérêt r
– taux de dividendes q
– type d’options : ”call” ou ”put”
– maturité T
– américaine ou européenne
– méthode : forme explicite (si elle existe), binomiale, Monte Carlo éléments finis.
– les grecques.
Daniel Herlemont
3
4 UN PROGRAMME GÉNÉRAL
La structure générale du programme sera de la forme :
#include <iostream>
#include <string>
#include "fin_recipes.h"
//#include <ostream>
using namespace std;
/** print help.*/
void usage(ostream& os) {
os << "Usage" << endl;
os << "-S <value> : spot price" << endl;
exit(1);
}
int main(int argc, char *argv[]) {
int argn;
float S=100, K=100, r=0.05, q=0, sigma=.35, T=1;
string method="bs";
string cp="call";
string ae="european";
//argv[0] contient le nom du programme.
//if (argc <= 1) {
//usage(cerr);
//}
for (argn = 1; argn < argc; argn++) {
if (strcmp(argv[argn],"-S")==0 && argn < argc - 1) {
S=atof(argv[++argn]);
}
else if (strcmp(argv[argn],"-K")==0 && argn < argc - 1) {
K=atof(argv[++argn]);
}
else if (strcmp(argv[argn],"-sigma")==0 && argn < argc - 1) {
Daniel Herlemont
4
4 UN PROGRAMME GÉNÉRAL
sigma=atof(argv[++argn]);
}
else if (strcmp(argv[argn],"-T")==0 && argn < argc - 1) {
T=atof(argv[++argn]);
}
else if (strcmp(argv[argn],"-r")==0 && argn < argc - 1) {
r=atof(argv[++argn]);
}
else if (strcmp(argv[argn],"-method")==0 && argn < argc - 1) {
method=argv[++argn];
}
else if (strcmp(argv[argn],"-help")==0) {
usage(cout);
}
}
cout << "parameters:" << endl
<< "S=" << S << endl
<< "K=" << K << endl
<< "r=" << r << endl
<< "T=" << T << endl
<< "cp=" << cp << endl
<< "method=" << method << endl
<< "ae=" << ae << endl
;
// appel des fonctions
// bs
double result=0;
if (method=="bs" && cp=="call" && ae=="european") {
result=option_price_call_black_scholes(S,K,r,sigma,T) ;
// etc ...
} else {
cout << "no function available" << endl;
exit(1);
}
cout << "result=" << result << endl;
Daniel Herlemont
5
5 REMARQUES
return 0; /* or exit(0) */
}
5
Remarques
Autres logiciels open source pour les options :
– Quantlib : http://www.quantlib.org
– R-project, RMetrics : http://www.itp.phys.ethz.ch/econophysics/R
– PREMIA : http://cermics.enpc.fr/∼premia
Daniel Herlemont
6

Documents pareils

en PDF

en PDF L’écriture du programme strcmp est alors très simple. On doit cependant préciser (car ce n’est pas indiqué dans l’énoncé) le comportement du programme si l’utilisateur ne lance pas la commande avec...

Plus en détail

Économétrie des Marchés Financiers

Économétrie des Marchés Financiers  C’est le risque lié à la détention d’un actif peu liquide, ce qui ne permet plus de faire une couverture aux prix du marché, et nécessite une durée beaucoup plus grande pour la liquidation des po...

Plus en détail