Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Prog] AnalyseNasdaq
Auteur Message
Répondre en citant
Message [Prog] AnalyseNasdaq 
Bonjour à tous,

Pour mon travail de maturité j'ai du faire un dossier (un peu comme une thèse) sur une problèmatique à choix.
J'ai choisi le sujet "Pourrait-il y avoir une nouvelle bulle technologique ?". C'est à dire comme dans les années 2000 où il y a une une surévaluation des entreprises technologiques à la bourse. Je vais sûrement poster le dossier (de 32 pages) sur mon site.
J'ai également du faire un produit qui répond à la problématique choisie. J'ai donc fait un programme en Autoit qui va calculer les possibilités qu'il y ait une bulle technologique et affiche un graphique de l'indice Nasdaq (qui regroupe plusieurs grandes entreprises informatiques) d'après les valeurs récupérées du site de yahoo.

Je n'avais jamais fait de graphiques avec Autoit. J'ai utilisé GDIPlus mais il semble qu'il y a un léger bug si on cache la fenêtre et qu'on la réaffiche (mais c'est lié à GDIPlus en Autoit je crois.)

Voilà donc le code commenté à chaque ligne (plus on ne peut pas ^^) :

Code:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Language=4108
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <File.au3> ;Pour la gestion des fichiers
#include <GUIConstantsEx.au3> ;Pour l'interface
#include <GDIPlus.au3> ;Pour les graphiques

;Lien type utilisé = http://fr.finance.yahoo.com/q/hp?s=^IXIC&b=5&a=01&c=1971&e=5&d=01&f=1971&g=d

Global $hGUI, $hGraphic, $hPen, $HtmlOpen ;Définition de quelques variables globales
Global $HeightGUI = 500, $WidthGUI = 500 ;Hauteur et largeur de la GUI et du graphique
Global $FileHtmlLocal ;Pour supprimer le fichier à la fin

;Hier
$DayMinus1 = @MON ;On réqupère le mois actuel
If @MDAY - 1 <= 0 Then $DayMinus1 = @MON - 1 ;Si le jour actuel moins 1 n'existe pas, on prend le premier du dernier mois
$Value0 = _FindIndiceValue(@MDAY - 1, $DayMinus1, @YEAR) ;On réqupère la valeur de hier.
;If $Value0 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'hier : " & $Value0) ;On affiche la valeur

;Il y a 2 mois
$Day = 11 ;On prend le jour 11 pour être sur qu'il soit présent dans le mois
$MonthMinus2 = @MON - 2;On réqupère le mois actuel -2
If $MonthMinus2 = 0 Then ;Si le mois -2 n'existe pas :
   $MonthMinus2 = $MonthMinus2 + 1 ;On prend il y a un mois
ElseIf $MonthMinus2 < 0 Then ;Si il existe encore moins :
   $Year = @YEAR - 1 ;On prend l'année précédente
   $MonthMinus2 = 11 ;Mois d'octobre
Else
   $Year = @YEAR ;On réqupère l'année actuelle
EndIf
$Value1 = _FindIndiceValue($Day, $MonthMinus2, $Year) ;On réqupère la valeur d'il y a deux mois
;If $Value1 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'il y a deux mois : " & $Value1) ;On affiche la valeur

;Il y a 6 mois
$Day = 11 ;On prend le jour 11 pour être sur qu'il soit présent dans le mois
$MonthMinus6 = @MON - 6 ;On réqupère le mois actuel -6
If $MonthMinus6 = 0 Then ;Si le mois -2 n'existe pas :
   $MonthMinus6 = $MonthMinus6 + 1 ;On prend il y a 5 mois
ElseIf $MonthMinus6 < 0 Then ;Si il existe encore moins :
   $Year = @YEAR - 1 ;On prend l'année précédente
   $MonthMinus6 = 4 ;On prend avril
Else
   $Year = @YEAR ;On réqupère l'année actuelle
EndIf
$Value2 = _FindIndiceValue($Day, $MonthMinus6, $Year) ;On réqupère la valeur d'il y a 6 mois
;If $Value2 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'il y a six mois : " & $Value2) ;On affiche la valeur

;Il y a 1 an
$Day = 11 ;On prend le jour 11 pour être sur qu'il soit présent dans le mois
$Value3 = _FindIndiceValue($Day, @MON, $Year - 1) ;On réqupère la valeur d'il y a un an
;If $Value3 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'il y a un an : " & $Value3) ;On affiche la valeur

;Il y a 2 ans
$Day = 11 ;On prend le jour 11 pour être sur qu'il soit présent dans le mois
$Value4 = _FindIndiceValue($Day, @MON, $Year - 2) ;On réqupère la valeur d'il y a deux ans
;If $Value4 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'il y a deux ans : " & $Value4) ;On affiche la valeur

;Il y a 4 ans
$Day = 11 ;On prend le jour 11 pour être sur qu'il soit présent dans le mois
$Value5 = _FindIndiceValue($Day, @MON, $Year - 4) ;On réqupère la valeur d'il y a quatre ans
;If $Value5 <> -1 Then MsgBox(64, "Information", "Valeur de l'indice nasdaq d'il y a quatre ans : " & $Value5) ;On affiche la valeur

_GUICreate() ;Création et affichage de l'interface
_GDIPlus_Startup() ;On déamrre GDIPlus pour les graphiques
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) ;On créé la zone de graphique dans toute la GUI
$hPen = _GDIPlus_PenCreate("0xFF000000", 1.5) ;Définition du type de trait
$hPenRed = _GDIPlus_PenCreate("0x88FF0000", 2) ;Définition du type de trait rouge
;Un mois = 8px
GUICtrlCreateLabel("Ce graphique montre l'évolution de l'indice nasdaq."&@CRLF&"Il va vous aider à détécter une future bulle technologique.", 20, 60, 300, 80) ;On affiche un label d'information sur le point
GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
GUICtrlCreateLabel("Il y a 4 ans : " & $Value5, 18, 315) ;On affiche un label d'information sur le point
_WriteCurve(18, $HeightGUI - ($Value5 - 2300), 210, $HeightGUI - ($Value4 - 2300)) ;Distance = 192
_WriteCurveRed(18-3, $HeightGUI - ($Value5 - 2300), 18+3, $HeightGUI - ($Value5 - 2300)) ;On affiche un repère
_WriteCurveRed(210, 485 - 3, 210, 495 + 3) ;On affiche un repère
GUICtrlCreateLabel("Il y a 2 ans : " & $Value4, 155, 465) ;On affiche un label d'information sur le point
_WriteCurve(210, $HeightGUI - ($Value4 - 2300), 306, $HeightGUI - ($Value3 - 2300)) ;Distance = 96
_WriteCurveRed(306-3, $HeightGUI - ($Value3 - 2300), 306+3, $HeightGUI - ($Value3 - 2300)) ;On affiche un repère
GUICtrlCreateLabel("Il y a 6 mois : " & $Value2, 245, 10) ;On affiche un label d'information sur le point
_WriteCurve(306, $HeightGUI - ($Value3 - 2300), 354, $HeightGUI - ($Value2 - 2300)) ;Distance = 48
_WriteCurveRed(354-3, $HeightGUI - ($Value2 - 2300), 354+3, $HeightGUI - ($Value2 - 2300)) ;On affiche un repère
GUICtrlCreateLabel("Il y a 2 mois : " & $Value1, 350, 150) ;On affiche un label d'information sur le point
_WriteCurve(354, $HeightGUI - ($Value2 - 2300), 370, $HeightGUI - ($Value1 - 2300)) ;Distance = 16
_WriteCurveRed(370-3, $HeightGUI - ($Value1 - 2300), 370+3, $HeightGUI - ($Value1 - 2300)) ;On affiche un repère
GUICtrlCreateLabel("Il y a 1 an : " & $Value3, 320, 465) ;On affiche un label d'information sur le point
_WriteCurve(370, $HeightGUI - ($Value1 - 2300), 382, $HeightGUI - ($Value0 - 2300)) ;Distance = 12
_WriteCurveRed(382-3, $HeightGUI - ($Value0 - 2300), 382+3, $HeightGUI - ($Value0 - 2300)) ;On affiche un repère
GUICtrlCreateLabel("Hier : " & $Value0, 390, 120) ;On affiche un label d'information sur le point

