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