RE: nochmal Trend im Radarscreen | |
Hallo, Hans!
Woran hat es gelegen? Es gab leider in der Konzeptfassung nicht den fertigen Programmcode, da ich nur Deine niedergeschriebenen Gedanken, mit eben diesen Worten wiedergegeben habe.
Da aber auch Dein Frage nach den Zeichenketten-Befehlen gestellt wird, vermute ich, das die Erfahrung mit EL erst ausgebaut wird.
Viele Hinweise auf einsetzbare Funktionen kanst Du unter dem Eintrag in der Menüleiste
Tools --> EasayLanguage Directonary finden.
In der Kategorie User Functions bekommst Du alle möglichen Funktionen angezeigt, die Du in den verschiedenen Programmen einsetzen kannst. Eine Rubrik ist überschrieben mit Text Manipulation, wo Du die von mir angesprochen BASIC-ähnlichen Befehle für die Textkettenverarbeitung (STRING) findest.
Ein PatternString, an dem das aktuelle Zeichen rechts steht, könnte also folgendermassen gebildet werde:
vars: newLetter(""), PatterStr(""), nLetter(0), maxLetter(4);
{....Anweisungen, die zum Setzen von newLetter führen, z.B.} if Close>close[1] then newLetter="+";
nLetter=StrLen(PatternStr);
if nLetter>maxLetter then PatterStr = RightStr(PatternStr,nLeter-1)+newLetter else PatterStr = PatternStr+newLetter;
Soviel zu Zeichenketten.
Doch leider hast Du Deine Probleme, bei der Umsetzung der Idee zum Programmm, nicht benannt, was eigentlich nur heute nicht weiter tragisch ist, da ich die die Nachmittagszeit nutzen kann, ganz weit auszuholen, selbst, wenn vieles bekannt sein dürfte.
Eine Bemerkung jedoch zuvor, die möglicherweise eine Ursache dafür sein kann, warum ein funktionsfähiges Programm im Radarscreen nicht die gewünschten Ergebnisse zeigt: Benötigt Dein "RadarScree"-Indikator mehr als den aktuellen Schlußkurs und seine Veränderung gegenüber dem vorherigen Kurs, um seine Aufgabe erfüllen zu können, so mußt Du den Indikator im RadarSreen (Format Indikator) oder gleich bei der Programmierung im EL-Fenster (Indicator Properties) über die Anwahl und dem Eintrag zu Load additional data for acummulative calculations die notwendige Anzahl mitteilen.
Hier ist der Eintrag 2 benutzt, so daß sich, im Beispiel, die Anzeige nur auf den aktuellen und die zwei vorherigen Einträge beziehen kann. Fehlt diese Angabe, wird der Indikatar nur dei Angaben liefern, die er aus dem aktuellen Bar beziehen kann und alle vorherigen Werte "vergessen" haben.
Für die folgende Programmfassung ist der Eintrag auf >2 zu setzen.
Doch nun zur Idee, die wegen der Verschachtelung der WENN-DANN-SONST-Anweisungen, als linguistisches Programm erstellt wird:
Wenn Schlußkurs größer als Schluskurs vor nBars, dann beginne folgenden BlockA abzuarbeiten bis zum Ende sonst Wenn Schlußkurs kleiner als Schluskurs vor nBars, dann beginne folgenden BlockB abzuarbeiten bis zum Ende sonst ( hier ist klar, daß Schlußkurs gleich dem Schlußkurs vorn-Bars ist) beginne folgenden BlockC abzuarbeiten bis zum Ende
Wenn aktuelles Zeichen rechts stehen soll, dann beginne älteste Ausgabe in Plot1,....,jüngste Ausgabe in Plot4 Ende sonst beginne jüngste Ausgabe in Plot1,....,älteste Ausgabe in Plot4 Ende
BEGIN BlockA Wenn Volumen größer als Volumen vor nBars, dann setze Formatierung UpUp sonst Wenn Volumen klein als Volumen vor nBars, dann setze Formatierung UpDn BlockA END
BEGIN BlockB Wenn Volumen größer als Volumen vor nBars, dann setze Formatierung DnUp sonst Wenn Volumen klein als Volumen vor nBars, dann setze Formatierung DnDn BlockB END
BEGIN BlockC setze Formatierung für gleichen Schlußkurs BlockC END
Das gewünschte Ergebnis sollte so aussehen:
Hier nun das Programm, was dieses Erscheinungsbild erstellt (nur der keine Zeit hat, liest hier vor eigenen Versuchen weiter ;-):.
inputs: LastRight(1), RefBack(1); { LastRight = 1 := juengstes Zeichen steht rechts LastRight = 0 := juengstes Zeichen steht links RefBack = n := Vergleich mit dem n.ten Bar vor dem aktuellen Bar }
vars: mark(" "), LastMark("[*]"), fColor(red), bColor(yellow); { Farbvorbelegung an Zentraler Stelle; fColor: Schriftfarbe bColor: Hintergrundfarbe .......Close Volume UpUp.....Up....Up UpDn.....Up....Dn DnDn.....Dn....Dn DnUp.....Dn....Up Eq.......Eq...... }
vars: fColorUpUp(darkgreen), bColorUpUp(yellow), MarkUpUp("+ +"); vars: fColorUpDn(black), bColorUpDn(LightGray), MarkUpDn("+ -"); vars: fColorDnDn(darkred), bColorDnDn(yellow), MarkDnDn("- -"); vars: fColorDnUp(red), bColorDnUp(Lightgray), MarkDnUp("- +"); vars: fColorEq(darkgray), bColorEq(white), MarkEq("=");
if Close>Close[RefBack] then begin {BEGIN BlockA} if Volume>Volume[RefBack] then begin Mark=MarkUpUp; fColor=fColorUpUp; bColor=bColorUpUp; end else if Volume begin Mark=MarkUpDn; fColor=fColorUpDn; bColor=bColorUpDn; end; {BlockA END} end else if Close {BEGIN BlockB} begin if Volume>Volume[RefBack] then begin Mark=MarkDnUp; fColor=fColorDnUp; bColor=bColorDnUp; end else if Volume begin Mark=MarkDnDn; fColor=fColorDnDn; bColor=bColorDnDn; end; end {BlockB END} else {BEGIN BlockC} begin Mark=MarkEq; fColor=fColorEq; bColor=bColorEq; end; {BlockC END}
if LastRight=1 then begin {für die Darstellung des aktuellen Zeichens rechts:} plot1(Mark[3],"M1",fcolor[3], bcolor[3]); plot2(Mark[2],"M2",fcolor[2], bcolor[2]); plot3(Mark[1],"M3",fcolor[1], bcolor[1]); plot4(Mark[0]+" "+LastMark,"M4",fcolor[0], bcolor[0]); end else begin {für die Darstellung des aktuellen Zeichens links:} plot1(LastMark+" "+Mark[0],"M1",fcolor[0], bcolor[3]); plot2(Mark[1],"M2",fcolor[0], bcolor[2]); plot3(Mark[2],"M3",fcolor[0], bcolor[1]); plot4(Mark[3],"M4",fcolor[0], bcolor[0]); end;
Im wesentlichen sollten sich die Teile des Programmes von selbst erklären.
Eine weitere Unterteilung der Farbgebungen für den Fall, daß die aufeinanderfolgenden Schlußkurse gleich sind (BlockC), wäre vorstellbar. Auch könnten die Symbole +, - und = ersetzt werden durch Zeichenfolgen UpUp, UpDn, DnDN.....
Darüber hinaus, nach der einübung in die Verbindung von Zeichenketten, kann der String natürlich auch vereinfacht nach den Gegebenheiten aufgebaut werden:
if Close>Close[1] then MarkC="+" else if Close else MarkC="=";
if Volume>Volume[1] then MarkV="+" else if Volume else MarkV="=";
Mark=MarkC+"/"+"MarkV;
Soviel zum Thema, in der Hoffnung, daß sehr viel Anregungen zum Weiterentdecken und Weiterversuchen von Entwicklungen gegeben wurden
Gruß Uwe
|