|
Gruppen: Kunde
Beiträge: 11
|
Hallo zusammen
Vielleicht kann mir jemand kurz weiterhelfen.
Ich möchte gerne einen Filter anlegen, welcher unter anderem folgende Kriterien beinhaltet:
1. Der aktuelle Kurs (Schlusskurs) soll tiefer sein, als das tiefste Tief der letzten X-Tage
2. Der Schlusskurs soll vor x-Tagen über dem GD-X gelegen haben
3. Der Kurs der Aktie soll vor 2 Tagen um X-Prozent gefallen sein
X = als Variable, um verschiedene Werte zu testen !!
Wäre toll wenn mir hier jemanden sagen könnte, wie man dies umsetzen kann.
Im Voraus besten Dank.
Gruss Juergi
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo juergi,
einen Filter aufzustellen ist bestimmt einfach für alle von uns, wenn wir es denn auch versuchen.
Wie geht man am besten vor?
1. Man formuliert seinen Filter in Worten und am besten in Bausteinen. Das hast Du ja schon richtig gut formuliert. 2. Danach schaut einfach in das Tai-Pan-Filter-Angebot, um zu sehen, was da schon vorhanden ist. Es ist ja gut möglich, daß man gleich den gewünschten Filter vorfindet. 3. Ist er nicht dabei, schaut man, ob vielleicht der eine oder andere Baustein als Filter vorliegt. 4. Wenn nichts vorliegt, davon wollen wir nun mal ausgehen, setzt man den verbal formulierten Filter in Bausteine um. Das wollen wir jetzt mal unternehmen: "1. Der aktuelle Kurs (Schlusskurs) soll tiefer sein, als das tiefste Tief der letzten X-Tage" Den aktuellen Schlußkurs erreichen wir über: Close
Das tiefste Tief bekommen wir aus der Funktion der Formelsprache: Lowest Low Value Die Funktion dazu ist: LLV( L, X ) Dabei sind: L alle Tiefs des unterlegten Wertes. Wir wollen aber nur die letzten X. X ist die gewünschte Variable X, um später mit verschiedenen Werten arbeiten zu können. In Tai-Pan sind solche Variable Parameter. Hier im Beispiel sind es Tage als Periodenart. Wir merken uns, daß wir später einen Parameter "Tage" anlegen müssen.
Dann verbinden wir die beiden Angaben nach der Aufgabenstellen, also: "1. Der aktuelle Kurs (Schlusskurs) soll tiefer sein, als das tiefste Tief der letzten X-Tage"
Bitte versuche das.
Weiter gehts mit Aufgabe: 2. Der Schlusskurs soll vor X-Tagen über dem GD-X gelegen haben Den Schlußkurs vor X-Tagen ermittelt man mit der Funktion: Ref ( Close, -X) Dieser soll über dem GD-X gelegen haben. In Tai-Pan kennen wir den Begriff als GD so nicht, sondern nur die explizite Form des GD´s als EMA, SMA, WMA oder so. Ich nehme jetzt einfach mal den SMA. Das geht mit der Funktion SMA( C, X). Also den SMA über die Close-Kurse für X Tage.
Dann verbinden wir die beiden Angaben nach der Aufgabenstellung, also: "2. Der Schlusskurs soll vor x-Tagen über dem GD-X gelegen haben"
Bitte versuche das.
Nun noch den dritten Teil der Aufgabenstellung: "3. Der Kurs der Aktie soll vor 2 Tagen um X-Prozent gefallen sein"
Wir brauchen also einen aktuellen Close, der um X% kleiner als vor 2 Tagen sein muß. Der Close vor 2 Tagen, das hatten wir schon. Wir nehmen wieder die Funktion: Ref(C, 2). Statt X tragen wir hier direkt die 2 ein. Jetzt müssen wir überlegen wie wir das mit den X% aufschreiben könnten. Das versuche bitte. Man kann das ohne die Formelsprache zu beherrschen vordenken, einfach so wie man es in der Mathematik formulieren würde. Es ist nicht schwer, aber weil man so eine Rechnung andauernd braucht, ist es gut mal selbst darüber nachzudenken.
Viel Erfolg beim Grübeln.
Egal welche Frage, außer die der kompletten Sofort-Lösung beantworte ich gerne. Vielleicht haben ja noch mehr Lust drauf.
Grüße
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo zusammen,
es ist zu empfehlen, die kleinsten Bausteine vorab zu testen. Dazu erstellt man am besten eine Formel. In der Formel testet Ihr dann die einzelnen Bausteine mit Hilfe des Debuggers. Liefern sie alle die gewünschten Ergbenisse, dann werden sie zur Filterformel zusammengebaut und erneut getestet. Diese Vorgehensweise ist dann empfehlenswert, wenn man die Formel nicht einfach hinschreiben kann. Außerdem kann man die Formel dann genau für einen Wert prüfen. Im Filtermodul würde die Formel immer über einen Katalog mit allen Werten gezogen. Bei auftretenden Fehlern in der Formel müssen dann alle Katalogwerte abgearbeitet werden. Das muß man mit dem Test als Formel vermeiden .
Bitte prüft, ob Ihr in Eueren Bausteinen als Ergebnis einen Wert oder ein Array bekommt. Denn was brauchen wir: a) ein Array oder b) einen Wert?
Klappt alles, dann wird der Filter im Filtermodul erstellt.
Grüße
PS: Der Filter ist schon erstellt. Juergi soll der GD die selbe Variable X bekommen wie die anderen mit X bezeichneten Variablen?
|
|
Gruppen: Kunde
Beiträge: 104
|
Hallo Juergi,
Filtererstellung über "Formel" und Parametererstellung ist bekannt? Ich machs mal kurz, wenn es irgendwo hakt, frag ruhig nach.
zu 1.) 1 Parameter, Label benennen z.B. "Bereich des tiefsten Tiefs?", Default = ein Standard-Vorgabewert deiner Wahl, z.B. 20. Typ belassen ("Integer")
Formel: Result := C < Ref(LLV(L,Para1),-1); //Para1 = letzte X-Tage seit gestern, in denen der bisherige niedrigste Tiefstkurs liegen soll
zu 2.) 2 Parameter, Label Para1= oben z.B. "vor wieviel Tagen?", Para2= unten z.B. "GD über wieviel Tage?". Defaultwerte nach deiner Wahl eingeben, Typ bei beiden auf "Integer" lassen.
Formel: Result := Ref(Close,-Para1) > Ref(SMA(Close,Para2),-Para1); //Para1 = Zeitpunkt vor X-Tagen; Para2 = GD-X (einfacher Durchschnitt)
zu 3.) 1 Parameter, Typ: Double (wichtig, um Kommawerte eingeben zu können), Label heißt z.B. "um wieviel % gefallen?", Default z.B. 2.000,
Formel: Result := Ref(C,-2) <= (Ref(C,-3) - Ref(C,-3) * Para1/100); // Schlußkurs vor 2 Tagen um X oder mehr % gefallen
Du kannst bei allen 3 Filtern im Dialog "Filterfolge einstellen" über den "Einstellen"-Button dann jeweils die gewünschten X-Variablen eingeben.
Viel Erfolg,
Michael
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Taxus
Herzlichen Dank für Deine Hilfe. Die Variable X soll beim GD anderst sein, als bei den übrigen Variablen.
Hallo Michael
Auch Dir herzlichen Dank für die ausführliche Erklärung.
Werde versuchen Eure Ausführungen in Tai-Pan umzusetzen, falls noch Fragen auftauchen, werde ich mich gerne nochmals zu diesem Thema melden.
Gruss und schönen Abend
Juergi
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo juergi,
für das GD-X brauchst Du dann halt noch ´nen 2. Parameter.
Hast Du schon eigene Filter erstellt? Hast Du auch schon eigene Formeln erstellt?
Hallo zusammen,
wer interessiert sich denn für eine Filtererstellung ganz allgemein im Forum? Wie sind Euere Erfahrungen?
Es fehlt einfach die breite Teilnahme. Es wäre schön, wenn Ihr Euch mehr und direkter beteiligen würdet. Gelesen werden die Beiträge auf jeden Fall mehr. Hier braucht man keine Hemmungen zu haben. Schreibt auf, was Euch bewegt. Es ist einer der kürzesten Wege an Lösungen zu kommen, neben der Hotline natürlich.
Grüße
|
|
Gruppen: Kunde
Beiträge: 353
|
Da ich noch nicht zur Programmierung kam - vielleicht kannst Du mich hier unterstützen, nur wenn Du viel Zeit hast:
Ich würde mir einen Filter kreieren, der folgendermaßen gestrickt ist:
Zeige mir das Ergebnis aller im Katalog enthaltenen Wertpapiere an, deren letzter Umsatz höher oder tiefer um x% war, als der durchschnittliche Umsatz der letzten 30 Handelstage.
Der "durchschnittliche Umsatz der letzten 30 Handelstage" ist eine feste Größe. Der "letzte Umsatz um x%" soll eine variable Größe sein.
Danke Dir im voraus!
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo,
hast Du schon mal in Tai Pan nachgesehn, ob dieser oder ein ähnlicher Filter bereits vorhanden ist? Falls ja, welche wären das?
Grüße
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Taxus
Eigene Filter oder Formeln in Tai-Pan zu programmieren, habe ich mich noch nicht versucht.
Bis anhin habe ich vorhandende höchsten abgeändert.
Gruss
Juergi
|
|
Gruppen: Kunde
Beiträge: 371
|
Moin, juergi,
dann ist jetzt die Zeit gekommen, Deine Anwendungen auszubauen. Bestehende Formeln und Filter zu ändern ist sicher der beste Weg dazu. Du kannst die Formeln dann auch weiter umstellen, bis es ganz neue Lösungen sind. Was mit einer Funktion möglich ist, ist auch mit anderen zu lösen. Wenn man erst mal eine Vorstellung hat, was man will, - diese Vorstellung auch gut und möglichst genau verbal formuliert, - diese in Bausteine bis Elemente zerlegt - und dann aufschreibt, dann kann man das Ganze einzeln in Tai Pan umsetzen - und Formeln/Indikatoren/Listen/Filter entwickeln und erstellen.
Wie weit bist Du mit Deiner Aufgabe hier?
Grüße
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo Boersenmann,
"Suche alle im Katalog enthaltenen Wertpapiere, deren aktueller Umsatz X % größer oder kleiner ist als der durchschnittliche Umsatz der letzten 30 Handelstage."
Der "durchschnittliche Umsatz der letzten 30 Handelstage" ist eine feste Größe. Der Änderungswert X% soll eine variable Größe sein. "
Hast Du inzwischen nachgesehn, ob es Filter dazu gibt?
Wir wollen uns Deinen Filter erarbeiten:
Arbeitsschritte 1. Filter-Aufgabenstellung formulieren. 2. Filter im Formel-Modul in Bausteine und in Elemente zerlegen. 3. Elemente in Tai Pan formulieren und mit Hilfe des Debuggers testen. 4. Bausteine in Tai Pan formulieren und mit Hilfe des Debuggers testen. 5. Formel aus den Bausteinen erstellen und mit Hilfe des Debuggers testen. 6. Filter im Filter-Modul aus der Formel erstellen. 7. Filter-Ergebnis-Liste - Gestaltung 8. Layout - Gestaltung 9. Signal - Gestaltung.
Das gehört bei mir jedenfalls fast immer alles dazu.
Man kann das natürlich auch gleich im Filter-Modul erledigen. Aber um es zu lernen und auch hinter die Tai-Pan-Formelsprache zu steigen, empfehle ich diese Vorgehensweise.
Arbeistschritt 1 "Aufgabenstellung": Die Augabenstellung hast Du gut und exakt formuliert. Du hast sogar aufgeschrieben, welche Werte eine variable Größe haben sollen. Solche Größen werden als Parameter in eine Parameter-Liste angelegt.
Arbeitsschritt 2 "Bausteine": Welche Bausteine benötigen wir? Da wäre zunächst: Der durchschnittliche Umsatz der letzten 30 Tage. Dazu muß die Formel rein mathematisch ohne Tai Pan aufgestellt werden. Bitte schreibt das mal auf. Das ist zwar kein Element mehr aber auch kein richtiger Baustein. Denn wenn wir den Durschnitts-Umsatz der letzten 30 Tage haben, dann müssen wir nur noch prüfen, ob der letzte Umsatz X % größer oder X % kleiner als der Durschschnitts-Umsatz der letzten 30 Tage ist. Nur die Werte, die diese Bedingung erfüllen, sollen uns angezeigt werden.
Arbeitsschritt 3 "Elemente": Wir werden folgende Elemente verwenden: - Umsatz - Tage als Perioden - Die Summenberechnung - Die Division - Die X % - Berechnung (Schaut mal bei Micheal rein. Dieses Berechnung wird sehr oft benötigt. Deshalb sollte sie sich jeder ansehen und voll verstehen, wie sie zu notieren ist.)
Das schreibt zunächst mal bitte auf oder fragt, aber beteiligt Euch bitte.
Danach geht´s weiter.
Grüße
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo zusammen,
weiter geht´s in der Filter-Aufgabe von Boersenmann.
Wir wollten nachsehn, was Tai Pan uns schon anzubieten hat. Ich habe folgendes gefunden: 1. Die Formel für den SMA { Simple Moving Average } wSMA := Sum (Close, Para1) / Para1; wSMA; Nachgeschaut - im Formelverzeichnis unter Kurzname "FML_SMA" Der SMA hat eine ähnliche Formel wie in unserem Beispiel. 2. Den Filter Result:=V>Ref(HHV(V,21),-1); Nachgeschaut im Filterverzeichnis unter "Umsatz". Da muß man sich dann ein bißchen durchwühlen. A b e r, das Ergbenis ist recht mager. Das einzige, daß wir nehmen können, ist "V" für das Umsatzvolumen. Das ist schon weit hergeholt. Es soll aber für alle sein, die es versuchen wollen.
Nun können wir die Formel schon für den 1. Baustein zusammenbauen:
Wir brauchen den Durchschnittsumsatz der letzten 30 Tage. Es müssen also alle 30 Umsätze (dafür nehmen wir V für das Volumen) aufsummiert und danach durch 30 geteilt werden. Am besten legt man sich nun eine neue Formel an. In das Formelfenster tragen wir dann unsere Elemente und Bausteine nacheinander ein. Wir schreiben also oben ab und passen den Formeltext nur gering an.
In die erste Formelzeile schreiben wir einen Kommentar zur Formel: { Formel zur Berechnung des Durchschnitts-Volumens der letzten 30 Tage } Danach tragen wir den Befehl debug ein. Sobald wir die Formel zu testen beginnen, ermöglicht uns der Debugger zur Tai-Pan-Formelsprache , das Programm detailliert zu verfolgen. Aus meiner Sicht ist der Debugger unverzichtbar, insbesondere wenn man damit erst beginnt zu arbeiten. debug Dann folgt der Formeltext für die Durchschnittssummenberechnung, gefolgt von einem Kommentar. a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage Sobald Ihr die Funktion "Sum" geschrieben habt, könnt Ihr den Mauszeiger auf "Sum" stellen und es wird Euch die geforderte Syntax (Notationsvorschrift) angezeigt. Damit müßt Ihr Euch beschäftigen. Diesen Teil könnt Ihr bereits nachvollziehn. Die Formel braucht noch einen Abschluß. Wir tragen nun noch ein: Result := 1; // Nur als Alibi, weil es die Formelsprache Tai Pan verlangt. Später werden wir es ändern. debug // Noch ein debug, damit wir das Programm bis zum Ende durchtesten können.
Nun steht da folgendes: { Formel zur Berechnung des Durchschnitts-Volumens der letzten 30 Tage } debug a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage Result := 1; // nur als Alibi, weil es die Formelsprache Tai Pan verlangt. Später werden wir es ändern. debug // und nochmals debug, damit wir das Programm bis zum Ende durchtesten können.
Jetzt wird die bisherige Formel noch abgespeichert. Ihr könnt sie aufrufen und alles untersuchen. Probiert es einfach aus. Verwendet die Taste "F8" für Einzelschrittbearbeitung.
Morgen schreiben wir den Baustein für die Bedingungsprüfung kleiner oder größer X% auf.
Grüße
Es wäre gut, wenn Ihr mal schreibt, ob Euch das so ausführlich überhaupt interessiert? Außerdem wäre es gut, wenn Ihr Euch beteiligt. Insgesamt werden es 4 Zeilen werden, wenn man es etwas ausführlicher hinschreibt. Es ist aber besser lieber etwas mehr als zu wenig zu schreiben, um später auch wieder schnell den Überblick zu finden, was da überhaupt passiert. Vor allem natürlich bei bedeutend längeren Programmen.
|
|
Gruppen: Kunde
Beiträge: 353
|
Taxus,
wie Du das schreibst ist einfach vorbildlich!
Ganz großes Kompliment.
Gruß Boersenmann
|
|
Gruppen: Kunde
Beiträge: 371
|
Moin, Moin,
auf geht´s zum 2. Baustein: Bedingungsprüfung kleiner oder größer X%
Michael hatte die dafür notwendige Lösung für ein anderes Beispiel aufgeschrieben. Wir wandeln das nur ein wenig ab. Was ist zu berechnen: der Wert X % , ich nenne ihn den Vergleichswert?
Zu einem Basiswert, das ist unser Durchschnittsumsatz der letzten 30 Tage, sollen a) 30 % hinzuaddiert bzw. von dem selben Basiswert, b) 30 % subtrahiert werden.
Wir schreiben das in 2 Zeilen, um später die korrekte Berechnung überprüfen zu können.
Bisher hatten wir berechnet: a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage
Also, um von einem Basiswert einen %-Satz berechnen zu können nehmen wir einfach den Basiswert und multiplizieren ihn mit dem gewünschten %-Satz. Im Beispiel sind das 30%. Das kann man so wie oben schreiben: a1 * 30/ 100 oder ( wenn wir einen festen Wert verwenden wollen) a1 * 0.30 (wichtig hierbei, es muß ein Punkt vor den Dezimalstellen geschrieben werden) oder a1 * Para / 100 ( wenn wir für den %-Satz einen Parameter verwenden wollen, den wir vor Anwendung beliebig ändern können, aber dazu später)
Nun haben wir bisher folgenden Formeltext im Formelfenster eingetragen: { Formel zur Berechnung des Durchschnitts-Volumens der letzten 30 Tage } debug a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage a2 := a1 + a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage + 30 % a3 := a1 - a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage - 30 % Result := 1; // nur als Alibi, weil es die Formelsprache Tai Pan verlangt. Später werden wir es ändern. debug // und nochmals debug, damit wir das Programm bis zum Ende durchtesten können.
Wir machen gleich weiter und schreiben die Prüfbedingung auf: Was war zu prüfen? a) Ist der aktuelle Tagesumsatz größer als der Durchschnittsumsatz der letzten 30 Tage, und b) ist der aktuelle Tagesumsatz kleiner als der Durchschnittsumsatz der letzten 30 Tage. Dafür nehmen wir den If -Befehl. Ein Beispiel: If ( Ampel = grün {Bedingungsfrage}, {dann/Ja-Antwort} kannst Du gehn, {sonst/Nein-Antwort} bleibe stehn); Die Kommentare in {} kann man an sinnvollen Stellen auch mitten in den Text schreiben. Die eine Prüfung wäre demnach: V > a2 ( Ist der aktuelle Umsatz größer als der Durchschnittsumsatz der letzten 30 Tage + 30 %) V < a3 ( Ist der aktuelle Umsatz kleiner als der Durchschnittsumsatz der letzten 30 Tage - 30 %) Das müssen wir nun im If-Befehl zusammenfassen:
a3 := If ( V > a3, 1, If ( V < a2, 2, 0 )) ; Result := a3;
Achtung, an Stelle der einfachen Sonst-Antwort ist es erforderlich eine weitere If-Abfrage einzubauen. Wir verschachteln auf diese Weise unsere Abfragen. Das ist notwendig, weil wir als Ergebnis 1, 2 oder 0 erhalten können. 1, wenn der aktuelle Umsatz größer als der Durchschnittsumsatz der letzten 30 Tage + 30 % 2, wenn der aktuelle Umsatz kleiner als der Durchschnittsumsatz der letzten 30 Tage - 30 % und 0, in allen anderen Fällen.
If ( V < a2, 2, 0) ist also die Sonst-Anwort!! Sie liefert die noch offenen Ergebnisse eine 2 oder eine 0!
Aufpassen muß man dann nur, daß man keine Werte oder Klammern vergessen hat. Der Tai-Pan-Syntax-Prüfer wird uns allerdings alle Fehler exakt aufzeigen. Darauf ist dann schon ein bißchen zu achten. Es bleibt einem auch nichts weiter übrig, denn die Maschine bleibt einfach mit dem Fehlerhinweis stehen und wartet auf unsere Entscheidung.
Übersetzt bedeutet das folgendes: Ist der aktuelle Tagesumsatz größer als der Durchschnittsumsatz der letzten 30 Tage + 30%, dann ist a3 = 1 oder ist der aktuelle Tagesumsatz kleiner als der Durchschnittsumsatz der letzten 30 Tage - 30%, dann ist a3 = 2. In allen anderen Fällen ist a3 = 0;
Die beiden Zeilen bauen wir nun noch ein und ändern die Result-Anweisung.
Nun haben wir folgende Formel zusammengestellt: { Formel zur Berechnung des Durchschnitts-Volumens der letzten 30 Tage } debug a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage a2 := a1 - a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage - 30 % a3 := a1 + a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage + 30 % a4 := If ( V > a3, 1, If ( V < a2, 2, 0 )) ; Result := a4; {Das bisherige Result1 ist nun hinfällig. Wir haben es geändert. Result := 1; // nur als Alibi, weil es die Formelsprache Tai Pan verlangt. Später werden wir es ändern.} debug // und nochmals debug, damit wir das Programm bis zum Ende durchtesten können.
Die beiden debugs können nun erst einmal rausgenommen oder in {} gesetzt werden, damit das Programm durchläuft.
Dieser komplette Formeltext sollte nun in Euerer Formel stehen. Speichert die Formel ab. Und legt nun diese Formel als neuen Indikator in einem neuen Fenster im Chart ab. Es wird eine Linie sein, die für jeden Börsentag mit Umsätzen entweder den Wert 0, 1 oder 2 annimmt.
Damit haben wir den ersten großen Schritt hinter uns gebracht.
Weiter geht es dann: - Wir schauen uns den Debugger mal genauer an und verfolgen das Programm in Detail. - Wir setzen Parameter an Stelle der Festwerte ein. - Wir schreiben, ich nenne das, ein Signal-Sytem. - Wir erstellen den gewünschten Filter. - Wir gestalten die Filterergebnisliste. - Und zum Schluß gestalten wir dazu ein Layout, mit Chart, Signalsystem unseren neuen Indikator, und der Anzeige der Umsätze als Indikator.
Das ist das ganze Programm.
Grüße
|
|
Gruppen: Kunde
Beiträge: 38
|
Hallo Taxus,
Ich bin Begeistert wie Schulmeisterlich und trotzdem Verständlich Du uns die Materie nahe bringst.
Ein ganz Herzliches Dankeschön und nur weiter so, denn auch ich alter Knacker kann noch immer dazu lernen, vor allem wenn es einem so gut Erklärt wird.
Danke und Gruss
René
|
|
Gruppen: Kunde
Beiträge: 353
|
Ich kann mich dem Vorschreiber nur anschließen!
In den nächsten Tagen werde ich das gleich einmal ausprobieren.
|
|
Gruppen: Kunde
Beiträge: 11
|
Hall Taxus
Hut ab, dass ist besser als jedes Seminar - bin total begeistert und hoffe wir (Anfänger) können noch sehr viel von Dir lernen.
Hätte bereits noch ein paar Fragen, welche ich Dir jedoch gerne nach Beendigung dieser Lernreihe stellen möchte. Ich hoffe Du bist damit einverstanden ??!!
In diesem Sinne weiter so, im Namem aller die noch was lernen wollen.
Und ein dickes Dankeschön.
Gruss
juergi
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo zusammen,
heute wollen wir uns den Debugger mal anschaun. Dazu nehmen wir das bisher aufgeschriebene Programm. Aus dem Programm löschen wir alle Kommentare, denn mittlerweile wissen wir ja was das alles bedeutet, und wir wollen uns auf das Wesentliche konzentrieren.
In Euerem Formeleditor muß nun folgender Inhalt stehen: debug { Berechnung Durchschnitts Umsatz der letzten 30 Tage} a1 := Sum ( V , 30 ) / 30; // Berechnung der Durchschnittsvolumina über 30 Tage a2 := a1 - a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage - 30 % a3 := a1 + a1 * 30 / 100; // Durchschnittsumsatz der letzten 30 Tage + 30 % a4 := If ( V > a3, 1, If ( V < a2, 2, 0 )) ; Result := a4; debug
Eingefügt wurde ein "debug" am Beginn, damit wir jede Zeile debuggen können. Und am Ende wurde ein "debug" eingefügt. Und zwar deshalb, weil wir sonst den letzten Befehl nicht debuggen könnten. Denn nach diesem würde sich das Fenster "Formular-Debugger" schließen.
Nun speichern wir diese Formel unter dem bisherigen Namen ab. Jetzt wollen wir den Debugger ausprobieren. Wir legen uns einen DAX-Candle-Tages-Chart mit 200 Kursen an. Den speichern wir als Layout unter dem Layout-Namen "DUmsatz 30 Tage/30%" ab. Jetzt legen wir uns in einem 1. Indikator-Fenster den Umsatz rein und wählen dafür "VP" für das Handelsvolumen. Den Indikator finden wir in der Funktionszeile im 3. Ikon von links "Chart und Indikatoren auswählen", dann unter "Indikatoren" und markieren daneben "VP". Oben stellen wir "Neues Fenster" ein und gehen auf "ok".
Nun haben wir die Umsätze zur Kontrolle als Indikator drin.
Jetzt rufen wir wie eben unsere Formel für das Beispiel auf und legen uns wieder ein "Neues Fenster" an. Sobald wir auf "OK" gedrückt haben springt der "Formular-Debugger" auf.
Jetzt können wir uns den in aller Ruhe vornehmen.
|
|
Gruppen: Kunde
Beiträge: 371
|
Also nun zum Debugger.
Das Fenster "Formular-Debugger" wird nun nach bisheriger Voreinstellung geöffnet. Wir wollen uns auf eine gemeinsame Einstellung einigen.
Wir klicken deshalb in der Menüzeile auf "Ansicht" und markieren: - "Source" Das Fenster "Source" enthält unser Programm bzw. unsere Formel. - und "Variablen".
Das Fenster "Variablen" enthält alle von Tai Pan voreingestellten Variablen und natürlich die Variablen, die wir in unserem Programm verwenden. Standardmäßig wird das Fenster "Code" mit dem Programm-Code automatisch angezeigt.
Wir haben also 3 Fenster geöffnet: Code, Source und Variablen.
Es ist meist eine Gestaltung der Fensteranzeige zu empfehlen. Deshalb ziehen wir das vermeintlich inhaltsmäßig größte Fenster auf die linke Bildschirmseite. Es soll den ganzen Raum von oben bis unten im Fenster des "Formular-Debuggers", aber nur die halbe Bildschirmseite in der Breite einnehmen. Rechts daneben legen wir die Fenster "Code" und "Source" übereinander. Diese Einstellung merkt sich Tai Pan, und beim nächsten Debugger-Aufruf wird sie genau so wieder angezeigt werden.
Im Menü "Ansicht" finden wir, nur noch zur Information: Source Variablen Globale-Variablen Stack Function Class-Function Nachkommastellen Die zusätzlichen Fenster benötigen wir aktuell nicht.
Im Menü "Fenster" können wir die Fensterlage einstellen. Das benötigen wir hier nicht mehr, weil wir es bereits manuell erledigt haben.
Im Menü "Debug" können wir uns die Debug-Funktionstasten ansehen. Wir werden in aller Regel folgende Funktionstasten verwenden:
- Mit "F5" starten wir den Programmablauf ab der aktuellen Programmzeile. Der Debugger läuft dann entweder bis zum nächsten "debug" in unserem Programm oder bis zum Programm-Ende, wenn kein weiteres "debug" eingefügt wurde und wenn keine Fehler auftreten.
Wenn man eine Schleife prüfen möchte, muß man das "debug" außerhalb der Schleife positionieren. Mit "F5" würde der Debugger aber sofort die gesamte Schleife x-mal abarbeiten, wenn keine Fehler drin sind. Sind Fehler drin, dann hilft "F5" nicht.
- Mit "F8" können wir das Programm zeilenweise abarbeiten. Diese Funktion werden wir verwenden.
- Nur zur Information: "F7" ist für die Einzelschrittabarbeitung. Dazu muß aber zusätzlich das Fenster "Stack" für die Zwischenspeicher-Anzeige geöffnet bzw. mit angezeigt werden. Dann wird ein Befehl im Detail abgearbeitet. Das werden wir nur in den allerseltendsten und vor allem schwierigeren Fällen benötigen.
Die anderen Funktionstasten verwende ich kaum.
|
|
Gruppen: Kunde
Beiträge: 371
|
Jetzt arbeiten wir unser Programm im Debugger zeilenweise ab.
Wir klicken zunächst im Fenster "Code" auf die Zeile, die mit der Nr. 0 beginnt. Damit wird unsere erste Programmzeile "debug" markiert, wenn das vorher noch nicht der Fall war. Es ist allerdings nicht erforderlich. Aber manchmal ist die aktuelle Markierung verloren gegangen. Dann findet man sie in dem man halt auf die garantiert noch markierte "Code" - Zeile klickt.
Wir schauen uns als erstes gleich noch die Variablen - Liste an und zwar am besten Zeile für Zeile. Das dauert eine Weile, weil es viele Positionen sind, aber es lohnt sich für später. Denn mit der Zeit bekommen wir ein Gefühl, was wir dort alles erwarten und auffinden können.
Die Variablen-Liste lohnt es sich auch ein bissel zu gestalten. Die Informationen je Spalte sind doch sehr umfassend. Unser Bildschirm würde, um alle Informationen sehen zu können, den gesamten Platz nur noch für die Variablen - Liste benötigen. Weil wir die Liste aber nur auf der linken Bildschirmhälfte anzeigen wollen, verändern wir die Spaltenbreiten nach unserem Geschmack.
Wir kürzen die Spaltebreite für "Namen" und "Typ" und nehmen möglichst viel Breite bei "Wert".
Jetzt schauen wir uns der Reihe nach alle Zeilen an. Bei mir geht es von Nr. "0" bis "222". Mit einem Klick in die Zeile mit der Nr. "0" und dann mit der Pfeiltaste geht es Zeile um Zeile nach unten.
Das erste Mal bleiben wir bei "C" stehen. Das ist das Array der Close-Kurse. Wir klicken einfach einmal doppelt in die Zeile, und es wird uns das gesamte Array mit allen Close-Kursen angezeigt. In der Variablen-Listen lesen wir uns die gesamte Zeile durch.
Wir finden als - Variablen-Namen "C", - Variablen-Typ "Const Array" und - Variablen-Wert den 9104. Kurs am 23.03.2012 mit 6995.6200, aber nur wenn wir aktualisiert haben.
Wir gehen weiter bis zum "H" für High-Kurse, finden das "H" aber als Werteintragung "Nil". "Nil" bedeutet nicht vorhanden. Uns sagt es, daß Tai Pan die Close-Kurse automatisch bereitstellt. Die High-, Low- und Open-Kuse stellt es nicht automatisch bereit, egal ob sie im Programm vorkommen.
Das merken wir uns.
Gehen weiter zu "L" und "O" und finden es bestätigt.
Weiter geht´s zu "V" für die Umsätze.
Die Umsätze verwenden wir iin unserem Programm, also sind sie bereits von Tai Pan eingestellt.
Wir lesen in der Zeile: L, Const Array, und 9104 am 23.03.2012 mit 2737937.0000.
Bei "Volume", ein paar Zeilen tiefer, finden wir die gleichen Informationen.
Morgen geht´s weiter.
Grüße
|
|
Guest |