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
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...
É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...