Dienstag, 16. April 2024, 20:38 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

1

Samstag, 10. August 2019, 13:14

Indikator in Konstante speichern

Hallo allerseits,

gibt es in IV eine Möglichkeit den Rückgabewert eines Indis als Konstante zu speichern?
Konkret habe ich mir so was vorgestellt wie:

Zitat

Global const gewD: ErsterWert(Dax...);
Es würde mich aber generell interessieren, ob es in IV die Möglichkeit gibt Rückgabewerte von Indikatoren als Konstante zu speichern, ohne dass ich den Umweg über VBS gehen muss (mit _vbs_const). Man müsste dabei natürlich einen Wert auswählen, mittels Erster Wert könnte man ja dann einen referenzieren oder so.
Viele Grüße!

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

2

Sonntag, 11. August 2019, 22:51

Hallo LowTrader,

hilft Dir "Valuewhen"?
Viele Grüße von Anke

http://www.ascunia.de

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

3

Dienstag, 13. August 2019, 15:22

Hallo Anke,

schön von Dir mal wieder zu hören...
Leider hilft mir - der an sich gute Vorschlag - nicht wirklich weiter. Mein Gedanke war, wie ich (um Code übersichtlicher und lesbarer zu machen), Werte in Variablen speichern kann. Dabei war der Gedanke in Indikatoren kann ich nur Konstanten einsetzen, von daher wäre es sehr elegant eine Lösung zu haben, mit der man Werte in Konstanten speichern kann. Bei Datumsangaben etc. ist es häufig auch etwas "verschwenderisch" Zeitreihen anzulegen, wenn man nur einen Wert wie 17.12.2012 (aka IV-intern Periode: 25) braucht.

Wenn das nicht geht müsste man jedesmal wenn man den Wert einer Konstanten berechnen und in einen Indi einsetzen will mit vbs_const in VBS. Da ich nicht viel Plan von VBS habe würde ich dort dann wohl wieder mit Sript berechne Formel die Investox-Formelmaschine anschmeißen um das dann wieder in den IV-Formelteil zurückzugeben, das schien mir ziemlich umständlich/sehr rechenintenisv - ein bisschen mit Kanonen auf Mücken geschossen.

Deswegen die Frage ob das nicht einfacher/eleganter zu bewerkstelligen ist?

Gruß

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

4

Dienstag, 13. August 2019, 17:09

Hallo LowTrader,

ich habe Deine Frage so verstanden, wie auf der folgenden Grafik- aber das war wohl leider falsch. ?(

Viele Grüße von Anke

http://www.ascunia.de

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

5

Mittwoch, 14. August 2019, 15:44

Hallo Anke,

wow für diese Antwort mit den Grafiken.

Im Prinzip will ich schon genau das machen was Dur beschrieben hast und "würde" das auch genau so machen. Da ich nicht genau weiß wie die Lösung aussieht nach der ich suche war meine Erklärung auch nicht punktgenau in der Hinsicht, dass Du völlig recht hast es geht nämlich ohne VBS (siehe Edit). Um Code übersichtlicher zu schreiben mag ich es Datumsangaben in Variablen zu speichern. Wenn ich in IV eine Zeitspanne dann erst berechnen lassen will, die ich dann wieder einsetzen kann ich nach Deinem Code z. B. schreiben:

Quellcode

1
2
3
4
5
6
global calc DatumAnfang: DateMark(24, 05, 2016, 0, 0);
global calc DatumEnde: DateMark(17, 12, 2017, 0, 0);   //bis zu dem Datum wird Korr ber

global calc Zähler: CUM(close<>0);

global calc Laufzeit1: ValueWhen(Zähler, DatumEnde=1, 1, V)-ValueWhen(Zähler, DatumAnfang=1, 1, V);

Der Code produziert als Endziel eine Differenz zwischen 2 Datumgsgaben gemessen in Perioden bei mir aktuell die Zahl: "232". Dieser Code hat allerdings den Nachteil, dass hier sehr viel unnötiger Speicherplat belegt wird (das meinte ich mit "verschwenderisch). Geht man vom Extremfall aus, dass man 20 Jahre EOD-Daten hat, belegt:

DatumAnfang: ca. 5000 Datenfelder weil Zeitreihe

DatumEnde: 5000 Datenfelder
Zähler: 5000Datenfelder
Laufzeit1: Berechnung wird 5000mal ausgeführt, belegt 5000 Datenfelder
Das ist etwas einen Milchmädchenrechnung/worst case und übertreibt wahrscheinlich etwas weil ich nicht weiß wie IV das genau handelt mit Laufzeit weil das nur zwischen zwei Datenpunkten berechnet werden muss, aber irgendwie denke ich dass das ja zumindest in jedem Zeitpunkt überprüft werden muss wegen Datemark .

Man kann jetzt auch argumentieren, dass Datum Anfang & Ende + Zähler gleich eingesetzt werden können in VW, richtig das spart Platz, geht aber auf Kosten der Übersichtlichkeit. Was bleibt ist das je nach Berechnungsmethode mindestens 5000mal bis (so wie ich es eigentlich gerne schreiben würde): 20.000 mal etwas in einem Array gespeichert werden muss (und 5000 mal berechnet) für eine Datumsdifferenz die "eigentlich" eine Konstante ist.

Zum Vergleich in Excel wäre das so aufgebaut
DatumAnfang= 1Zelle= 1 Wert
DatumdEnde=1 Zelle = 1Wert
Laufzeit1= DatumAnfang- DatumEnde = 1 Berechnung/1Datenfeld
In der Summe also 3 Datenfelder belegt und 1 Berechnung, fertig vs. 20.000 Datenfelder belegt und 5000Berechnungen.
Deswegen bin ich häufig dazu übegangen Datumsdifferenzen in Excel zu berechnen und dann einzusetzen.
für die Lesbarkeit von Code wäre es allerdings schöner wenn das alles in IV geschieht.


Der 2. Nachteil von dem Code oben ist, dass die Variable Laufzeit1, eine Variable ist. Das stimmt ich kann diese Variable in den Indikator Correl z. B. einsetzen. Edit: Nein das geht nicht und produziert einen Typfehler. Ende Edit. Ich meine aber dass ich in der Vergangenheit häufiger einen Typfehler bekommen habe, dass dieser für Parameter den Wert einer Konstanten erwartet.Ich meine das auch gelesen zu haben, dass Indikatoren in IV "normalerweise" Konstanten für Parameter erwarten. Ich weiß jetzt nicht ob sich das mit IV 7 generell geändert hat oder nur bei Correl funktioniert.

Zusammenfassung: Gibt es nich einen Weg in IV das mehr wie in "Excel" zu berechnen? Also Datum1= Konstante - Datum2=Konstante Laufzeit1 wird berechnet und dann =Konstante gespeichert und die Konstante kann ich ja dann auch in allen Indikatoren einsetzen.
Hoffe ich habe mich klarer ausgedrückt, ist aber auch nicth so einfach das ganze zu erklären, da ich ja wie gesagt auch nicht genau weiß wie eine Lösung aussehen könnte bzw. ob das so überhaupt in IV geht....

Lieben Gruß an Dich Anke
Edit:Kam erst jetzt dazu es nochmal nachzuprüfen, es ist doch so dass in Correl für Laufzeit1 ein Typfehler kommt. Es ist doch so wie im Eingangsposting beschrieben Man muss also doch den Umweg über _vbs_const gehen um die anzahl der Perioden berechnen zu lassen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »LowTrader« (15. August 2019, 20:36)