Thema: Delphi Moving Average

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Moving Average

  Alt 31. Aug 2008, 13:33
Hallo,

dein Ansatz hat etwas von "Tipp-Ex", ich würde den Fehler lieber an der Stelle beseitigen, wo er entsteht.

Ich führe die 0 als einen speziellen Wert ein, und passe die Routinen so an, dass Berechnung und Ausgabe für die ersten n-1 Werte unterbleibt:

Delphi-Quellcode:
procedure DataToStrings(data: TDoubleDynArray; strings: TStrings; const fmt: string = '%f');
var
  i: Integer;
begin
  strings.Clear;
  for i := Low(data) to High(data) do
    if IsZero(Data[i])
      then strings.Add('') // Null-Werte ausblenden
      else strings.Add(Format(fmt, [Data[i]]));
end;

function SimpleMovingAverage(data: TDoubleDynArray; n: Word): TDoubleDynArray;
var
  i: Integer;
  dSum: Double;
begin
  SetLength(Result, Length(data));
  dSum := 0;
  for i := Low(data) to High(data) do
  begin
    if i >= n then
      dSum := dSum - data[i - n];
    dSum := dSum + data[i];
    if Succ(i) < n
      then Result[i] := 0 // keine Berechnung für die ersten n-1 Werte
      else Result[i] := dSum / n;
  end;
end;
Wenn die Rechenprozedur für einen Laien nicht durchschaubar ist, dann habe ich den Algorithmus wohl schlecht implementiert.

Nachdenkliche Sonntagsgrüße
  Mit Zitat antworten Zitat