Dienstag, 16. April 2024, 06:14 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

1

Mittwoch, 12. Dezember 2007, 22:25

GD mit Konstanter Periode klappt nicht

Hallo

Vielleicht kann mir jemand helfen, ich steh' gerade auf dem Schlauch. Habe in etwa diese Formel:

global const Longest: If( LenA > LenB, LenA, LenB);
global calc Vol_GD: GD( Volume, Longest , S);

LenA und LenB sind auch Konstante, welche weiter vorne im betreffenden Coding auf bestimmte Werte optimiert wurden. Wenn ich die Formel so speichern will, bekomme ich die Meldung:

"Fehler in der Definitionen-Formel aufgetreten:
Prozedur: Parameter-Überprüfung
Vorgang: K/A
Indikator: GD
Parameter: Unterbrechung
Meldung: Wert als Parameter erwartet. Der Indikator verarbeitet in diesem Parameter keine Datenreihen,
sondern nur feste Werte."

Ich verstehe schon, dass GD() als Periodenlänge keine Variable verarbeiten kann, aber eine Konstante (hier: Longest) sollte doch gehen, die ändert ihren Wert ja nicht. Ist das ein Bug, ein Feature oder habe ich einen Denkfehler :wacko:

Ich verwende INV 5.1.1
Gruss
Bernd

Snoopy

unregistriert

2

Mittwoch, 12. Dezember 2007, 22:50

Hallo Bernd,
das ist schon so korrekt. Mit einer Konstante wird richtig gerechnet, z.B. mit der Konstante LenA. Die Konstante Longest ist aber keine Konstante da hier eine Berechnung bzw. neue Datenreihe berechnet wird, auch wenn sich die Werte nicht ändern.

Gruß Snoopy

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

3

Donnerstag, 13. Dezember 2007, 00:38

Hallo Snoopy

Vielen Dank, das ist es: offensichtlich passt INV implizit und pauschal den Typ an von const auf calc, weil kein einzelner Wert folgt. Es bemerkt aber nicht, daß der Wert eine if() Anweisung selbst auch eine Konstante sein könnte!


Herr Knöpfel

Wäre es möglich mit geeigneten Mitteln in der Formelmaschine (ich denke an die übliche Compiler Optimierung (hier unter dem Stichwort Programmoptimierung sowie Konstantenfaltung, notfalls und ggf via Profiler) das Coding so umzusetzen, daß nicht unnötig aus einer Konstanten eine Variable wird? Ich bin, ehrlich gesagt, nicht auf den Gedanken gekommen, daß diese verbreitete Technik bei INV nicht zur Anwendung kommt.
Gruss
Bernd

Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 680

4

Donnerstag, 13. Dezember 2007, 09:28

Hallo,

das Problem ist, dass das Ergebnis der IF()-Funktion auf jeden Fall eine Zeitreihe ist. IF steht in der Berechnung einer Konstanten nicht zur Verfügung. Sie müssten dies daher mit logischen Operatoren umsetzen, in dieser Form:

global const Longest: (LenA>LenB=1)*LenA + (LenA>LenB=0)*LenB;


Viele Grüße

Andreas Knöpfel

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

5

Donnerstag, 13. Dezember 2007, 19:50

Hallo Herr Knöpfel

Elegant sieht's ja nicht aus und bequem ist es auch nicht, aber es funktioniert.

Scheinbar braucht man hier nicht allzu oft mehrere optimierte Konstante, die dann in einer weiteren, berechneten Konstanten münden (oder vielleicht ist noch nicht Vielen aufgefallen, daß das nützlich, elegant und performant wäre?). Jedenfalls bin ich da bisher wohl der Einzige, und werde daher meine "Konstanten von Hand falten" ;(

Danke auf jeden Fall, daß Sie den Weg von Hand zu Fuß aufgezeigt haben!
Gruss
Bernd

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bernd« (13. Dezember 2007, 20:08)