Freitag, 19. April 2024, 19:49 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

t2000

unregistriert

1

Mittwoch, 27. November 2002, 23:03

Globale Berechnung, Fehler oder Unwissenheit

Hallo,

ich habe 2 Anliegen.

Punkt 1)

ich habe folgenden Code:

Definitionen:

global calc MyEnterLong: (MorningDojiStar() and RSI(Close, 14) < 40);

global calc MyExitLong: (RSI(Close, 14)>70);

global calc MyEnterShort: (Baby_Bear() and RSI(Close, 14) > 50);

global calc MyExitShort: (RSI(Close, 14)<25);

global calc IsLong: Schalter(0,MyEnterLong,1,(MyExitLong or MyEnterShort),0);

global calc IsShort: Schalter(0,MyEnterShort,-1,(MyExitShort or MyEnterLong),0);

Unter EnterLong steht MyEnterLong usw.
Der Code ist stark verkürzt. Wäre sonst zu unübersichtlich. Aber vom Prinzig genau so.

sieht alles gut aus und macht auch keine Fehler. Trade Daten werden berechnet.

Wenn ich aber im Chart eine neue Formel einfüge:

#_loadglobal MyEnterLong#
MyEnterLong

diese funktioniert

#_loadglobal IsLong#
IsLong

und diese nicht mit folgendem Fehler:

Prozedur: Parameter-Überprüfung
Indikator: Or
Parameter: MYEXITLONG
Meldung: Unverständlicher Parameter: Datenreihe oder Unterberechnung erwartet

Lasse ich das "or" weg in "IsLong weg, dann kommt diese Meldung:

Prozedur: Parameter-Überprüfung
Vorgang: Klammerauswertung
Indikator: Schalter
Parameter: MYENTERLONG
Meldung: Unverständlicher Parameter: Datenreihe oder Unterberechnung erwartet

Die Funktion "IsLong" funktioniert aber, wenn ich sie unter bei der Handelssystemregel "EnterLong" einsetze.

Wo liegt das Problem ?

Punkt 2)
bezieht sich auf die Logik des oben beschriebenen Beispiels. Ich möchte eine Funktion "IsLong" haben.
Das Beispiel funktioniert solange, wie ich keinen Stopp habe. Nun ist aber ein Intrady-Trailingstopp vorhanden.
Ich wollte den etwa so nachbilden:

global calc MyStopp: If(MyEnterLong,
Schalter(0,(Close>MyStopp),Close,((Close+66)<MyStopp),0),
If(MyEnterShort, Schalter(0,(Close<MyStopp),Close,((Close-66)>MyStopp),0), 0));

Ziel ist es, in den Handelsregeln anders zu reagieren wenn ich in einem Trade drin bin. Dafür die Funktion IsLong und IsShort.

Der Fehler liegt wohl an der Zuweisung: (vereinfacht) calc MyStop: Close>MyStop; Also MyStop ist hier unbekannt, da es ja gerade erst deklariert wird.

Ein Schalter "merkt" sich ja einen Zustand. Ich möchte diesen Zustand auslesen und ändern.

also:
Schalter := Schalter + 1;
in etwa

Ein laufzeitabhängige Berechnung kann nicht funktionieren. Das ist mir klar. Ist ja kein Interpreter über die Zeit. Ich denke, das das Berechnungssystem mit EINEM Berechnungsdurchlauf an einer beliebigen Stelle(Zeit) angesetzt ein korrekte Berechnung durchführen muß.

Der Schalter muss demnach ein Sonderfall sein. Da er sich ja ein Zustand zu einer Zeit merkt.

Wie bekomme ich mein Problem in den Griff ?



Gruß
Thomas

Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 680

2

Donnerstag, 28. November 2002, 10:45

RE: Globale Berechnung, Fehler oder Unwissenheit

Hallo,
zu 1) kann ich sagen: es müssen auch alle globalen Variablen mit _LoadGlobal deklariert werden, welche in Unterberechnungen von der gewünschten globalen Variable verwendet werden (also auch MyExitLong und MyExitShort).
Viele Grüße
Andreas Knöpfel

t2000

unregistriert

3

Donnerstag, 28. November 2002, 10:51

RE: Globale Berechnung, Fehler oder Unwissenheit

Ja, das wird es wohl sein. Kann es aber erst heute Abend ausprobiern.
Gibt es zu 2) auch eine Möglichkeit ?

MfG
Thomas

Klaus Männlich

Fortgeschrittener

Registrierungsdatum: 2. September 2002

Beiträge: 143

Wohnort: Südfrankreich

4

Donnerstag, 28. November 2002, 13:45

Hallo Thomas,

mit der Schalter-Funktion von Investox wirst du Problem 2 nicht lösen. Dafür brauchtst du ValueWhen.

calc StopLong:
ValueWhen(Close, MyEnterLong = 1, 1, V) - 10;

liefert dir die StopLinie 10 tiefer als das Close zum Einstieg. Der Wert StopLong ändert sich erst bei einem neuen MyEnterLongSignal.

Einfach etwas rumprobieren um ein Gefühl für die Funktion zu bekommen.

Grüße
Klaus