Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
Ich brauche eine Art Schleife oder Zähler, welcher bei Cross der GD´s auf "1" gesetzt wird. Sobald das Tageshoch des Cross-Tages überschritten wird, wird ein Trade ausgeführt und der Zähler zählt zurück auf "0".
Ein fehlendes Ref(,-1) ist es nicht.
Global Calc GD_Fast: Komp(#GD(Close, 7, S)#,#T#);
Global Calc GD_Slow: Komp(#GD(Close, 26, S)#,#T#);
Ref(GD_Fast, -1) > Ref(GD_Slow, -1) and
Ref(High, -1) > BedEnterLong;
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Lenzelott« (14. Januar 2011, 21:34)
Das hilft leider nicht, weil es sein kann, dass das High des Crosstages am Folgetag überschritten wird und der Kurs dann direkt durch den GD_Slow ausgestoppt wird. Am nächsten Tag hat kein Cross der GD´s stattgefunden. Aber es kann wiederrum sein, das das ursprüngliche High des Crosstages wieder überschritten wird und somit wieder ein Trade ausgeführt werden würde. Es soll aber nur ein Trade nach dem Cross ausgeführt werden.Wenn nur eine bestimmte Anzahl Trades am Tag ausgeführt werden sollen (z.B. nur ein Trade) kannst Du das doch einfach in den Testbedingungen einstellen. Hilft das in Deinem Fall nicht?
Auch darüber habe ich nachgedacht. Nur wie bekomme ich die Bedingungen so definiert, dass sie die Aufgabe richtig erfüllen?Ansonsten, alter Falter ... ist das ein Fall für Schalter() {reim dich oder ich fress dich } :
Davon abgesehen, Du brauchst aber 100pro Ref -1 in den Komp's, wie von Lenzelott schon angemerkt. Die Basis Komprimierung scheint mir auf 15 Minuten zu sein, während Du da Tages-Perioden reinkomprimierst. Wenn Du's nicht machst, merkst Du im Backtest erstmal nix. Nur life werden Dir die Signale nur so um die Ohren fliegen.
Bei 1. Bedingung könnte ich nun abfragen, ob Ref(CrossLong, -1) = 1 ist. Damit wüßte ich, ob der Cross genau in der Vorperiode stattgefunden hat.
Ein fehlendes Ref(,-1) ist es nicht.
Da wäre ich mir nicht so sicher an Deiner Stelle!
Wenn Du sowas im Intraday System verwendest:
Global Calc GD_Fast: Komp(#GD(Close, 7, S)#,#T#);
Global Calc GD_Slow: Komp(#GD(Close, 26, S)#,#T#);
hast Du eigentlich immer ein Zukunftsblick, da die KOMP bereits in der 1. Periode des Tages den Endwert des Tages liefert.
Ref(GD_Fast, -1) > Ref(GD_Slow, -1) and
hier versetzt Du einen Wert der in der 1. Periode des tages bereits den tagesentwert annimmt um eine Periode nach hinten.
Das Ref(-1) kannst Du Dir zb. sparen.
Ref(High, -1) > BedEnterLong;
Und das hier kann zu den zigdusig Trades führen in Folge.
High ist den ganzen Tag größer als BedEnterLong, weil der letzte Cross zb. schon ne Woche her ist und seitdem der Markt gestiegen ist.
Dein Exit greift auch sofort (warum auch immer), deswegen sofort wieder enter.
Bei 1. Bedingung könnte ich nun abfragen, ob Ref(CrossLong, -1) = 1 ist. Damit wüßte ich, ob der Cross genau in der Vorperiode stattgefunden hat.
Ja nee. Du erfährst nicht, ob der Cross in der Vorperiode stattgefunden hat, sondern, ob er überhaupt stattgefunden hat. Der Witz von Schalter ist doch, dass der nach Zutreffen von Bedingung 1 in jeder weiteren Periode den Wert 1 liefert, nicht nur in der nächsten Periode. Und zwar solange, bis Bedingung 2 wahr wird. Dann liefert er in jeder weiteren Periode den Wert 2. Solange bis wieder Bedingung 1 wahr wird. usw.
Global Calc GD_Fast: Ref(Komp(#GD(Close, 7, S)#,#T#), -1);
Global Calc GD_Slow: Ref(Komp(#GD(Close, 26, S)#,#T#), -1);
So korrekt?
Global Calc GD_Fast: Ref(Komp(#GD(Close, 7, S)#,#T#), -1);
Global Calc GD_Slow: Ref(Komp(#GD(Close, 26, S)#,#T#), -1);
So korrekt?
Verkehrt. Das Ref(,-1) muss in Komp() rein, nicht aussen rum. Also:
Global Calc GD_Fast: Komp(# Ref( GD(Close, 7, S), -1)#,#T#);
Global Calc GD_Slow: Komp(# Ref( GD(Close, 26, S), -1)#,#T#);
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Global Calc GD_Fast: Komp(#Ref(GD(Close, 7, S),-1)#,#T#); Global Calc GD_Slow: Komp(#Ref(GD(Close, 26, S),-1)#,#T#); Global Calc EnterLongLevel: ValueWhen(Komp(#Ref(High,-1)#,#T#), Cross(GD_Fast, GD_Slow, 1) = 1, 1, V); Global Calc EnterShortLevel: ValueWhen(Komp(#Ref(Low,-1)#,#T#), Cross(GD_Fast, GD_Slow, 1) = -1, 1, V); // Für die Enterbasis in den Testbedingungen global calc ebl:MAX(open,enterlonglevel)+#_MinPriceChange#; global calc ebs:MIN(open,entershortlevel)-#_MinPriceChange#; global calc enterlong:Cross(high, EnterLongLevel, 1)=1 and gd_fast>gd_slow; global calc entershort:Cross(low, EnterShortLevel, 1)=-1 and gd_fast<gd_slow; |
damit EnterBasisShort: 116,64
In der Tradeabrechnung steht als Einstiegspreis aber 116,65.
Obwohl das EnterLongLevel bereits zum Tagesopen erreicht war, wurde der Trade erst später ausgeführt.