Hallo Walter,
es wundert mich nicht, daß Du mit dem in Deinem Eingangsthread vorgestellten Code für eine Listenformel bzw. der daraus resultierenden Fehlermeldung ein (Verständnis-)Problem hast, da aufgrund des absolut miesen und völlig unzureichenden Handbuchs zur Formelsprache (gemeint ist der "Flyer" mit dem hochtrabenden Namen "Referenzhandbuch" von L&P,
nicht das Programmierhandbuch von Taxus bzw. Steffen!!!) Dein gedanklicher Fehler nicht unmittelbar auf der Hand liegt!
Deswegen von meiner Seite nochmals ein paar - hoffentlich erhellende - Erklärungen zu Deinem Programmcode, den ich hier als Ausgangsbasis nochmals - mit Zeilennummern zur besseren Orientierung - anführen möchte:
1: _RSI := fRSI(14);
2: a := IF(_RSI < 30, 1, 0);
3: IF a = 30 THEN Sig := "Kaufen";
4: ELSE Sig := "Verkaufen";
Nun zu Deinem kleinen (Verständnis-)Problem:
Du gehst gedanklich davon aus, daß Du in Zeile 2 Deines Codes sowie in den weiteren, von Dir angeführten Codebeispielen eine IF-
Anweisung verwendest - in Wahrheit verwendest Du jedoch eine IF-
Funktion!
Der elementare Unterschied zwischen beiden:
Die IF-
Funktion dient zum Wertvergleich/zur Wertzuweisung für Arrays bzw. Arrayelemente (Listen bzw. Listenelemente; siehe schwarze Doppelpfeile in der unten angefügten Darstellung zur Erklärung und zum Aussehen Deiner Variablen a), eine IF-
Anweisung wird anders formuliert (IF ... THEN) und dient zum Wertvergleich/Wertzuweisung für Einzelwerte (z. B. Werte im roten Rahmen).
Deswegen erhältst Du auch die Fehlermeldung: "Boolean (= logischer Ausdruck) erwartet, aber Array erkannt" für Deine Codezeile Nummer 3.
Deine Variable a aus Zeile 2 ist, - entgegen Deiner Vermutung, wie aus der unten angefügten Darstellung allerdings klar hervorgeht -, kein Einzelwert bzw. eine einzelne Zahl, sondern ein Array - also eine "Liste".
Eine solche Liste von mehreren Werten kann man - wie von Dir in der Codezeile 3 gefordert - eben nicht mit einem einzelnen Wert (=30) vergleichen. Ebenso kann man eine Liste natürlich auch nicht in einer einzigen Spalte einer Liste darstellen, sondern eben nur Einzelwerte (roter Rahmen)
Steffen und Michael haben bereits versucht, dich darauf hinzuweisen und Michael hat Dir mit der Verwendung der Funktion LastValue() gezeigt, wie Du einen Einzelwertvergleich auf Basis des (letzten) Listenelements (des Listenelements von heute) durchführen und in der Spalte einer Tai Pan-Liste auswerten kannst (Werte im roten Kasten; Markierung roter Pfeil). Ein kleiner Nachteil von Michaels Erklärung ist, daß Du mit der Funktion LastValue() immer nur den letzten Wert einer Liste ansprechen kannst. Möchtest Du auch noch eine bestimmte Anzahl von Werten davor (z. B. die Werte von gestern oder vorgestern, jeweils in einer eigenen Spalte) signaltechnisch auswerten, so hilft Dir Die Ansprache über den Index weiter, welche Du mit der Funktion Count() realisieren kannst.
Die Funktion Count() zählt die Anzahl der vorhandenen (Kurs-)Werte bzw. (Indikator-)Werte eines Arrays => der Indexwert von "heute" entspricht Count(Kurs = z.B. Close), der Indexwert von gestern somit Count(Close -1) etc.
Codebeispiele von entsprechenden IF-Anweisungen sind für die letzten Tage (farblich mit Pfeilen in unterschiedlichen Braun-Tönen hervorgehoben) ebenfalls in der unten angefügten Darstellung ersichtlich.
Deine korrekte Listenformel für "heute" (eigene Spalte) sähe also so aus:
_RSI := fRSI(14);
IF _RSI[Count(_RSI)] < 30 THEN Sig := "Kaufen";
ELSE Sig := "Verkaufen";
Result := Sig;
Deine Listenformel für eine signaltechnische Auswertung von gestern (eigne Spalte) hätte folgendes Aussehen:
_RSI := fRSI(14);
IF _RSI[Count(_RSI) - 1] < 30 THEN Sig := "Kaufen";
ELSE Sig := "Verkaufen";
Result := Sig;
Eine beispielhafte Listenausgabe mit den beiden eben ausgeführten Listenformeln ist ebenfalls unten angefügt.
Sollen weitere Tage rückwärtig berücksichtigt bzw. ausgewertet werden, muß für jeden Tag der Auswertung eine neue Spalte angelegt, die bisherige Listenformel kopiert und die Zeile 2 der Listenformel entsprechend angepaßt werden.
Ich hoffe, Dir mit meinen Erklärungen weitergeholfen zu haben
Gruß
hound dog
hound dog hat die folgenden Bilder hochgeladen: