Outils de développement rapide
Par cossaw le mercredi 10 décembre 2008, 23:58 - Me, Myself and I - Lien permanent
Je me suis rendu compte, au bout des années de code, que certaines fonctions fondamentales que j'utilisais, sans qu'elles soient optimales au niveau des structures, avaient l'avantage certain de pouvoir être applicable à à peu près tous mes projets.
Je suis ingénieur en mathématique et donc un peu informaticien
scientifique, et c'est ce dernier terme qui importe ici.
Comme tous les camarades qui travaillent dans un domaine similaire au mien, on
peut identifier certains problèmes génériques (à partir du moment où une
méthode mathématique existe) :
- comment traduire un algorithme, mais ce n'est pas le plus difficile
- comment développer une structure adaptée
- comment acquérir les données, comment les stocker (sous quelle forme, où, etc.)
- comment les protéger
J'en passe.
Prenons un exemple de code que j'ai développé en quelques minutes. Ça tient sur
un petit millier de ligne, dont plus des trois quarts sont des commentaires
(dont un vade mecum, ce qui répond à la fonction help/man).
Problème : relever des positions et des prix sur des
marchés financiers et estimer le plus simplement possible quelques indicateurs
comme : les positions cumulées par année, les prix moyens par trimestre,
les indicateurs de risque "fermé" (type RiskMetrics), etc. Que du calcul
algébrique. Modèle de prix : un facteur gaussien (i.e.
processus de Wiener le plus simple, avec vol constante).
Choix du langage : je fais du prototypage rapide, je code
alors très rapidement en python, ça convient tout particulièrement à mes
besoins.
Choix des structures : structures de base : listes,
dictionnaire, suffisent. BOn, pour utiliser quelques structures déjà bien
faites, allons pour Numeric ou numpy.
Choix de la structure de code : du très simple,
fonctionnel. Je découpe mes algorithmes en petits morceaux qui
s'appellent.
Choix des structures de données : là je n'ai pas vraiment
le choix, ce sont de bêtes tableaux à deux entrées (ex : produit côté
(appelé facteur de risque) en 1ère ligne, dates en 1ère colonne. Stockage
efficace et rapide en binaire, ou en csv zippé, ça marche aussi.
Réutilisation des fonctions : load_dic, get_line, etc.
pour les acquisitions de fichiers (save_dic, etc. pour les sauvegarde, bien
sûr). compute_variance_matrix pour les stats dont
on tire aussi les moyennes, é..., le reste, ça va se faire vite
Vision macro du code :
- je lis les données,
- je calcule mes stats,
- je calcul mes taux de change actualisés par pas mensuel (pour l'€, c'est juste le taux d'actualisation)
- je scinde les produits trimestriels (saisonniers, annuels) en autant de mois (un trimestre -> trois mois avec les positions diviéses par 3, les prix et volatilités inchangées),
- je fais mes petits calculs algébriques (essentiellement des sommes, des produits matriciels, etc)
- J'ordonne selon les requêtes
- j'enregistre
Faut savoir qu'on lit/visualise sous Excel... en finance, on sort peu du
chantier battu...
Un de mes collègue fait à peu près pareil, sauf que lui c'est avec Matlab, ce
qui est encore plus rapide mais un chouilla moins flexible mais qui permet de
meilleures visualisation, forcément. Seul pb : matlab, c'est pas vraiment
gratuit (et scilab, il ne veut pas en entendre parler)..
- je fais mes