![]() |
Problem bei Formel zur Aktienanalyse
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich habe mich mal etwas näher mit der technischen Analyse von Aktienkursen beschäftigt.
z. B. Momentum = Berechnung aus der Differenz des heutigen Kurses zum Kurs vor z.B. 30 Tagen Folgende Function berechnet das Momentum:
Delphi-Quellcode:
Die Darstellung des Momentums in einem TChart:
function TForm12.Momentum(Tage: integer): integer;
var value, value1: integer; begin Value := Table3.FieldByName('Kurs').AsInteger; Table3.MoveBy(-Tage); Value1 := Table3.FieldByName('Kurs').AsInteger; Table3.MoveBy(Tage); result := Value - Value1; end;
Delphi-Quellcode:
Dabei ist Anzahl die Zahl der Tage für die Berechnung des Momentums.
Table3.First;
Table3.MoveBy(Anzahl); for i := 0 to RecCount -1 do begin Value := Momentum(Anzahl); Series4.AddY(Value, Table3.FieldByName('Datum').AsString, clTeal); Table3.Next; end; Soweit funktioniert auch anscheinend alles. Mein Problem sind aber nun die Kurswerte am Ende der Tabelle. (Siehe Anlage). Die Berechnung funzt offenbar nicht mehr richtig, wenn die Anzahl der Kurse in der Table3 kleiner sind als die Variable Anzahl, d.h. die Zahl der in der function momentum angegebenen Tage. Bloß wie kann ich das ändern, dass auch für die letzten Werte eine korrekte Berechnung durchgeführt wird? |
Re: Problem bei Formel zur Aktienanalyse
Zitat:
Delphi-Quellcode:
besser so:
Table3.First;
Table3.MoveBy(Anzahl); // an Ende sonst so oft wie Anzahl gegen den letzten Satz for i := RecCount-1-Anzahl to RecCount -1 do begin Value := Momentum(Anzahl); Series4.AddY(Value, Table3.FieldByName('Datum').AsString, clTeal); Table3.Next; end;
Delphi-Quellcode:
wie immer ungetestet
Table3.First;
Table3.MoveBy(Anzahl); while not Table3.eof do begin Value := Momentum(Anzahl); Series4.AddY(Value, Table3.FieldByName('Datum').AsString, clTeal); Table3.Next; end; // while Gruß Malte |
Re: Problem bei Formel zur Aktienanalyse
Liste der Anhänge anzeigen (Anzahl: 2)
Hhhmm, ist schon ein bißchen was, aber noch nicht das was ich suche. :(
Bei diesem Code: Zitat:
siehe Anhang ersterversuch.jpg :| Der zweite Vorschlag ist schon besser Zitat:
Aber die ideale Lösung ist das noch nicht. Wie schaffe ich es, dass die Kurve mit vernünftigen Werten bis zum Ende fortgeführt wird? :gruebel: |
Re: Problem bei Formel zur Aktienanalyse
Also:
normalerweise müßte die Variable Anzahl doch, wenn nicht mehr genügend Datensätze in Table3 vorhanden sind, entsprechend auf die Zahl der noch auszulesenden Datensätze verringert werden, oder? :?: Bloß wie stell ich das in einer Formel dar? Immer einen Zähler (=Gesamtzahl der Datensätze von Table3) mitlaufen lassen (d.h. immer weiter verringern lassen) und mit Anzahl vergleichen? Und wenn der Zähler kleiner ist als Anzahl, dann Anzahl entsprechend verringern? :gruebel: |
Re: Problem bei Formel zur Aktienanalyse
Zitat:
Du mußt Kontrollstrukturen einfügen: Was passiert, wenn Du weniger Datensätze als "Anzahl" hast? Ist in der Tabelle jeder Satz genau einem Datum zugeordnet und dieses auch noch aufsteigend? Wie wird die Anzeige der x-Achse angepasst (Anzahl Sätze - "Anzahl")? Gleichzeitig würde ich mit Zeiträumen arbeiten denn irgendwann passen die Daten auch nicht mehr auf 2 Monitore :-) Gruß Malte |
Re: Problem bei Formel zur Aktienanalyse
Zitat:
das ist ja genau mein Problem. Nach so einer Kontrollstruktur suche ich ja! Was soll ich machen, wenn die Anzahl der verbleibenden Datensätze kleiner ist als Anzahl? Ich würde nun, um die Kurve einigermaßen sinnvoll zuende zu bekommen, die Variable Anzahl an die Zahl der Datensätze anpassen. Das würde zwar etwas das Ergebnis verfälschen, aber die Berechnung würde wenigstens bis zum Ende durchgeführt werden. |
Re: Problem bei Formel zur Aktienanalyse
Das while-not-eof-Konstrukt stellt sicher, daß es ein definiertes Ende gibt. Wenn aber
Anzahl>RecordCount ist mußt Du Anzahl:=RecordCount setzen um wenigstens einen Wert zu bekommen.
Delphi-Quellcode:
Die X-Achse muß RecordCount-Anzahl+1 Werte aufnehmen können.
if (Anzahl>RecordCount)
then Anzahl:= RecordCount; Table3.First; Table3.MoveBy(Anzahl); while not Table3.eof do begin Value := Momentum(Anzahl); Series4.AddY(Value, Table3.FieldByName('Datum').AsString, clTeal); Table3.Next; end; // while Und wenn jeder Datensatz in Table3 genau einen Tag darstellt sollte das klappen. Gruß Malte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz