Sebastian Jurk: Gleitenden Durchschnitt berechnen

Hallo,

ich versuche mich gerade daran gleitende Durchschnitte zu berechnen. Dazu habe ich mir erstmal angeschaut wie das grundsätzlich geht und habe diese Seite dazu gefunden: Tutorial

Leider steht dort aber nicht für welchen Tag dann dieser Durchschnitt gilt. Also wenn ich die 2 letzten Werte nehme für einen einfachen gleitenden Durchschnitt zB:
17.10 - 14.45
18.10 - 14.52

Jetzt rechne ich (14.45 + 14.52) / 2. Damit habe ich einen Durchschnittswert. Aber für welchen Tag gilt dieser Wert jetzt als Durchschnitt in einer Aktienkursgrafik? Für den 18.10 oder den 19.10?

Aber selbst wenn... ich habe mir hier mal eine Kursgrafik genommen um das rauszufinden. Ich habe eingestellt dass nur alle 2h ein Wert genommen wird und für den Durchschnitt sollen 2 Werte genommen werden. Dann sieht das so aus: Chart

Die braune Linie ist der Durchschnitt. Allerdings macht der für mich keinen richtigen Sinn. Der Durchschnittspunkt müsste doch eigentlich in der Mitte der letzten beiden Werte, oder, wenn der aktuelle Tag mit rein zählt, dem letzten und aktuellen Wert liegen oder sehe ich das falsch? Der Durchschnitt ist aber irgendwie immer weit weg von einer dieser Mitten.

Wie kommt das?

Und wie geht man vor wenn man zB alle 2h einen Wert für den gleitenden Durchschnitt haben will aber in diesen 2h mehrere Werte entstanden sind. Soll ich einfach den Durchschnitt der Werte innerhalb der Stunde errechnen oder den letzten Wert der Stunde. Der Durchschnitt wäre passender oder? Weil der letzte Wert könnte ja ein Ausreißer sein der nicht viel über die restlichen Werte sagt. Andererseits wird in der Aktienwelt oft der Schlusskurs des Tages genommen.