$BulleProbable = 0 ;On définit la probabilité de départ de la bulle à 0
If ($Value5 + $Value4 + $Value3 + $Value2 + $Value1) / 5 >= $Value0 + 100 And ($Value5 + $Value4 + $Value3 + $Value2 + $Value1) / 5 <= $Value0 - 100 Then ;Si la moyenne est différente de de +ou- 100 de l'indice de hier :
   $Commentaire = "L'économie a l'air stable. " ;On commence le commentaire final
Else
   $Commentaire = "L'économie a l'air peu stable. " ;On commence le commentaire final
   $BulleProbable = $BulleProbable + 5 ;On augemente le pourcentage de chance qu'il y ait une bulle
EndIf
$NbPlus = 0 ;On définit le nombre d'augementations à 0 au départ
If $Value4 > $Value5 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $Value3 > $Value4 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $Value2 > $Value3 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $Value1 > $Value2 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $Value0 > $Value1 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $Value0 > $Value5 Then $NbPlus = $NbPlus + 1 ;On incrémente le nombre de "montées" totales de la courbe
If $NbPlus >= 5 Then ;S'il y a plus de 4 "montées" :
   $Commentaire = $Commentaire & "L'indice a tendance à monter. "
   $BulleProbable = $BulleProbable + 7 ;On augemente le pourcentage de chance qu'il y ait une bulle
ElseIf $NbPlus >= 3 Then ;S'il y a plus de 2 "montées" :
   $Commentaire = $Commentaire & "L'indice a plutôt tendance à monter. "
   $BulleProbable = $BulleProbable + 5 ;On augemente le pourcentage de chance qu'il y ait une bulle
ElseIf $NbPlus = 0 Or $NbPlus = 1 Then ;S'il y a 1 ou "montée" :
   $Commentaire = $Commentaire & "L'indice a tendance à monter. "
   $BulleProbable = $BulleProbable + 5 ;On augemente le pourcentage de chance qu'il y ait une bulle
Else ;S'il y a 2 "montées" :
   $Commentaire = $Commentaire & "L'indice a plutôt tendance à descendre. "
EndIf

$MoyennePoints = $Value5 * 0.80 + $Value4 * 0.90 + $Value3 * 0.95 + $Value2 * 1.05 + $Value1 * 1.10 + $Value0 * 1.20 / 6 ;Om calcule la moyenne avec des pondérations
If $MoyennePoints >= $Value0 Then ;Si la moyenne monte :
   If $Value0 >= $Value1 Then ;Si la courbe fini par monter :
      $Commentaire = $Commentaire & "L'estimation pour les prochains mois est que l'indice devrait encore monter. "
      $BulleProbable = $BulleProbable + 5 ;On augemente le pourcentage de chance qu'il y ait une bulle
   Else ;Si la courbe fini par descendre :
      $Commentaire = $Commentaire & "L'estimation pour les prochains mois est que l'indice devrait monter. "
      $BulleProbable = $BulleProbable + 2 ;On augemente le pourcentage de chance qu'il y ait une bulle
   EndIf
Else ;Si la moyenne descend :
   If $Value0 < $Value1 Then ;Si la courbe fini par descendre :
      $Commentaire = $Commentaire & "L'estimation pour les prochains mois est que l'indice devrait encore descendre. "
   Else ;Si la courbe fini par monter :
      $Commentaire = $Commentaire & "L'estimation pour les prochains mois est que l'indice devrait descendre. "
   EndIf
EndIf

;On définit le commentaire suivant le pourcentage de chances qu'il ait une bulle :
If $BulleProbable >= 17 Then
   $Commentaire = $Commentaire & "Attention : très forte probabilité de création d'une bulle à court ou moyen terme d'après cet indice boursier."
ElseIf $BulleProbable >= 15 Then
   $Commentaire = $Commentaire & "Attention : forte probabilité de création d'une bulle à moyon terme d'après cet indice boursier."
ElseIf $BulleProbable >= 10 Then
   $Commentaire = $Commentaire & "Attention : probabilité de création d'une bulle à long terme d'après cet indice boursier."
ElseIf $BulleProbable >= 5 Then
   $Commentaire = $Commentaire & "Faible probabilité de création d'une bulle d'après cet indice boursier."
Else
   $Commentaire = $Commentaire & "Très faible probabilité de création d'une bulle d'après cet indice boursier."
EndIf

MsgBox(64, "Commentaire sur l'analyse de l'indice nasdaq :", $Commentaire) ;On affiche le commentaire calculé sur l'indice

FileDelete($FileHtmlLocal) ;On supprimme le fichier

Do ;Boucle infinie :
   ;On ne fait rien
Until GUIGetMsg() = $GUI_EVENT_CLOSE ;On ferme le programme quand l'utilisateur clique sur la croix

; Quand le programme se ferme, on libère les ressources :
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPenRed)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Func _FindIndiceValue($Day, $Month, $Year)
   $FileHtmlLocal = @TempDir & "\InfosYahoo.html" ;On définit le chemin du fichier html temporaire local
   ;FileDelete($FileHtmlLocal) ;On supprimme l'ancien fichier
   Local $DownloadHtml = InetGet("http://fr.finance.yahoo.com/q/hp?s=^IXIC&b=" & $Day & "&a=" & $Month - 1 & "&c=" & $Year & "&e=" & $Day & "&d=" & $Month - 1 & "&f=" & $Year & "&g=d", $FileHtmlLocal, 1, 1) ;On télécharge le fichier sur internet
   Do ;On attend que le fichier soit téléchargé :
      Sleep(200) ;On fait un courte pause pour la vérification du téléchargement
   Until InetGetInfo($DownloadHtml, 2) ;On regarde si le téléchargement est terminé
   Local $DownloadInformations = InetGetInfo($DownloadHtml) ;On garde toutes les informations du téléchargement
   InetClose($DownloadHtml) ;Ferme le handle du téléchargement
   If Not $DownloadInformations[3] Then ;Si le fichier a été téléchargé
      MsgBox(16, "TechBubble", "Les informations n'ont pas pu être téléchargées. Vérifiez votre connexion Internet.") ;On affiche un message d'erreur
      Return -1 ;On retourne que le fichier n'a pas pu être téléchargé
   Else ;Si le fichier n'a pas été téléchargé
      $HtmlOpen = FileOpen($FileHtmlLocal) ;On ouvre le fichier téléchargé
      $HtmlContent = FileRead($HtmlOpen);On lit le contenu du fichier téléchargé
      For $i = 1 To _FileCountLines($FileHtmlLocal) ;On va parcourir toutes les lignes du fichier
         $LineReaded = FileReadLine($HtmlOpen, $i) ;On lit la ligne en cours
         If (StringInStr($LineReaded, "yfnc_tabledata1")) Then ;Si on rencontre le formattage css du tableau cherché dans la ligne
            $LineReaded = StringReplace($LineReaded, "   ", "") ;On supprime les tabulations
            $LineReaded = StringRight($LineReaded, StringLen($LineReaded) - (148 + 1)) ;87+62
            $NumberOfChars = 0 ;On réinitialise le nombre de caractères que l'on doit prendre
            For $j = 1 To StringLen($LineReaded) ;On parcours tous les caractères de la chaine
               $CharAnalysed = StringMid($LineReaded, $j, 1) ;On réqupère chaque caractère
               If ($CharAnalysed = "<") Then ;Si l'on arrive à une ouverture de balise :
                  ExitLoop ;Le nombre est terminé donc on sort de la boucle
               Else ;Si l'on est pas encore arrivé à la fermeture de balise :
                  $NumberOfChars = $NumberOfChars + 1 ;On incrémente le nombre de caractères que l'on doit prendre
               EndIf ;Fin de l'analyse du caractère
            Next ;Fin du parcours des caractères
            $Value = StringLeft($LineReaded, $NumberOfChars) ;On réqupère la valeure cherchée dans la chaîne
            $Value = StringReplace($Value, " ", "") ;On enlève les espaces
            $Value = StringReplace($Value, ",", ".") ;On remplace les virgules par des points
            For $j = 1 To StringLen($LineReaded) ;On va regarder si le premier caractère est un < ou un >. Si c'est le cas, on l'enlève de la chaîne.
               If StringLeft($Value, 1) = "<" Or StringLeft($Value, 1) = ">" Then $Value = StringRight($Value, StringLen($Value) - 1) ;Pour ne garder que des chiffres
            Next ;Le nombre a été nettoyé
            Return $Value ;on retourne la valeur désirée
            ExitLoop ;On sort de la boucle de recherche
         EndIf
      Next ;Fin de la recherche
   EndIf ;Téléchargement du fichier

   FileClose($HtmlOpen) ;On ferme le fichier ouvert
   ;FileDelete($FileHtmlLocal) ;On supprimme le fichier

EndFunc   ;==>_FindIndiceValue

Func _GUICreate() ;Affiche l'interface :
   $hGUI = GUICreate("Analyse de de l'indice nasdaq", $WidthGUI, $HeightGUI) ;On crée l'interface
   GUISetState() ;On affiche l'interface

EndFunc   ;==>_GUICreate

Func _WriteCurve($x1, $y1, $x2, $y2) ;Dessine un trait :
   _GDIPlus_GraphicsDrawLine($hGraphic, $x1, $y1, $x2, $y2, $hPen)

EndFunc   ;==>_WriteCurve

Func _WriteCurveRed($x1, $y1, $x2, $y2) ;Dessine un trait rouge:
   _GDIPlus_GraphicsDrawLine($hGraphic, $x1, $y1, $x2, $y2, $hPenRed)

EndFunc   ;==>_WriteCurveRed


Capture d'écran :





______________________________________________________
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Prog] AnalyseNasdaq 
Waou quel travail merci pour le partage Okay




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Prog] AnalyseNasdaq 
Ca a pas l'air de marcher pour moi :






______________________________________________________
http://www.YagoServer.net/
Visiter le site web du posteur Yahoo Messenger Skype
Répondre en citant
Message [Prog] AnalyseNasdaq 
C'est bizarre parce que chez moi et plusieurs autres ordinateurs ça fonctionne et le résultat devrait être invariable vu qu'il prend les valeur depuis la source du site. Peut-être que c'est la fonction qui récupère la valeur qui est un peu bancale, je n'ai pas réussi à utiliser les regex.

Essaie de rajouter cette ligne :
Code:
$Value = _StringBetween($Value, 30, StringLen($Value))

Avant cette ligne dans la fonction _FindIndiceValue() :
Code:
Return $Value ;on retourne la valeur désirée


Merci




______________________________________________________
Répondre en citant
Message [Prog] AnalyseNasdaq 
Bonsoir
Sablier94 Okay



Visiter le site web du posteur
Message [Prog] AnalyseNasdaq 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch