Script braucht 515 Sekunden :(

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #91
    @Hand,


    das war auch mein erster Ansatz. Die DB-Abfrage nur einmal durchzuführen und dann sozusagen zu versuchen mit dem Array $ergenis4[$i]['XY] eine Betweenabfrage zu machen.
    Ich werde das Script gleichmal uppen.

    thx
    Grüße
    cu LaHood

    PS: Wie gesagt wenn du DB-Daten brauchst sag Bescheid, und wenn wie ich dir die zukommen lassen kann.

    Kommentar


    • #92
      @ Hand,

      warum kommt immer diese Fehlermeldung bei deinem Script? Hatte ich gestern auch schon.

      Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in D:\daten\intranet\boerse\gd_test_1b.php on line 33

      Kommentar


      • #93
        @Hand,

        das Script ist sauschnell (16 Sekunden) nur stimmen die Maxwerte nicht.

        ($handy[$q]['Close'])

        Ich bekomme hier zu jedem Tag unterschiedliche Werte die hauptsächlich niedriger sind als der ($ergebnis[$i]['Close']) Kurs.

        Grüße
        cu LaHood

        Kommentar


        • #94
          @Hand,

          ich habe mal zusätzlich zum Zähler und den Closewerten das Datum mit ausgeben lassen.
          Die Maxwerte bei A_Close müssen solange gleich bleiben bis H_Close grösser ist. <- Das stimmt so natürlich nicht ganz.
          Wenn H_Close grösser ist dann wird beim nächsten Datensatz der Wert von A_Close geändert.

          Da aber das Zeitfenster $n=200 ist bekomme ich natürlich auch an jedem weiteren Tag unter Umständen einen neuen Maxwert von A_Close, da der alte Maxwert von A_Close nicht mehr im Zeitfenster von Heute - $n liegt.

          Was seltsam ist, ist die Tatsache dass wir am gleichen Tag (H_Close) unterschiedliche Werte haben. Ich schaue mir nachher nochmal die Wert in der DB an, ob ich da was falsch gemacht habe.


          Meine Werte:

          Zähler:135H_Close:19.86 H_Datum:1996-06-26 A_Close:22.72A_Datum:1996-02-07
          Zähler:136H_Close:19.61 H_Datum:1996-06-27 A_Close:22.72A_Datum:1996-02-07
          Zähler:137H_Close:19.37 H_Datum:1996-06-28 A_Close:22.72A_Datum:1996-02-07
          Zähler:138H_Close:19.22 H_Datum:1996-07-01 A_Close:22.72A_Datum:1996-02-07
          Zähler:139H_Close:19.02 H_Datum:1996-07-02 A_Close:22.72A_Datum:1996-02-07
          Zähler:140H_Close:19.3 H_Datum:1996-07-03 A_Close:22.72A_Datum:1996-02-07
          Zähler:141H_Close:19.38 H_Datum:1996-07-04 A_Close:22.72A_Datum:1996-02-07
          Zähler:142H_Close:19.58 H_Datum:1996-07-05 A_Close:22.5A_Datum:1996-02-08
          Zähler:143H_Close:19.48 H_Datum:1996-07-08 A_Close:22.5A_Datum:1996-02-12
          Zähler:144H_Close:19.72 H_Datum:1996-07-09 A_Close:22.5A_Datum:1996-02-12
          Zähler:145H_Close:19.53 H_Datum:1996-07-10 A_Close:22.41A_Datum:1996-02-13


          Deine Werte:

          Zähler:135H_Close:22.42 H_Datum:1996-06-26 A_Close:17.77A_Datum:1996-01-30
          Zähler:136H_Close:22.21 H_Datum:1996-06-27 A_Close:18.16A_Datum:1996-01-31
          Zähler:137H_Close:22.24 H_Datum:1996-06-28 A_Close:18.22A_Datum:1996-02-01
          Zähler:138H_Close:22.37 H_Datum:1996-07-01 A_Close:18.24A_Datum:1996-02-02
          Zähler:139H_Close:22.78 H_Datum:1996-07-02 A_Close:17.83A_Datum:1996-02-05
          Zähler:140H_Close:22.56 H_Datum:1996-07-03 A_Close:17.97A_Datum:1996-02-06
          Zähler:141H_Close:22.95 H_Datum:1996-07-04 A_Close:18.45A_Datum:1996-02-07
          Zähler:142H_Close:23.24 H_Datum:1996-07-05 A_Close:18.25A_Datum:1996-02-08
          Zähler:143H_Close:22.65 H_Datum:1996-07-08 A_Close:18.05A_Datum:1996-02-09
          Zähler:144H_Close:22.63 H_Datum:1996-07-09 A_Close:18.01A_Datum:1996-02-12
          Zähler:145H_Close:22.58 H_Datum:1996-07-10 A_Close:18.03A_Datum:1996-02-13
          Zuletzt geändert von LaHood; 09.01.2003, 15:57.

          Kommentar


          • #95
            Vergiss das mit den falschen Werten.
            Bei meinen Werten hab ich die Daten von einer anderen Aktie abgefragt

            Das Problem mit den Maxkursen bleibt aber bestehen, und ich habe Gaps bei manchen Werten von dir:



            Meine:

            Zähler:115H_Close:20.63 H_Datum:1996-05-28 A_Close:22.72A_Datum:1996-02-07
            Zähler:116H_Close:20.4 H_Datum:1996-05-29 A_Close:22.72A_Datum:1996-02-07
            Zähler:117H_Close:20.2 H_Datum:1996-05-30 A_Close:22.72A_Datum:1996-02-07
            Zähler:118H_Close:20.14 H_Datum:1996-05-31 A_Close:22.72A_Datum:1996-02-07
            Zähler:119H_Close:20.29 H_Datum:1996-06-03 A_Close:22.72A_Datum:1996-02-07
            Zähler:120H_Close:20.35 H_Datum:1996-06-04 A_Close:22.72A_Datum:1996-02-07
            Zähler:121H_Close:20.39 H_Datum:1996-06-05 A_Close:22.72A_Datum:1996-02-07
            Zähler:122H_Close:20.45 H_Datum:1996-06-07 A_Close:22.72A_Datum:1996-02-07
            Zähler:123H_Close:20.44 H_Datum:1996-06-10 A_Close:22.72A_Datum:1996-02-07
            Zähler:124H_Close:20.43 H_Datum:1996-06-11 A_Close:22.72A_Datum:1996-02-07
            Zähler:125H_Close:20.63 H_Datum:1996-06-12 A_Close:22.72A_Datum:1996-02-07
            Zähler:126H_Close:20.08 H_Datum:1996-06-13 A_Close:22.72A_Datum:1996-02-07
            Zähler:127H_Close:19.81 H_Datum:1996-06-14 A_Close:22.72A_Datum:1996-02-07
            Zähler:128H_Close:19.71 H_Datum:1996-06-17 A_Close:22.72A_Datum:1996-02-07
            Zähler:129H_Close:19.89 H_Datum:1996-06-18 A_Close:22.72A_Datum:1996-02-07
            Zähler:130H_Close:19.53 H_Datum:1996-06-19 A_Close:22.72A_Datum:1996-02-07






            Deine:

            Zähler:115H_Close:20.63 H_Datum:1996-05-28 A_Close:20.45A_Datum:1996-01-02
            Zähler:116H_Close:20.4 H_Datum:1996-05-29 A_Close:20.38A_Datum:1996-03-14
            Zähler:117H_Close:20.2 H_Datum:1996-05-30 A_Close:A_Datum:
            Zähler:118H_Close:20.14 H_Datum:1996-05-31 A_Close:A_Datum:
            Zähler:119H_Close:20.29 H_Datum:1996-06-03 A_Close:20.22A_Datum:1996-05-07
            Zähler:120H_Close:20.35 H_Datum:1996-06-04 A_Close:20.3A_Datum:1996-05-03
            Zähler:121H_Close:20.39 H_Datum:1996-06-05 A_Close:20.38A_Datum:1996-03-14
            Zähler:122H_Close:20.45 H_Datum:1996-06-07 A_Close:20.38A_Datum:1996-03-14
            Zähler:123H_Close:20.44 H_Datum:1996-06-10 A_Close:20.38A_Datum:1996-03-14
            Zähler:124H_Close:20.43 H_Datum:1996-06-11 A_Close:20.38A_Datum:1996-03-14
            Zähler:125H_Close:20.63 H_Datum:1996-06-12 A_Close:20.5A_Datum:1996-03-13
            Zähler:126H_Close:20.08 H_Datum:1996-06-13 A_Close:A_Datum:
            Zähler:127H_Close:19.81 H_Datum:1996-06-14 A_Close:A_Datum:
            Zähler:128H_Close:19.71 H_Datum:1996-06-17 A_Close:A_Datum:
            Zähler:129H_Close:19.89 H_Datum:1996-06-18 A_Close:19.81A_Datum:1996-06-14
            Zähler:130H_Close:19.53 H_Datum:1996-06-19 A_Close:A_Datum:

            Kommentar


            • #96
              grüsse

              klar meine ich Object Orientierten Code oder Klassen naja, mit wieder verwendbaren code meinte ich einfache Funktionen

              P.S.: ist mir gerade eingefallen also wenn mich nicht alles täuscht lässt sich static
              PHP-Code:
              static $var wert
              in funktionen nutzen, wobei nicht der wert der variable jedesmal neu gespeichert werden müsste wenn die funktion genutzt wird

              und möglicher weise nützt es etwas wenn man den variablen datentyp (integer, string, array,...) definiert (wie zB in C++) vielleicht bringst ja eine oder zwei nanosekunden es würde dann so aussehen:
              PHP-Code:
              static $var = (datentyp)'wert'

              Kommentar


              • #97
                Fürs Erste besser, als ich es erwartet habe.
                Hatte aber einen Denkfehler, ich glaubte das Skript kann das Durchschleifen des Arrays abbrechen, sobald ein Wert gefunden wird der größer ist, aber das ist natürlich Blödsinn, da ja der Maximalwert des gesamten zu untersuchenden Zeitraums ermittelt werden muß und dafür muß bis zum Ende durchgeschliffen werden.
                PHP-Code:
                <?
                    if ($i > $n) {
                        $vonDate = $ergebnis[($i-$n)]['Date'];
                        $bisDate = $ergebnis[($i-1)]['Date'];

                        reset($handy);
                        $hand_max = 0;
                        $hand_date = "";
                        for($q=0;$q<count($handy);++$q) { // Maximalwert des Zeitraumes ermitteln
                           if ($handy[$q]['Date'] >= $vonDate && $handy[$q]['Date'] <= $bisDate) { // Nur wenn Zeitraum
                              if ($hand_max < $handy[$q]['Close']) { // Maximalwert ? 
                                 $hand_max  = $handy[$q]['Close'];   // Maximalwert speichern
                                 $hand_date = $handy[$q]['Date'];    // Nur damit Datum dann angedruckt werden kann
                              } 
                           }
                        }
                        if ($ergebnis[$i]['Close'] > $hand_max) { // Nachdem nun der Max Wert ermittelt wurde
                           ImageFilledEllipse($imgStat, $x_1, $y_1, 4, 4, $colRed);
                        }

                        echo "<br>Zähler:$i H_Close:".$ergebnis[$i]['Close']." H_Datum:".$ergebnis[$i]['Date']." H_Close:$hand_max A_Datum:$hand_date";
                    }
                ?>
                Skript wird jetzt wieder etwas länger dauern. Ich hoffe es funzt jetzt besser.

                Kommentar


                • #98
                  Letzte Änderungen:

                  o Array $handy[] wird nicht mehr parallel zu Array $ergebnis[] benötigt.

                  o Es kann direkt über die Indizes $von = $i-$n; und $bis = $i-1; zugegriffen werden, die Abfrage >= $vonDate und <= $bisDate entfällt dadurch

                  o dadurch muß nicht mehr der ganze Array durchschliffen werden, sondern bei jedem Durchlauf gezielt die n Tage

                  o durch die direkte Ermittlung diverser Minima und Maxima über den Select
                  "$sql_minmax="SELECT min(Close) as NClose, max(Close) as XClose, max(Volume) as XVolume FROM us_dax_frankfurt WHERE Name = '$aktie'"
                  entfallen die zwei Selects nach Schlusskurs und Volumen.
                  Angehängte Dateien

                  Kommentar


                  • #99
                    @Hand,

                    H.A.M.M.E.R

                    3 Sekunden, wow das Script muss ich mir nochmal durchlesen gleich.



                    Noch eine Verständnisfrage:

                    PHP-Code:
                    $sql_minmax="SELECT min(Close) as NClose, max(Close) as XClose, max(Volume) as XVolume FROM us_dax_frankfurt WHERE Name = '$aktie'"
                    Man kann also in einer Selectabfrage mehrere Werte als Ergebnis festlegen? Also NClose/XClose/XVolume und die später in verschiedenen Arrays definieren? W O W

                    thx
                    Grüße
                    cu LaHood

                    Kommentar


                    • Hast Du jetzt 100 oder 200 Tage als Zeitfenster?
                      Ich hoffe es kommt das richtige Ergebnis raus. Wenn dem so ist könnte man, nachdem die Strukturbereinigung stattgefunden hat, beginnen das Skript zu tunen
                      Zuletzt geändert von hand; 10.01.2003, 09:17.

                      Kommentar


                      • lol tunen?

                        Habe beides ausprobiert. Einmal mit 100 Tagen, und einmal mit 200 Tagen, bei 200 Tagen braucht es 5 Sekunden.


                        Grüße
                        cu LaHood

                        Kommentar


                        • also das Ergebnis sieht meines Erachtens schon recht gut aus.

                          Auf dem Bild die roten Punkte sind die Ergebnisse des Filters. Ich habe sie etwas höher verschoben, damit ich sie besser von der blauen Kurslinie unterscheiden kann.
                          Angehängte Dateien

                          Kommentar


                          • Super!

                            Was ist mit den Variablen die im Skript zwar belegt, aber nicht weiter verwendet werden?
                            Der IF-Baum, weiß nicht wie ich den sonst nennen sollte, schreit direkt danach überarbeitet zu werden.

                            Wie lange braucht das Skript, ohne die Zeitfensterberechnung, und Wie lange braucht das Skript für die beiden SELECTs? Könntest Du das mal ausprobieren?

                            Von welchem Rechner stammen diese Werte? Prozessor, Hauptspeicher, IDE, SCSI Platten?

                            Wie sieht die Tabellendefinition mittlerweile aus? Ich hab Dir in diesem Thread ein "DESCRIBE TABLE" Script gepostet kannst das bitte mal durchführen und das Ergebnis hier posten?

                            Hast Du auch einen Index über das Feld "Name"?

                            Kommentar


                            • ach du meinst sicher den hier:

                              PHP-Code:
                              if ($monat == "01") {
                                          
                              $checkmonat ="02";
                                          if (
                              $x_1 30) {
                                              
                              ImageTTFText ($imgStat90, ($x_1-15),($hoehe-105), $colFont1"d:\WINDOWS\FONTS\arial.ttf","".$jahr."");
                                          }
                                      } elseif (
                              $monat == "02") {
                                          
                              $checkmonat ="03";
                                          if (
                              $x_1 30) {
                                          } 
                              Also wenn du den Part meinst den muss ich nochmal überarbeiten. Ursprünglich hatte ich historische Daten von 8 Monaten. Da konnten die Monate auch noch als Text ausgegeben werden. Nur wenn ich das bei 8 Jahren mache, machen die Monate keinen Sinn mehr. Es sind auch viel zuviele vertikale graue Linien. Das muss ich nochmal umändern für diese grosse Anzahl an Daten

                              Ich hab mir das mal bei www.yahoo.com angeschaut. Es ist ja meistens üblich 1 Monats/3 Monats/ Halbes Jahr/1 Jahr/ 3 Jahre / 5 Jahre und maximale Anzeige als Chart anzeigen zu lassen. Ich werde jeweils eine einzelne Datei für jeden dieser Zeiträume erstellen.

                              thx
                              Grüße
                              cu LaHood

                              Kommentar


                              • Ja, den meinte ich.
                                Sind die Daten, die Du da verarbeitest öffentlich? Wie kommt man zu einer Datenbank mit den Tageswerten?

                                Kommentar

                                Lädt...
                                X