Einloggen Suche | Aktive Themen
Fehlermeldung bei IF Then Optionen
Walter
Geschrieben: Wednesday, December 25, 2013 9:04:10 PM
Gruppen: Kunde

Beiträge: 40

Tai-Pan End-of-Day
Hallo zusammen,

im Listenmodul gebe ich folgende Formel im Bereich "Listenformel" ein und es gibt immer eine Fehlermeldung, aber warum?

_RSI := fRSI(14);

a:= IF ( _RSI < 30,1,0);

If a = 1 Then

Sig := "Kaufen"

Else

Sig:= "Verkaufen"

Result := Sig



Walter hat die folgenden Bilder hochgeladen:
Fehler.jpg

Michael
Geschrieben: Thursday, December 26, 2013 10:34:30 AM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Hallo Walter,

mal ein Schnellschuß aus der Hüfte:

Die Variablenzuweisungen nach Then und Else müssen jeweils mit einem Semikolon abgeschlossen werden, also

Sig := "Kaufen";

Sig := "Verkaufen";


Michael

Walter
Geschrieben: Thursday, December 26, 2013 11:26:29 AM
Gruppen: Kunde

Beiträge: 40

Tai-Pan End-of-Day
Hallo Michael,

leider nicht, auch ein Komma, Semikolon oder Klammer helfen nicht, auch hatte ich bereits die 1 in True gewechselt.

Wenn ich die Fehlermeldungsangabe abzähle, dann liegt der Fehler zwischen der 1 und Then.

If a = 1 Then
Steffen Vohswinkel
Geschrieben: Thursday, December 26, 2013 6:53:48 PM

Gruppen: Kunde

Beiträge: 371

Tai-Pan End-of-Day
Hallo zusammen,

oben kann man gerade noch die Fehlermeldung erkennen:

"Boolean Ausdruck erwartet, aber Array erkannt."
Daran sollte es liegen.
Schau mal.

Warum möchtest Du das Ergebnis in einer Liste haben?

Frohe Weihnachten ins Forum.

Schöne Grüße aus Rio
Steffen
Michael
Geschrieben: Thursday, December 26, 2013 7:51:34 PM
Gruppen: Kunde

Beiträge: 104

Tai-Pan End-of-Day
Stimmt, das Semikolon macht das Kraut hier nicht fett.

Habe es eben nachgestellt, die gleiche Fehlermeldung erhalten und kann dir auch sagen, warum sie kam.

In einer Liste kann immer nur 1 Wert untersucht bzw. angezeigt werden.
_RSI ist aber eine Array-Variable, d.h. zu jedem Kursdatum wird der RSI berechnet.

Abhilfe kannst du schaffen, indem du nur den letzten (aktuellen) Wert des RSI heranziehst.
Packe einfach den fRSI(14) in eine Klammer und setze LastValue davor.
Etwa so:

_RSI := LastValue(fRSI(14));

a:= IF ( _RSI < 30,1,0);

If a = 1 Then

Sig := "Kaufen"

Else

Sig:= "Verkaufen"

Result := Sig


Zitat:
Wenn ich die Fehlermeldungsangabe abzähle, dann liegt der Fehler zwischen der 1 und Then.

If a = 1 Then

Bei einer fehlerhaften Formel springt der Cursor genau an die Stelle, an der der Fehler auftritt, wenn man auf den Testknopf gedrückt hat.
Zählen muß man nicht unbedingt... wink


Michael
Walter
Geschrieben: Thursday, December 26, 2013 8:58:10 PM
Gruppen: Kunde

Beiträge: 40

Tai-Pan End-of-Day
Smile/ passt,

VIELEN Dank Michael, die Idee hatte ich noch nicht, dachte es wird immer der letzte Wert zugeordnet

Steffen,
anstelle des RSI kann ja auch ein Handelssystem stehen


Walter hat die folgenden Bilder hochgeladen:
Liste.jpg

Steffen Vohswinkel
Geschrieben: Friday, December 27, 2013 2:10:26 PM

Gruppen: Kunde

Beiträge: 371

Tai-Pan End-of-Day
Hallo Walter,

Du könntest auch eine Liste mit n Spalten aufbauen, wobei jede Spalte einem Kurs zugeordnet wäre,
also z.B. die letzten 10 Kurse. Damit die Spalten nur ein Zeichen breit werden, könntest Du nur Einzelbuchstaben oder z.B. Pfeile verwenden.

Für so eine Übung empfehle ich zuerst das Signalmodul zu nutzen, weil Du dann nämlich sehen würdest welche Signale überhaupt angezeigt werden. Es sind eine Vielzahl statt der wichtigen Ausnahmen. Deine so erzeugten Signale "Verkaufen" und "Kaufen" treten bei dieser Wahl permanent auf, und sie haben mit echten Signalen bis auf die tatsächlichen Ausnahmen rein gar nichts zu tun. Denn bei jedem RSI-Kurs, der über 30 liegt, wird ein Verkaufssignal und bei jedem der unter 30 liegt wird ein Kaufsignal erzeugt.

Die sind aber allesamt nicht brauchbar.
Wenn der RSI in die Überkauft- bzw. Überverkauftzone eintritt, dann sind das in aller Regel noch lange keine Handelssignale, und ich meine auch für Daytrader nicht.

Schöne Grüß0e aus Rio
Steffen
Walter
Geschrieben: Friday, December 27, 2013 4:43:20 PM
Gruppen: Kunde

Beiträge: 40

Tai-Pan End-of-Day
Hallo Steffen,

wie oben geschrieben könnte auch ein Handelssystem dargestellt werden. Aber die IF Anweisung macht weiterhin mir Probleme, auch dein großes Programmierhandbuch konnte mir noch nicht weiterhelfen, Beschreibung folgt. Im Signalmodul habe ich die einzelnen Strategien bereits realisiert.
Hier im Tagebuch sind die einzelnen Strategien mit A oder P usw. gekennzeichnet.


Walter hat die folgenden Bilder hochgeladen:
Tagebuch.jpg

Walter
Geschrieben: Friday, December 27, 2013 5:02:35 PM
Gruppen: Kunde

Beiträge: 40

Tai-Pan End-of-Day
IF Anweisung:

Wenn ich wie oben mit dem RSI beschrieben und dann LastValue einfüge bekomme ich bei der Abfrage _RSI:= If (lastValue(fRSI(70),1,0) als Ergbnis eine 1 und alle weiteren Abfragen mit _RSI funktionieren. Aber wenn ich a:= If(close >ref(close,-1),1,0) eingebe, dann steht für die Variable a = 1,00 und es gibt die bekannte Fehlermeldung. Auch mit z.B. lastvalue(ref(close,-1))
Es erscheint auch eine Fehlermeldung wenn ich schreibe:
a:Integer:= IF( lastValue(...... > lastValue(ref ....

???
Ich habe keine Idee mehr und wäre für eine weitere Hilfe Dankbar.
Steffen Vohswinkel
Geschrieben: Friday, December 27, 2013 5:31:59 PM

Gruppen: Kunde

Beiträge: 371

Tai-Pan End-of-Day
Hallo Walter,

Deine Bilder sind kaum lesbar.
Es handelt sich um den gleichen Fehler, wie oben. Du vergleichst ein Array, das ist der Close, mit einem Einzelwert. Es müssen aber Einzelwerte verglichen werden. Wenn Du ein debug in Deine Formel einbaust, kannst Du besser nachschaun und kommst schnell dahinter. Es ist besser nicht zu lange zu probieren und schneller nachzufragen. Das hilft Dir und allen anderen, und wir kommen schneller zu Lösungen.

Schöne Grüße aus Rio
Steffen
hound dog
Geschrieben: Friday, February 7, 2014 1:51:53 PM
Gruppen: Kunde

Beiträge: 30

Tai-Pan RealtimeTai-Pan End-of-Day
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:
IF- Unterschied Funktion und Anweisung.png
Beispiel Listenauswertung.png

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