Einloggen Suche | Aktive Themen
Extrema einer früheren Periode Optionen
KaKa
Geschrieben: Friday, March 2, 2012 10:50:05 AM

Gruppen: Kunde

Beiträge: 72

Tai-Pan End-of-Day
Hallo Freunde,

ich benötige die Max/Min-Kurse von Wertpapieren innerhalb eines Zeitraumes, der durch
Datum1 und Datum2 festgelegt ist (für Katalog-Modul). Wer kann helfen?

Besten Dank
KK
Steffen Vohswinkel
Geschrieben: Sunday, March 4, 2012 1:25:45 PM

Gruppen: Kunde

Beiträge: 371

Tai-Pan End-of-Day
Hallo Klaus,

nutze die Funktionen für Charts:

- Chart.StartDatum und
- Chart.EndeDatum

Grüße
Michael
Geschrieben: Monday, March 5, 2012 8:12:04 AM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Hallo Klaus,

dazu müssen die Zahl der Tage im Bereich ermittelt werden und die Zahl der Tage, die seit dem Ende des gewünschten Zeitraums vergangen sind.
Dann läßt sich mit der HHV- / LLV-Funktion der Höchst- oder Tiefstwert des Bereichs ausgeben, wobei mit der Ref-Funktion der Startpunkt der Suche von heute auf das Ende des Zeitraums zurückverlegt wird.

Beispiel:
"Zeitraum" hat 20 Börsentage (etwa 1 Kalendermonat).
Seit dem Ende des Zeitraums sind 40 Börsentage "verflossen", also 2 Kalendermonate.

Die Formel hieße dann für den Höchstwert der Schlußkurse "Ref(HHV(Close,Zeitraum),-verflossen)"

Da müßtest du im Katalogmodul rechts, wo die Einzelwerte des gewählten Katalogs stehen, erstmal eine neue Spalte definieren.
Also: Rechtsklick oben auf irgendeinen Spaltentitel > unter "Verfügbare Spalten" auf "Neu" klicken.
Der Dialog "Formel bearbeiten" öffnet sich, hier unter dem Reiter "Formel" einen aussagekräftigen Namen vergeben.
Z.B. "Bereich Max".

Dann unter dem Reiter "Parameter" erstmal 2 festlegen.
Hier werden dann das Anfangsdatum und das Enddatum des gewünschten Bereichs angegeben, in dem der gesuchte Höchstwert liegt.
Als "Typ" wählen wir deshalb bei beiden "Datum".
Standardmäßig steht da dann "Datum" als Parameter1 (oben) und drunter "Datum1" als Parameter2.
Zum Probieren hab ich mal den Januar genommen, also oben "01.01.2012" und unten "31.01.2012".

Wieder zum Reiter "Formel".
Das "Result := "";" stört erstmal und kann nach unten geklickt werden werden.

Jetzt ordnen wir den beiden Parametern einen verständlichen Namen zu, z.B.:

Anfang:= Para1; // das Startdatum des gewünschten Bereichs heißt ab jetzt "Anfang"
Ende:= Para2; // das Enddatum heißt sinnigerweise jetzt "Ende"

Jetzt brauchts erstmal die Anzahl der Tage im Bereich.

Wenn wir jetzt unten als Formelabschluß schreiben würden

Result:= Ende-Anfang;

würde als Tagesanzahl in der Spalte "30" ausgegeben werden. Also: "Ende-Anfang+1".
Jetzt stimmt mit "31" erstmal die Anzahl der Tage.

Mit "KT_Bereich:= Ende-Anfang+1" wird hier der Anzahl der KalenderTage des Bereichs ein griffiger Name zugewiesen.

Jetzt müssen wir aus den Kalendertagen die Zahl der Tage ohne Kurs herausrechnen, im Normalfall also Samstage + Sonntage. Also pro Kalenderwoche (alle 7 KTage) 2 Tage abziehen.
Das Ergebnis sind die Börsentage BT. ( Siehe Anmerkung unten )

BT_Bereich:= KT_Bereich - (Int(KT_Bereich / 7) * 2);

Im Einzelnen: "KT_Bereich / 7" teilt die Anzahl der KalenderTage im Bereich durch 7 und ergibt die Zahl der Wochen.

"Int(KT_Bereich / 7)" schneidet die Kommastellen weg. 10 KT sind dann eben 1 Woche und nicht 10/7 = 1,428 Wochen.

Die Wochenzahl wird dann mit 2 multipliziert, weil pro Woche mit Samstag und Sonntag im Normalfall 2 KalenderTage abgezogen werden müssen.

Dann müssen noch die verstrichenen Tage "Ende" bis heute ( = "SystemDate()" ) errechnet werden.
Wichtig sind hier wieder die BörsenTage = Kurstage ohne Sams- und Sonntage.



Das fertige Ergebnis für die Max-Kurse eines zu wählenden Zeitbereiches sieht dann so aus (kannst du einfach kopieren und im Formeleditor einfügen):


Anfang:= Para1; // das Startdatum des gewünschten Bereichs
Ende:= Para2; // das Enddatum heißt sinnigerweise jetzt "Ende"

KT_Bereich:= Ende - Anfang + 1; //ergibt die Anzahl der KalenderTage im Bereich
BT_Bereich:= KT_Bereich - (Int(KT_Bereich / 7) * 2); //liefert die BörsenTage im Bereich, indem pro KW 2 Tage abgezogen werden

KT_verflossen:= SystemDate() - Ende; // Zahl der vergangenen KalenderTage seit Ende des Bereichs
BT_verflossen:= KT_verflossen - (Int(KT_verflossen / 7) * 2); // die Wochenendtage werden abgezogen, ergibt die BörsenTage

Result:= Ref(HHV(Close,BT_Bereich),-BT_verflossen) // zeigt den höchsten Schlußkurs im gewählten Bereich



Für den Minimalwert im Bereich eine neue Spalte definieren und "HHV" im Result:= gegen "LLV" austauschen. Rest bleibt gleich.


Wenn du beim Formeltest eine Fehlermeldung kriegst, hast du wahrscheinlich vergessen, die beiden Parameter zu definieren. Siehe oben.
Falls das alte "Result := "";" vom ursprünglichen Eingabefenster steht noch drunter steht, das muß weg.


Anm. zum Rausrechnen der Sams-und Sonntage:
Das ist eine pauschale Möglichkeit, die kursfreien Tage abzuziehen.
Eine Ungenauigkeit bleibt aber: Jeder kursfreie Werktag (Feiertag) im Zeitraum verschiebt den "ausgelesenen" Bereich um einen Tag in die Vergangenheit, weil er in der Berechnung nicht erfaßt ist.
Die HHV-/LLV-Funktion wie auch die Ref-Funktion zählen nur die Anzahl der Kursdaten = Börsentage, nicht die Kalendertage.
Je weiter der Bereich zurückliegt, umso mehr macht sich die Abweichung bemerkbar.
Wenn ich z.B. den Bereich 1.1.11 bis 31.1.11 auswerten möchte, werden Min- oder Max-Kurse angegeben, die noch Ende Dezember 2010 liegen können.

Genaue Ergebnisse würde man bekommen, wenn man mit der "barssince()"-Funktion oder einer vergleichbaren die genaue Anzahl der Kurstage seit dem Start- und Endedatum auslesen könnte.
Dann könnte man die Rechnerei mit den Kalender-/ Börsentagen ganz vergessen.

Hab ich leider nicht hinbekommen, vielleicht hat jemand einen Tip...

Frohes Weitertüfteln,

Michael
KaKa
Geschrieben: Monday, March 5, 2012 1:20:04 PM

Gruppen: Kunde

Beiträge: 72

Tai-Pan End-of-Day
Hallo Michael,

ich danke dir für deine Fleißarbeit. Ich bewundere solche Menschen wie dich, die trotzdem einen Weg suchen und finden. Auch, wenn es ganz sicher einfachere Lösungen gibt (nämlich Direkteingabe der zwei "Datums").

Trotzdem: ich habe diese Lösung in mein Programm übernommen. Es bringt brauchbare Ergebnisse, wenngleich durch Fortschreiten der Zeit und für andere Märkte die Formel immer mal wieder angepasst werden muss.

Aber, alle Dinge dieser Welt sind verbesserungswürdig, -fähig. Was sagt L&P??

Beste Grüße
KK

PS: Zukünftig kannst du bei mir voraussetzen, wie Formeln einzubinden sind (Großteil deines Beitrages).
Michael
Geschrieben: Monday, March 5, 2012 3:14:20 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Hallo Klaus,

ich hatte auch überlegt, ob ich das drumrum weglasse.
Mir persönlich ist es aber lieber, wenn ich ein Problem habe, daß ich nicht nur an die Lösung komme, sondern wenns geht auch den Weg dahin verstehe.
Ich weiß noch gut, daß selbst solche Sachen wie neue Spalten erstellen mich am Anfang mit Tai-Pan viel Zeit und Nerven gekostet haben.
Andere fangen vielleicht auch grade an und sind froh, wenns ausführlicher beschrieben ist.

Viele Grüße,

Michael
Steffen Vohswinkel
Geschrieben: Tuesday, March 6, 2012 3:33:30 PM

Gruppen: Kunde

Beiträge: 371

Tai-Pan End-of-Day
Hallo Michael,

ganz allgemein umgeht man den den Kalender durch Verwendung einer Close-Reihe.
Diese enthält alle bisherigen Börsentage. Feiertage und Wochenendtage sind nicht mehr enthalten.
Man rechnet über den Index.

Grüße
Michael
Geschrieben: Tuesday, March 6, 2012 6:43:31 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Hallo Taxus,

machs doch bitte konkret.
Ich hab mit den verschiedenen Funktionen hin und her überlegt und bin zu keinem besseren Ergebnis gekommen.
Daran ist aber eher mein begrenzter Horizont schuld als die Formelsprache von Tai-Pan grummel .

Über eine konkrete Zählfunktion der vorhandenen Kurse seit einem gegebenen Datum würde ich mich aus reinem Interesse schon freuen, und Klaus könnte seine Formel noch etwas verfeinern...

Gruß
Michael
Michael
Geschrieben: Wednesday, March 7, 2012 10:53:26 AM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
@ taxus,

hat sich erledigt, danke für den Tip mit dem Index.
Das war genau das, was ich gesucht hatte Smile/

@ Klaus,

mit dieser Formel paßt es jetzt wirklich taggenau, egal wie weit zurück der Zeitraum liegt.

Anfang:= Para1; // erstes Datum des Bereichs
Ende:= Para2; // letztes Datum des Bereichs
heute:= SystemDate(); // aktuelles Datum
Bereich:= IndexofDateTime(C,Ende,0) - IndexofDateTime(C,Anfang,0) + 1; // Anzahl Kurstage im Bereich
vergangen:= IndexOfDateTime(C,heute) - IndexOfDateTime(C,Ende) - 1; // vergangene Kurstage seit Folgetag des Enddatums

Result := Ref(HHV(Close,Bereich),-vergangen); // höchster Schlußkurs im Bereich

Und wieder was dazugelernt Smile/

Michael
KaKa
Geschrieben: Wednesday, March 7, 2012 11:39:56 AM

Gruppen: Kunde

Beiträge: 72

Tai-Pan End-of-Day
Hallo Michael,

so allmählich kommen wir der Sache schon näher. Die Formel ist gut, aber nicht perfekt.
Sie gibt auch Werte aus, wenn das Wertpapier in der angegebenen Zeitspanne (noch)
gar nicht existiert. Das darf unbedingt nicht sein!

Jedoch dieses einzupflegen dürfte für dich Experten aber keine so große Hürde sein.
Lass' von dir hören.

Beste Grüße
Klaus
Michael
Geschrieben: Wednesday, March 7, 2012 12:15:39 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Hallo Klaus,

ich bin alles andere als ein Experte, aber interessiert an solchen Problemen.

Sag mir bitte genau, wo du einen Fehler entdeckt hast.
Ich habe die Formeln für den Min + den Max-Wert bei etwa 10 verschiedenen Aktien in 2 Zeitbereichen durchgetestet (1.1.12 - 31.1.12 und 1.1.10 - 31.1.10).

Sowohl Min- als auch Max-Werte haben bei allen Aktien auf den Tag genau gestimmt.
Knackpunkt sind immer die Tiefst- oder Höchstwerte, die direkt am Anfang oder am Ende des Zeitraums auftreten.
Wie gesagt, keine Fehler bei mir.

Gruß
Michael
KaKa
Geschrieben: Wednesday, March 7, 2012 12:32:49 PM

Gruppen: Kunde

Beiträge: 72

Tai-Pan End-of-Day
.....ja, ermittle mal die Extrema der Jahre 2007/2008 in einem Katalog.
Dann bringt die Formel auch Werte für jene Papiere, deren Kurse erst
2009 beginnen. Das ist natürlich falsch/lästig.

MfG KK
Michael
Geschrieben: Wednesday, March 7, 2012 2:15:42 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Stimmt, das darf nicht sein.

Nimm das:

Anfang:= Para1; // erstes Datum des Bereichs
Ende:= Para2; // letztes Datum des Bereichs
heute:= SystemDate(); // aktuelles Datum
Bereich:= IndexofDateTime(C,Ende) - IndexofDateTime(C,(Anfang-1)); // Anzahl Kurstage im Bereich
vergangen:= IndexOfDateTime(C,heute) - IndexOfDateTime(C,Ende); // vergangene Kurstage seit Folgetag des Enddatums

Result := Ref(HHV(Close,Bereich),-vergangen); // höchster Schlußkurs im Bereich


und das

Anfang:= Para1; // erstes Datum des Bereichs
Ende:= Para2; // letztes Datum des Bereichs
heute:= SystemDate(); // aktuelles Datum
Bereich:= IndexofDateTime(C,Ende) - IndexofDateTime(C,(Anfang-1)); // Anzahl Kurstage im Bereich
vergangen:= IndexOfDateTime(C,heute) - IndexOfDateTime(C,Ende); // vergangene Kurstage seit Folgetag des Enddatums

Result := Ref(LLV(Close,Bereich),-vergangen); // niedrigster Schlußkurs im Bereich


Besser?

Gruß
Michael
KaKa
Geschrieben: Wednesday, March 7, 2012 3:32:14 PM

Gruppen: Kunde

Beiträge: 72

Tai-Pan End-of-Day
Michael schrieb:
Hallo Klaus,
ich bin alles andere als ein Experte, aber interessiert an solchen Problemen.
Gruß
Michael

Jedenfalls bist du ein GROßER für mich. Alles bestens, wie gewünscht. Danke.

Beste Grüße
Klaus
Michael
Geschrieben: Wednesday, March 7, 2012 5:56:21 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Freut mich, daß es jetzt klappt!

Michael
Benutzer die diese Diskussion aktuell lesen
Guest

Powered by Yet Another Forum.net version 1.9.1.8 (NET v4.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.

Durch die Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zum Datenschutz finden Sie hier