Croisement de courbes

Résolu/Fermé
BFEXCEL Messages postés 7 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 5 octobre 2013 - 28 sept. 2013 à 19:35
 BFEXCEL - 21 oct. 2013 à 23:25
Bonjour à tous,
Nouveau sur ce blog
Voici mon problème plusieurs des mes anciens prof ont "collé" donc c'est assez costaud :-) !

- Dans Excel tracez 2 courbes aléatoires qui ne se croisent pas nommées High et Low
je cherche à tracer 2 droites horizontales (donc 2 constantes) nommées CB1 et CB2 entre High et Low de telle sorte que:
CB1 >CB2
CB1-CB2 soit le plus grand possible ou du moins le cumul des différences soit le plus grand possible
sachant que CB1 doit un maximum de fois être < à High
ET
CB2 doit doit un maximum de fois être >à Low

D'avance merci

6 réponses

ccm81 Messages postés 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
28 sept. 2013 à 20:47
Peut être un début de réponse
https://www.cjoint.com/?3ICuUELHTEj

Bonne fin de journée
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
29 sept. 2013 à 02:15
Bonsoir ccm81,

Sympa le graphique!

Je crois que cependant BFEXCEL ne contraint pas C2 à être supérieur à max(low) ni C1<min(high).
En plus, si on prend high=x² et low=x sur [1.01, 15], on n'a pas de C1, C2 si on considère C1<min(high), C2>max(low) et C1>C2.

Perso, j'ai interprété "le cumul des différences soit le plus grand possible" comme étant une fonction économique à maximiser sous contraintes sur les variables C1 et C2.

Cette fonction est l'intégrale de C1-C2 sur l'ensemble des x tels que C1<high(x) ET C2>low(x).
Autrement dit on veut maximiser la surface d'un ou plusieurs rectangles de hauteur C1-C2 et dont les bases dépendent de C1 et de C2 : { x tels que C1<high(x) ET C2>low(x)}.

Lorsque la solution analytique n'est pas disponible, il faut donc trouver le moyen de construire cette fonction caractéristique et de la mesurer.
Là, excel est notre ami :
1) mettre en place une discrétisation du domaine de définition (par pas de .01 par exemple),
2) calculer les valeurs de high et de low pour ces valeurs,
3) positionner une colonne de 0/1 pour repérer les valeurs de x qui correspondent à la condition C1<high(x) ET C2>low(x),
4) positionner 2 variables C1 et C2,
5) sommer la colonne de 1/0 et
6) multiplier cette somme par (C1-C2).
On obtient ainsi la fonction économique. (à un facteur 100 près !!!)

Ensuite, il y aura au moins 2 possibilités : soit boucler sur les couples (C1, C2) pour trouver celui qui offre la surface la plus grande (potentiellement très long) soit laisser Excel et son solveur se débrouiller.

Pour que le solveur soit heureux, à la cellule à maximiser et aux 2 variables C1 et C2, il faut ajouter les contraintes sur C1 et C2.
C1<max(high)
C1>min(high)
C2>min(low)
C2<max(low)
C1>C2

Reste à choisir la méthode : le simplexe ne servira à rien, GRG non linéaire devrait s'approcher de l'optimum. Ne pas hésiter à lancer la méthode évolutionnaire pour voir s'il y a amélioration du résultat.

