Le CAC et le DAX à l’épreuve du filtrage L1

Vous le savez peut-etre: il y a depuis quelques mois une intense activité de recherche autour du traitement du signal dans l’espace de Lebesgue L1(R), au contraire des résultats plus traditionnels qui se faisaient systématiquement dans L2(R), l’espace des signaux dits « d’énergie finie ». Quel intéret ? Ceci est du à un résultat très surprenant du jeune médaillé Fields Terence Tao qui a démontré qu’il était possible de récupérer exactement un signal fortement décimé à partir d’une minimisation dans L1(R). Ceci est à la base du Compressed Sensing. Du coup, je vous propose aujourd’hui de regarder à quoi peuvent bien ressembler nos indices habituels une fois passés « à la moulinette » de ces routines de filtrage très récentes; notamment, il en existe une extension consacrée au detrending de signaux, et ca tombe à pic, je l’ai programmée aujourd’hui en SciLab (le clone gratuit de Matlab). J’ai sous le coude une routine d’analyse des fluctuations restantes en norme L1, mais ca bugge encore pas mal pour le moment.

Cac350jours Alors, le premier candidat est notre CAC 40 national, sur une période de 350 jours (parce que cette durée est déjà très bonne lorsque l’on travaille dans L2 avec la Fast Fourier Transform, j’ignore le pourquoi mais certains parlent de la vitesse de propagation de l’information dans la hiérarchie des entreprises de la base à la tete). L’idée du filtrage est de minimiser la différence entre le signal filtré et l’original pénalisée par la dérivée seconde: plus on pénalise, plus le signal filtré est « anguleux », c’est-à-dire affine par morceaux (la dérivée seconde d’une fonction affine est nulle). Or, la chose intéressante avec une fonction affine, c’est que sa pente se calcule très facilement: pour le CAC 40, on obtient une baisse moyenne de -350 points par mois depuis début 2008 … Les détenteurs de turbo put open end sont heureux.

Dax350jours Maintenant, on passe au DAX 30 (voir ci-contre): meme faute, meme punition, on obtient avec la meme période d’observation une droite de pente autour des -500 points par mois. C’est normal, on part de plus haut, donc on va descendre plus vite (tous les skieurs savent ca). On insiste bien sur le fait que, cet algorithme étant très récent, je ne connais pas sa capacité à réagir aux retournements de tendance. C’est-à-dire que j’ignore combien de jours à contre-sens sont nécessaires avant qu’une nouvelle droite n’apparaisse dans le diagramme.

Euroyen700jours Par contre, ce qui vaut le coup d’etre regardé, c’est la croix euro/yen sur 700 jours. On voit bien que la progression est complètement stoppée, mais pas encore retournée. Le seuil des 152 est d’une importance très visible. Donc a priori, il y a une énorme réserve de gains en cas de retournement effectif … Sur cet exemple, on peut justement évaluer la réactivité de l’algorithme à attrapper les retournements.

