Dienstag, 16. April 2024, 07:21 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

1

Freitag, 9. November 2007, 19:46

Ergebnis von Komp() in Variablen speichern

Hallo zusammen

Vielleicht kann mir jemand helfen: ich möchte ein umfangreiches und inzwischen unübersichtliches Coding mit vielen Komp() straffen und wieder leserlich machen. Es bietet sich an, das Ergebnis mehrfach genutzter Coding-Sequenzen in Variablen abzulegen. Aber es stellt sich ein für mich überraschendes Ergebnis ein: Komp() Erebnisse scheinen sich nicht richtig in Variablen ablegen zu lassen?

Ich habe diese Sequenz:
global const Per: [Per:120\fix,15|30|45|60|75|80|110|120|160|240|460|920];
global calc InsidePer: If( Komp(#High < Ref( High, -1) AND Low > Ref( Low, -1)#, #Per#), 1, 0);
global calc OutsidePer: If( Komp(#High > Ref(High, -1) AND Low < Ref( Low, -1)#, #Per#), 1, 0);

Versucht, durch jene zu ersetzen (hier sind das zwar zwei Zeilen mehr, wenn es funktionieren würde, wären es in meinem Coding aber am Ende viele Zeilen weniger):
global const Per: [Per:120\fix,15|30|45|60|75|80|110|120|160|240|460|920];
global calc PerHigh: Komp(#High#, #Per#);
global calc PerLow: Komp(#Low#, #Per#);
global calc InsidePer: If( PerHigh < Ref( PerHigh, -1) AND PerLow > Ref( PerLow, -1), 1, 0);
global calc OutsidePer: If( PerHigh > Ref( PerHigh, -1) AND PerLow < Ref( PerLow, -1), 1, 0);

Was für mich gleichwertig aussieht, erzeugt ein dramatisch unterschiedliches Ergebnis; ich habe es mal als Farbstudie angedruckt: im ersten Fall wird jeweils eine ganze Periode von 120 Minuten markiert, im zweiten Fall nur jeweils die ersten 5 Minuten (= Grundkompression meines HS).

Mache ich was falsch oder ist es eine bekannte Einschränkung von Investox, dass man Komp() Ergebnisse nicht inklusive der zugehörigen Kompressions-Information speichern kann in Variablen?
»Bernd« hat folgende Bilder angehängt:
  • InsideOut_richtig.png
  • InsideOut_falsch.png
Gruss
Bernd

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

2

Freitag, 9. November 2007, 20:56

global const Per: [Per:120\fix,15|30|45|60|75|80|110|120|160|240|460|920];
global calc PerHigh: Komp(#High#, #Per#);
global calc PerLow: Komp(#Low#, #Per#);
global calc InsidePer: If( PerHigh < Ref( PerHigh, -1) AND PerLow > Ref( PerLow, -1), 1, 0);
global calc OutsidePer: If( PerHigh > Ref( PerHigh, -1) AND PerLow < Ref( PerLow, -1), 1, 0);


Perhigh und Perlow sollten das von Dir gewünschte Ergebniss enthalten.
Allerdings greift ref(perhigh,-1) auf die letzte Periode der Grundkompression zurück und das sind in deinem Fall halt "nur" die 5 Minuten.
Um deine Abfragen muß also zwingend jeweils ein "unlustiges" KOMP drumrum, sonst wird das nichts.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

3

Samstag, 15. Dezember 2007, 13:43

Hallo Lenzelott

Ich möchte Dir noch vielen Dank sagen für Deine Antwort.

Perhigh und Perlow sollten das von Dir gewünschte Ergebniss enthalten.

Ein Teil des Fehlers war wohl, daß ich die angegebenen, mit Komp() gebildeten Zeitreihen, im weiteren Coding mit weiteren Ref() Befehlen verarbeiten wollte. Das klappt dann nicht so gut.

Meine Lösung ist, jede Zeitreihe mit calc getrennt zu definieren, einmal für das Charting und einmal für die Berechnungen (mit einen -1 mehr). Deine Zeile oben hat mich auf die Lösung gebracht, und nun kann ich mein Coding wieder lesen ;)
Gruss
Bernd

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

4

Montag, 17. Dezember 2007, 01:11

Freut mich, dass ich Dich auf die richtige Denkstrasse gebracht habe.
If you think it´s expensive to hire a professional, wait until you hire an amateur.