Danke!
Sebastian

  1. Hi,

    Leider steht dort aber nicht für welchen Tag dann dieser Durchschnitt gilt. Also wenn ich die 2 letzten Werte nehme für einen einfachen gleitenden Durchschnitt zB:
    17.10 - 14.45
    18.10 - 14.52

    Jetzt rechne ich (14.45 + 14.52) / 2. Damit habe ich einen Durchschnittswert. Aber für welchen Tag gilt dieser Wert jetzt als Durchschnitt in einer Aktienkursgrafik? Für den 18.10 oder den 19.10?

    So wie es dort im Abschnitt Simple Moving Average Calculation erklärt ist, wird der Wert des aktuellen Tages immer als letzter in die Reihe der X letzten Aktienwerte/Preise gezählt – das hieße in deinem Beispiel, X wäre zwei, die zur Berechnung des SMA für den 18.10. heranzuziehenden Preise wären also der vom 17.10. und 18.10.

    Und wie geht man vor wenn man zB alle 2h einen Wert für den gleitenden Durchschnitt haben will aber in diesen 2h mehrere Werte entstanden sind.

    Dann musst du die Einheiten, auf denen du die Werte bildest, ändern.

    Wenn z.B. alle 15 Minuten ein aktueller „Messwert“ (Aktienpreis) gegeben ist, dann bildest du den SMA eben über die letzten X dieser Werte.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo,

      danke fürs antworten.

      So wie es dort im Abschnitt Simple Moving Average Calculation erklärt ist, wird der Wert des aktuellen Tages immer als letzter in die Reihe der X letzten Aktienwerte/Preise gezählt – das hieße in deinem Beispiel, X wäre zwei, die zur Berechnung des SMA für den 18.10. heranzuziehenden Preise wären also der vom 17.10. und 18.10.

      Gut. Dann kann der aktuelle Durchschnittswert also erst errechnet werden wenn der aktuelle Wert vorhanden ist. Bei Tagesendkursen also erst wenn man den Tagesendkurs weiß. Erst dann kann man auch den Durchschnittswert des Tages berechnen.

      Wieso macht dann aber die Darstellung des Charts, das ich verlinkt habe keinen richtigen Sinn? Ich meine, wenn die braune Linie stimmen würde dann müsste für den aktuellen Durchschnittswert ja der Kurs der aktuellen und der Kurs 2h vorher zusammen genommen werden. Was eigentlich genau die Mitte zwischen beiden Kursen bedeuten müsste. Tut es aber nicht. Ich kann mir das nicht erklären. Wie kommt das?

      Und wie geht man vor wenn man zB alle 2h einen Wert für den gleitenden Durchschnitt haben will aber in diesen 2h mehrere Werte entstanden sind.

      Dann musst du die Einheiten, auf denen du die Werte bildest, ändern.

      Wenn z.B. alle 15 Minuten ein aktueller „Messwert“ (Aktienpreis) gegeben ist, dann bildest du den SMA eben über die letzten X dieser Werte.

      Allerdings sind es keine festen Werte die ich habe. Die Liste setzt sich zusammen aus Käufen bzw Verkäufen. Da kann es passieren dass in 5min 20 Handel passierten oder auch in 2h gar kein Handel. Das heißt ich muss mir einen Bereich festlegen. ZB einen Wert stündlich errechnen. Die Frage ist jetzt was mehr Sinn macht. Den Preis des letzten Handels einer Stunde oder alle Handelspreise nehmen und daraus den Durchschnitt nehmen. Oder vielleicht sogar noch das Volumen der verschiedenen Handel mit gewichten.
      Normalerweise gelten ja oft die Tagesschlusskurse. Wobei ich nicht wirklich weiß was die besonderes aussagen. Mehr Sinn würde doch machen der Durchschnitt der Kurse der letzten Stunde. Weil wenn der letzte Handel ein großer Verkauf war dann sagt das nichts über den echten Kurs aus. Denn der wird am nächsten Tag sicher wieder ausgeglichen. Von daher wäre es schon sinnvoll Durchschnitte zu nehmen denke ich.
      Oder vielleicht berechne ich auch einfach alle Werte. Also Stundenschlusskurs, Durchschnitt, eventuell noch mit Volumenstärke und berechne daraus dann jeweils einen Durchschnitt. Dann kann ich in der Praxis sehen was mehr Sinn macht.

      Wie nutzt man in php eigentlich zirkuläre Arrays? Einfach ein Array mit x Elementen nehmen und dazu eine Zählvariable die auf ein Arrayelement verweist oder gibt es dafür ein Konstrukt mit Pointer bei dem das letzte Arrayelement auf das erste Arrayelement verweist?

      Grüße!
      Sebastian

      1. Ok, ich hab scheinbar den Fehler bei dem Chart gefunden. Es war als Charttyp eingestellt median Price. Der SMA wurde aber wohl trotzdem über den Endkurs des jeweiligen Zeitraums berechnet. Nachdem ich es auf close price gestellt hatte passten die durchschnitte.
        Jetzt weiß ich wenigstens wie die gerechnet haben und kann mir eigene Werte ausrechnen.

        Wie sieht es mit dem zirkulären Array aus? Ich würde es ja einfach mit einem Array und einer Variable die auf das jeweilige Arrayelement zeigt lösen. Aber ich lese immer dass ein zirkuläres Array am besten wäre. Ich hab dazu nicht viel gefunden aber vermutlich funktioniert das so wie hier: http://derickrethans.nl/circular-references.html

        Wobei ich mir nicht sicher bin wieso ein Konstrukt von der Art jetzt besser sein sollte.

        Grüße!
        Sebastian

        1. Hi,

          Wie sieht es mit dem zirkulären Array aus?

          Das gibt es in PHP nicht nativ.

          Ich würde es ja einfach mit einem Array und einer Variable die auf das jeweilige Arrayelement zeigt lösen. Aber ich lese immer dass ein zirkuläres Array am besten wäre. Ich hab dazu nicht viel gefunden aber vermutlich funktioniert das so wie hier: http://derickrethans.nl/circular-references.html

          Man kann versuchen, so etwas analog zu dem was in anderen Sprachen vorhanden ist zu implementieren – aber wenn es nur darum geht, ein Array wiederholt zu durchlaufen und nach dem letzten wieder mit dem ersten Element weiter zu machen, dann kann man auch einfach die zum indexbasierten Zugriff verwendete Zählvariable am Ende wieder zurücksetzen.
          Statt das mit aufwendigeren if-Konstrukten zu machen, kann man auch einfach bei jeder Erhöhung eine Modulo-Operation mit der Anzahl der Array-Elemente durchführen.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Ok, danke!
            Sebastian