(12 commentaires)

  1. je ne comprends pas trop l’intérêt de ce nouvel algo. Il me semble qu’avec pas mal de filtres différents on obtient ce signal. voir meme avec une moyenne glissante.

  2. T’as raison, Gaston … La trentaine de gros balèzes aux USA qui développent ces filtres à L.A., à Michigan et ailleurs sont des neuneus qui ne s’en sont pas rendu compte.
    Tu devrais meme leur écrire pour leur soumettre ta remarque, tiens …

  3. Laurent,
    Quel est l’interet de publier un tel article si tu reponds ce genre de chose a une question peut etre basique par rapport a ton savoir, mais absolument pas insultante ?

  4. Bonjour,
    Je ne suis pas un specialiste sur les applications financieres. D’un autre cote, je fait un petit blog qui a beaucoup d’articles sur le compressed sensing ( http://nuit-blanche.blogspot.com/search/label/CS ) et je pense que je peux me hasarder a repondre a la question du premier commentaire:
    Quand on fait du detrending comme le fait Kwangmoo Koh, Seung-Jean
    Kim, and Stephen Boyd dans l’article donne dans l’article, on minimize deux termes. L’un est une regression normale (terme en L2) et l’autre est nouveau (terme en L1). L’optimisation pousse la minimization a trouve un resultat final qui non seulement reduit l’erreur L2 que tout le monde utilise mais aussi trouve un resultat qui une derivee tres creuse ou parcimonieuse. Comme les droites n’ont pas beaucoup de variations :-), elles sont en generale solutions de ce genre de problemes. Le coefficient \lambda entre les deux termes est important car il permet de comprendre le « trade-off » i.e. ce que l’on gagne et ce que l’on perds: En periode d’instabilite par exemple, ce coefficient commande directement si la minimisation doit se faire en acceptant de grandes oscilations autour d’une seule droite ou en ayant des petites oscillations avec beaucoup de droites changeant souvent de pentes. Il est evident que des filtres qui ont deja cours sont peut-etre mieux compris, mais cette approche a l’intelligence de quantifier ce besoin entre creer une nouvelle droite et les oscillations du signal.
    Un autre petit point, le compressed sensing s’occupe plus largement de comment echantilloner un signal quand on sait que ce signal est parcimonieux/creux. L’utilisation des normes L1 est fait dans l’optique de retrouver des signaux qui ont ete deja ete comprimes. Dans l’exemple de la finance, tous ces signaux ont deja ete « decomprimes ». Il serait peut-etre interessant de voir si l’on peut obtenir d’abord des signaux comprimes. Il y a un debut de reflexion sur le fait que au lieu de passer son temps a decomprimer ces signaux, on peut commencer a faire de l’inference directement sur les signaux comprimes. Pour plus d’informations sur le compressed sensing:
    http://igorcarron.googlepages.com/cs
    et il y a des codes de reconstruction Matlab qui roulent aussi sur Octave 🙂
    http://igorcarron.googlepages.com/cscodes
    Emmanuel Candes, un francais, qui est a l’origine du Compressed Sensing avec Tao pense qu’une traduction pourrait etre:
    Acquisition comprimee.
    ( http://nuit-blanche.blogspot.com/2007/03/traduction-de-compressed-sensing-en.html )
    Igor.

  5. Excellent commentaire, je vous remercie de votre contribution!
    Alors, il est vrai que la pénalisation lambda est importante, elle est la meme pour tous les indices étudiés, à savoir 25000. C’est une valeur obtenue empiriquement, qui réalise un compromis entre la présence de nombreux « coins » et l’obtention d’une tendance exploitable à l’oeil nu.
    PS: je connais bien les papiers de Candes, Tao et Stromberg, j’ai commencé par lire ca, meme avant de comprendre les applications potentielles à l’extrpoaltion financiere.
    Votre commentaire sur l’extrapolation de signaux déja comprimés est encore plus intéressant: je vous réponds avec plaisir. Je ne peux pas mettre tous les détails dans mes posts ici, mais sachez toutefois que mon algo fonctionne de la facon suivante: on retire le trend de l’indice, on effectue la DCT de la fluctuation restante (parce que les algos de Boyd and co. travaillent dans R), on « nettoie » cette DCT, et c’est cette « DCT nettoyée » (pleine de zéros) qui est extrapolée en norme L1. La matrice A est donc de la forme m x n avec m<n, et ses composantes sont calculées de la facon suivante: DCT(n)*DCT(m)^(-1). Au bout du compte, on récupère l’indice extrapolé en inversant la DCT de l’extrapolation obtenue.
    Ai-je répondu à vos questions ?

  6. Excellent commentaire, je vous remercie de votre contribution!
    Alors, il est vrai que la pénalisation lambda est importante, elle est la meme pour tous les indices étudiés, à savoir 25000. C’est une valeur obtenue empiriquement, qui réalise un compromis entre la présence de nombreux « coins » et l’obtention d’une tendance exploitable à l’oeil nu.
    Votre commentaire sur l’extrapolation de signaux déja comprimés est encore plus intéressant: je vous réponds avec plaisir. Je ne peux pas mettre tous les détails dans mes posts ici, mais sachez toutefois que mon algo fonctionne de la facon suivante: on retire le trend de l’indice, on effectue la DCT de la fluctuation restante (parce que les algos de Boyd and co. travaillent dans R), on « nettoie » cette DCT, et c’est cette « DCT nettoyée » (pleine de zéros) qui est extrapolée en norme L1. La matrice A est donc de la forme m x n avec m<n, et ses composantes sont calculées de la facon suivante: DCT(n)*DCT(m)^(-1). Au bout du compte, on récupère l’indice extrapolé en inversant la DCT de l’extrapolation obtenue.
    Ai-je répondu à vos questions ?
    PS: je connais bien les papiers de Candes, Tao, et Stromberg meme si j’ai mis du temps a comprendre les applications possibles à la finance.

  7. I simply want to tell you that I am very new to weblog and absolutely loved this web blog. Probably I’m likely to bookmark your site . You absolutely have really good articles. Thanks a bunch for revealing your blog site.

Les commentaires sont fermés.