Si on reprend le cas high=x² et low=x sur [1.01, 15] on a une solution analytique directe : C1=(5+SQRT(30))² soit 109.77225 et C2=15 pour une surface maxi de (15-(5+SQRT(30))*(C1-C2) =428.63
Cela va permettre de tester le solveur sur le modèle proposé qui a fourni 425.71 au premier lancement pour C1=106.71 et C2=14.96 et 429.58 au second lancement pour C1=109.83 et C2=14.999999

Si maintenant on choisit high =max(cos x, sin x) et low= min(cos x, sin x)-.000001 sur [.01, 14.04], le solveur fournit C1= 0,393280532, C2= -0.348267335 et Maximisation= 241.7446046
Même sous la torture, il n'améliore pas le résultat.

j'ai tout de suite mis le fichier au format 2003 : https://www.cjoint.com/?CIDcnPEYRR2

cordialement
0
BFEXCEL Messages postés 7 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 5 octobre 2013
29 sept. 2013 à 13:45
Wouaaa ! Merci beaucoup,

je bosse la dessus pour comprendre votre réponse et reviens vers vous.
Bon dimanche
0
Bonjour ccm81,

merci pour le temps investi.

j'ai essayé votre approche mais je trouve mieux à la main voir exemple ici (http://cjoint.com/?CIDolzD02jv) si ça peu vous aider -
D'avance merci

En parallèle je suis en train d'analyser la réponse de JvDo qu nécessite un peu de temps.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
30 sept. 2013 à 03:42
Bonsoir BFEXCEL,

Je vois sur ton exemple que tu cherches une formule, pas de solution à base de solveur ou de valeur cible.
Tu n'es pas sur un forum de math donc tu risques d'être déçu car on va plafonner assez vite.

En fait, tu veux maximiser une fonction de 2 variables (C1 et C2). Il faut donc identifier la fonction et annuler le gradient pour avoir des candidats au maximum.

Pour moi, cette fonction c'est (C1-C2) multiplié par l'intégrale sur R de Heaviside(C2-low)*Heaviside(high-C1)dx. (à moduler selon que les inégalités sont strictes ou larges)

Cette intégrale n'est rien d'autre que la mesure de l'ensemble { x tels que C1<high(x) ET C2>low(x)}.
Normal qu'en le multipliant par (C1-C2) on obtienne ce que j'appelle la fonction économique.

Sur excel, ça devient (C1-C2) multiplié par la somme (sur la discrétisation de l'intervalle de définition de high et de low) de la fonction SIGNE(1+ SIGNE(C2-low))*SIGNE(1+ SIGNE(high-C1)). (là, je colle à ton exemple et aux inégalités larges)
C'est ce que j'avais décrit dans mon commentaire précédent et dans le classeur excel 2003 l'accompagnant.

Je reviens sur l'idée de la formule : si tes courbes sont aléatoires, il sera difficile de faire un traitement symbolique sans fonction à se mettre sous la dent.

Pour finir, peux tu nous dire pourquoi tu t'intéresses à ce problème?

Cordialement
0
Merci JvDo,

Bien vu coté analyse- Coté Maths il faut que je trouve un peu d'aide pour bien intégrer ta réponse mais comme je vis sur un bateau et je suis à Panama actuellement ça ne se trouve pas facilement.

C'est pour ça que je bosse en parallèle sur une automatisation du Solver pas de la valeur cible. Mais c'est frustrant de ne pas savoir.

En fait je travaille sur des cours boursiers a titre perso.

Je te tiens au courant de mes avancées. Encore merci.
0
ccm81 Messages postés 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
30 sept. 2013 à 11:40
@BFEXCEL
Je ne peux pas lire ton fichier, j'en suis resté à excel 2003

@JvDo
Effectivement, j'ai mal interprété la demande, et ton approche mathématique est fort intéressante.
J'ai quand même essayé une approche naïve du problème (il faut bien s'amuser un peu) que je mets au cas où!
Le problème bien sûr: si tes courbes sont aléatoires, il sera difficile de faire un traitement symbolique sans fonction à se mettre sous la dent.

https://www.cjoint.com/?3IElvNkkRhH

Bonne journée
0
Bonjour ccm81,

Merci pour ton fichier, je regarde au plus vite.
Voilà le lien avec une version xls du mien : http://cjoint.com/?CIEoBSvDN8R au cas ou ça te trotterait dans l'esprit.

Bonne semaine
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10856 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 10 mai 2024 2 404
Modifié par ccm81 le 30/09/2013 à 17:34
Je vais certainement être encore à côté de la plaque, mais au vu de ton fichier (formules en ligne 7)
RQ1. tes différences sont calculées sur des points isolés (Ycb1-Ycb2) et non de manière continue sur des intervalles (avec des calculs d'intégrales)
RQ2. dans ton post#1 tu parles de courbe, le graphique fourni (post#8) est une ligne brisée. ça change pas mal la donne au niveau de la discrétisation éventuelle comme dans la proposition de JvDo
En fait (RQ1) ton graphique peut être vu comme un nuage de points isolés
RQ3. Je me suis basé strictement sur ton fichier et ajouté une approche graphique manuelle de CB1 et CB2 qui répondrait à ta question "Quelle formule mathématique permet de donner les valeurs de CB1 et CB2 pour que K7 soit au max sans passer par le solveur ou valeur cible ?"
https://www.cjoint.com/?3IEqWhe6vXP

Bon vent
0
Bonjour ccm81,

Merci encore,
je parts pour NYC où je resterai 6 semaines.ce sera plus facile de répondre que depuis le bateau. Je regarde ta réponse et te fais un retour rapidement.
Bonne semaine
0
BFEXCEL Messages postés 7 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 5 octobre 2013
5 oct. 2013 à 21:11
Hello ccm81,

je viens d'arriver à NYC- J'ai pu travailler sur ton fichier, il m'a aidé coté compréhension -merci- mais tjs pas de formule
CB1 et CB2 sont des séries de points aléatoires sans relations entre eux comme dit à JvDo ce sont des cotations boursières (Open / close) -
Je pense qu'il doit y avoir une piste en trouvant les barycentres de CB1 et CB2- saurais-tu les calculer sous Excel svp ?
D'avance merci
0
BFEXCEL Messages postés 7 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 5 octobre 2013
5 oct. 2013 à 21:16
Bonjour JvDo,
Merci pour ton fichier - on a pas mal bossé dessus mais rien de concret coté formule- J'ai suivi ton conseil aussi j'ai posté mon problème sur un forum de math mais pas de retour pour l'instant).
Si comme dit à ccm81 il n'y pas de formule qui relie les points de High et Low (je me suis trompé décalage horaire oblige dans mon message à ccm81) je suis convaincu qu'il y a un lien entre le nombre de paire CB1/CB2, l'écart entre les paires Hight / Low- je pensais à trouver les barycentre de High et Low - Tu as déjà fait qq chose dans ce genre svp ?
A+
0
BFEXCEL Messages postés 7 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 5 octobre 2013
5 oct. 2013 à 21:17
Hi ccm81,

il a un beug dans mon dernier message je parlais de High et Low et non pas CB1 /CB2 - sorry-
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
6 oct. 2013 à 18:05
Bonjour à tous,

Je ne pensse pas que l'approche barycentrique soit prometteuse.
C'est une forme de moyenne et (0, 100) et (49, 51) ont même moyenne sans être, a priori, comparable.
Pour des cours de bourse, les bandes de Bollinger portent plus d'informations et permettent, avec des indicateurs complémentaires (stochastique, parabolique et moyenne), de construire une analyse technique.
Mais ça, les logiciels de suivi de cours le proposent tous. Tu peux même tester tes stratégies sur le passé.
Donc, que veux-tu construire comme indicateur que tu ne trouves pas dans les logiciels du marché?

Cordialement
0
Bonjour à tous,

Je n'ai pas trouvé de solution encore satisfaisante, mais merci à tous ceux qui ont essayé de m'aider notamment ccm81 et JvDo
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
19 oct. 2013 à 20:09
Bonjour

As-tu pensé à développer une fonction en C?
Elle traiterait (plus rapidement qu'en VBA) une double itération sur C1 et C2 par pas de 1/100ème (ou autre) avec C1 et C2 contraints à : min(high)< C1 <max(high) , min(low)< C2 <max(low) et C1>C2 .
Soit N = (max(high) - min(high))*100 * (max(low) - min(low))*100 un majorant du nombre d'itérations (puisqu'on n'utilise pas la contrainte C1>C2).
On est en O(amplitude(high)*amplitude(low)/pas²)

Selon l'amplitude de high et de low, N est de l'ordre de quelques centaines de milliers de boucles.
Pour que ça fasse moins (si on veut tester en VBA par exemple), il suffit d'augmenter la taille du pas (1/10 au lieu de 1/100 par exemple) et on descend à quelques milliers d'itérations.

Il est également possible de faire un premier passage en pas de 1/10ème pour identifier rapidement les zones réduites de l'optimum potentiel pour ensuite les travailler avec plus de précision. C'est mathématiquement faux mais dans la vraie vie, ça doit le faire.

Arrivé à l'intérieur de ces N itérations, C1 et C2 sont fixés.
Il faut alors :
1) calculer l'intégrale de C1-C2 (par la méthode des trapèzes par exemple) sur l'ensemble A = { x / C1<high(x) ET C2>low(x)}.

2) identifier, dans la liste des valeurs de high et de low (ensemble de points de 1 à n), les abscisses où C1<high(x) ET C2>low(x) (on détermine A en fait).
Ca se fait en O(n).

3) boucler enfin sur card(A) pour intégrer C1-C2 par la méthode des trapèzes en sommant les [high(i) + min(C1,high(i+1))]/2

Remarque : toutes ces opérations peuvent se faire en nombre entier en multipliant les cours par 100 ou 10000). Le pas sera alors de 1 ou de 10.

Une fois que l'intégrale est calculée on mémorise la valeur maximum, le C1 et le C2 associé.

En sortie des N boucles, il suffit d'exhiber la dernière valeur maxi, c'est le résultat.

Si tu as des jeux de données de test il sera intéressant de valider la nécessité du passagge au C.

Quel est ton horizon de temps dans l'étude de tes courbes?
Te faut-il du temps réel?
Peux-tu travailler sur de moyennes glissantes?

cordialement
0
Merci beaucoup JvDo,
je pense que sur cette base, ça devrait le faire. Je travaille sur des historiques, pas de temps réel. Les moyennes glissantes n'ont rien donné.
Encore merci. Si tu as besoin de conseils en chasse sous-marine , c'est plus mon domaine....
A+
0