IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Problème de raisonnement dans le cadre de boucles imbriquées


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Aucune
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Par défaut Problème de raisonnement dans le cadre de boucles imbriquées
    Bonjour

    J ai honte de poster tant la solution à mon problème doit être simple mais il m'est 'intellectuellement' impossible d inverser mon raisonnement alors je m adresse à vous.
    Comme une image vaut mieux qu un long discours :
    Nom : chart.png
Affichages : 621
Taille : 27,8 Ko

    il s agit d un chart simplifié de cours boursiers.

    Actuellement je boucle de 1 à n pour détecter les baisses de 2 unités et le remontés de 3. J ai volontairement simplifié le chart mais il se peut que les cours varient entre 9 et 11 par exemple mais sans jamais dépasser le cours au point 9.

    Etant donné que je boucle de 1 à N, ici je détecte [3-19].Si j imbrique une boucle après la détection du 3 il va me détecter [4-20].... Tout ceci en supposant que j ai les 22 de mon chart.

    Mais étant donné que je lis un fichier, en X=4, je n ai que les 4 première valeurs.

    Je cherche donc à détecter une baisse d'au moins 2 unités (ici x=11) par rapport à un dernier plus haut (ici le point en x=9) suivi d'une remontée d'au moins 3 unités (ici x=14).

    Je sais que je dois boucler de N à 1 mais impossible pour mon cerveau de quinqua débutant en informatique d'envisager une boucle dans ce sens !!!

    J ai donc besoin de vous.

    Merci pour votre aide

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Pardon d'être cru, mais on ne comprend rien. Que donne-t-on en entrée ? Que veut-on en sortie ? Pourquoi ne parles-tu jamais des pentes des droites ? Pourquoi ne parles-tu jamais des valeurs d'ordonnée ? D'où vient "[3-19]" ? Pourquoi 3 ? Pourquoi 19 ? Pourquoi 4 ? Pourquoi 20 ? Cherche-t-on un maximum de baisse et un maximum de hausse ? Ne travaille-t-on que sur les minima locaux ?

    Ce n'est pas une litanie. J'attends une réponse à ces questions.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    Rien compris.
    Essaye d'expliquer clairement ce que tu cherches, sans nous parler de boucles de boucles ...

  4. #4
    Membre averti
    Homme Profil pro
    Aucune
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Par défaut
    Ok, pas de pb.
    C est vrai qu'à me relire...

    Mon pb est donc le suivant :

    Je lis un fichier de cours de bourse journaliers.
    Pour chaque date j ai le prix d ouverture, de fermeture, le plus haut et le plus bas.

    Je cherche à savoir si le plus haut du jour, c est à dire le dernier 'lu' remplit les critères suivants.
    -Il est plus haut de 3 points qu'un plus bas précédent.
    -que ce même plus bas précédent correspond à une baisse d au moins 2 points par rapport à un plus qui le précède.
    -

    (C est ce que j ai voulu représenter par la figure tracé entre les point d’abscisse 9 et 14 de manière très simplifiée)

    Dernière précisons, seuls les plus hauts et plus bas sont pris en compte, les phases de montées et de descente n'ont aucune durée/longueur déterminée contrairement à ce que peut laisser paraître/penser mon graphique.

    J espère cette fois avoir été plus clair.

    merci pour votre aide

  5. #5
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Problème de raisonnement dans le cadre de boucles imbriquées
    Bonjour, :-)

    La dernière mise au point confirme le premier énoncé du problème.

    Citation Envoyé par Debutant_pc Voir le message
    ... Je cherche donc à détecter une baisse d'au moins 2 unités (ici x=11) par rapport à un dernier plus haut (ici le point en x=9) suivi d'une remontée d'au moins 3 unités (ici x=14) ...
    Soit (Un) la suite des valeurs successives du cours en Bourse d'une action donnée.

    1°) Il faut d'abord envisager un repérage systématique des extremums (maximums ou minimums) suffisamment prononcés, par le calcul de l'écart séparant une valeur courante (Uk) de ses deux valeurs voisines, antérieure (Uk-1) et postérieure (Uk+1) .
    Arès voir convenu d'un seuil arbitraire (s = 0.4) il est possible d'associer à la suite précédente (Un) une seconde suite (Vn) définie de la façon suivante;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Si ((U[k] > U[k-1] + s) ET (U[k] > U[k+1] + s)) OU ((U[k] < U[k+1] - s) ET (U[k] < U[k-1] - s)) Alors Vk = 2.U[k] - U[k+1] - U[k-1]
    Sinon V[k] = 0 .
    La suite des cours (Un) étant indexée de (0) à (N) - soit (N + 1) valeurs - celle des extremums est définie de (1) à (N-1); on pourra poser V(0) = V(N) = 0 , afin d'éliminer toute indétermination.
    Il faut connaître la date (T°) du premier extremum, ce que donnent les instructions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    k = 0;
    Tant que (V[k] = 0) Faire k = k + 1;
    T° = k ; 
    Si (U[] > U[0]) Alors s = 1 Sinon s = -1 ;
    2°) Après la suite indicatrice des pics (Vn), celle (Wn) du sens des variations des cours, définie de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pour k Variant de (0) à (T° - 1) Faire V[k] = s ;
    Puis au-delà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si (V[k] <> 0) Alors W[k] = 0
    Sinon 
    Début
    Si (V[k - 1] = 0) Alors W[k] = W[k - 1]
    Sinon W[k] = -W[k - 2] 
    Fin
    Ces deux suites, si elles sont correctement codées, peuvent constituer une base pour la suite du programme.
    Il n'y a pas de boucles imbriquées; il faut seulement définir des suites différentielles, qui permettent de caractériser les variations du cours boursier.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Par défaut
    Ma vision: Lecture des données en deux passes pour extraire les plus hauts et les plus bas
    1ere passe:
    Tant que [Tn]>[Tn-1] avancer
    Sinon stocker valeur [Tn-1] dans [DHn] // c'est un plus haut
    2eme passe:
    Tant que [Tn]<[Tn-1] avancer
    Sinon stocker valeur [Tn-1] dans [DBn] // c'est un plus bas
    Quand on a tous les plus hauts et les plus bas on teste les antécédents avec n comme index.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    plus_haut_jamais_vu = 0
    plus_bas_jamais_vu = 999999
     
    Lire_ligne ( --> ligne_lue)
    Tantque Ligne_lue <> NULL 
         Plus_haut_jour = 3ème valeur de ligne_lue
         Plus_bas_jour = 4ème valeur de ligne_lue
         si plus_haut_jour > plus_haut_jamais_vu  alors plus_haut_jamais_vu  = plus_haut_jour
         si plus_bas_jour < plus_haut_jamais_vu -2 alors 
              plus_bas_jamais_vu = plus_bas_jour
         fin
         si plus_haut_jour > plus_bas_jamais_vu + 3 alors
              print ( "Bingo !",  ligne_lue)
         fin
         Lire_ligne ( --> ligne_lue)
    fin

  8. #8
    Membre averti
    Homme Profil pro
    Aucune
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Par défaut
    Je te remercie pour ton 'code'.
    Je l ai utilisé comme 'base'.
    J'avais simplement oublié de mettre le post e résolu et comme d autres messages arrivent je laissais ouvert.

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    a la bourse et ses vicissitude

    pour info un valeur boursière tels que Debutant_pc l'entend est composé de n valeur

    Valeur d'ouverture
    Valeur de fermeture
    Valeur la plus haute
    valeur la plus basse
    le nombre d'operation passé pendant la seance
    ...

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TVALBOURSE  = ENREGISTREMENT
      VALOPEN  numeric
      VALCLOSE numeric
      VALMAX    numeric
      VALMIN    numeric
      .... 
    end;
    je suppose qu'il a une une liste de valeurs boursière

    donc

    Je cherche à savoir si le plus haut du jour, c est à dire le dernier 'lu' remplit les critères suivants.
    -Il est plus haut de 3 points qu'un plus bas précédent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       -Il est plus haut de 3 points qu'un plus bas précédent.
      POUR  I DE 1 JUSQU'A N-1 FAIRE
       //-Il est plus haut de 3 points qu'un plus bas précédent.
        SI  (LIST[N].VALMAX - LIST[N-I].VALMIN) > 3  ALORS 
          POUR  j DE 0 JUSQU'A i-1 FAIRE
         // -que ce même plus bas précédent correspond à une baisse d au moins 2 points par rapport à un plus qui le précède.
            SI  (LIST[N-I].VALMIN - LIST[N-I-j].VALMAX) < 2  ALORS 
              AJOUTEINDICETMP(N)
            FINSI
          FINPOUR
        FINSI
      FINPOUR
    voila mes deux cents

  10. #10
    Membre averti
    Homme Profil pro
    Aucune
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Par défaut
    Tu as du avoir un pb lors de l écriture de tes exemple car tu écris V09 = 98 ; V11 = 96 ; V15 = 100 et V09 = 98 ; V11 = 91 ; V15 = 95 ? mais je crois avoir compris.

    Effectivement on pourrait procéder de la sorte mais il faut considérer que je lis le fichier chronologiquement et que je suis à T=14 au moment ou je fais mon test.
    Mon objectif est de 'capturer' seulement le dernier mouvement depuis un pic (en x=9).

    L’idéal serait d être en x=12, vérifier que je viens de passer un pic à la baisse, vérifier que la chute est d au moins 2 par rapport à un pic, attendre que le cours remonte de +3 et ouvrir la position à l achat... Mais comme je ne m en sortais déjà pas avec mon simple pb, j ai simplifié mon énoncé pour avoir une "base de travail".

    Si je procédais comme tu le proposes, je capturerais beaucoup trop de choses et pas que du bon.
    Ici on aurait détecté une chute de 2 en X=3, une remontée de 3 en X=19.
    Bon ok ça aurait fonctionné avec mon chart pke j ai bien une remontée de 3 en X=22 mais j ai tracé ça simplement pour avoir un avis. Ici X=19 aurait pu être un plus haut historique et le cours ne serait jamais repassé au dessus et plus aucune position n aurait été ouverte.
    Alors qu en utilisant 'mon' système, si le cours fluctue après X=19 alors je peux toujours profiter de ces mouvements etant donné que l on prend en compte le dernier 'modèle'...

    mais s'agissant d'un cours boursier, c'est une occurrence dépourvue d'intérêt puisqu'elle correspondrait à une revente à perte:
    En bourse on peut vendre à découvert et ainsi gagner à la hausse comme à la baisse mais étant donné que mon système est censé ne détecter que les hausse, effectivement ça aurait été perdant.

  11. #11
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 216
    Par défaut
    Tu insistes sur le fait que tu lis le fichier 'ligne à ligne'.
    Ok.
    En lisant ligne à ligne, le pseudo-code que j'ai proposé me semble convenir, meêm après les différentes discussions qui ont suivi.

    Mais sinon, tu peux parfaitement lire tout le fichier (ou tous les enregistrements qui concernent une même action), puis faire le traitement. Les ordinateurs d'aujourd'hui sont capables de charger en mémoire des tableaux 1000 fois plus gros que ceux que tu as.

  12. #12
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Problème de raisonnement dans le cadre de boucles imbriquées
    Un détail m'intrigue dans l'énoncé, que tu as bien formulé deux fois:

    Citation Envoyé par Debutant_pc Voir le message
    ... Je cherche donc à détecter une baisse d'au moins 2 unités (ici x=11) par rapport à un dernier plus haut (ici le point en x=9) suivi d'une remontée d'au moins 3 unités (ici x=14) ...
    Citation Envoyé par Debutant_pc Voir le message
    ... Je cherche à savoir si le plus haut du jour, c est à dire le dernier 'lu' remplit les critères suivants.
    -Il est plus haut de 3 points qu'un plus bas précédent.
    -que ce même plus bas précédent correspond à une baisse d au moins 2 points par rapport à un plus qui le précède.
    ... (C est ce que j ai voulu représenter par la figure tracé entre les point d’abscisse 9 et 14 de manière très simplifiée) ...
    L'exemple mis en valeur
    V09 = 98 ; V11 = 96 ; V15 = 100
    répond bien aux exigences puisqu'il vérifie: ∆V9-11 = -2 ; V11-15 = +4 .

    Mais que dire du cas suivant:
    V09 = 98 ; V11 = 91 ; V15 = 95 ?
    Il répond lui aussi aux conditions exprimées: ∆V9-11 = -7 < -2 ; V11-15 = +4 > 3 ,
    mais s'agissant d'un cours boursier, c'est une occurrence dépourvue d'intérêt puisqu'elle correspondrait à une revente à perte:
    V15 - V09 = -3 ...

    Ne faudrait-il pas plutôt rechercher les conditions:
    Vj - Vi <=-2 ; Vk - Vi >= +3 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de syntaxe dans des boucles imbriquées
    Par deglingo37 dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 14h46
  2. Réponses: 2
    Dernier message: 28/08/2006, 13h16
  3. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo