Mittwoch, 17. April 2024, 00:12 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

1

Sonntag, 23. März 2008, 18:14

Datenfeed-Simulation mit VB: keine Orders geroutet

Hallo,

zur Zeit durchlebe ich die Leiden der Datenfeed-Simulation mit Investox. Nachdem die Umsetzung meines Systems in die Datenfeed-Simulation mit Tageskomprimierung nicht geklappt hat, versuche ich die Umsetzung nun mit 5-Minuten-Komprimierung.

Das Problem ist hierbei, dass Projektfenster und Chart die korrekte (Long-)Position anzeigen, dass aber keine Signale zum Virtuellen Broker geroutet werden.

Einen Hinweis auf das Problem liefert wohl das Signalprotokoll: dort taucht nur ein "Hold Long" Signal auf, kein Enter Long. Ich verstehe aber nicht, wie ein "Hold Long" ohne vorheriges "Enter Long" generiert werden kann.

Hat einer von Euch damit Erfahrung und kann mir einen Hinweis auf mögliche Ursachen dieses Problems geben?

Ostergrüße
Cornelius

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

2

Sonntag, 23. März 2008, 19:54

Hallo Cornelius

Ich denke, man muss dazu noch weitere Einzelheiten erfahren. Etwa diese:

* handelt Dein System mit unvollendeten Periode,
* was ist das Delay, welches Du beim Enter eingestellt hast (0 oder 1 oder was)
* handelst Du zum Open, zum Close oder zu einer selbst gerechneten Basis
* ist eine Handelszeitbeschränkung eingstellt
* wird die Signalverzögerung zu Systemzeit überwacht
Gruss
Bernd

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

3

Sonntag, 23. März 2008, 21:09

Hallo Bernd,

danke für Deine Antwort.

Das System läuft mit einem BT in 5-Minuten-Komprimierung und ich habe unter Handelssystem einstellen/Aktualisierung die Option "Signale auch bei unvollendeten Perioden" angehakt. (Ich glaube, das ist für dieses System aber nicht erforderlich.)

Enter Delay ist 0, Enter Basis ist selbst gerechnet ("EntryLevelLong"). EntryLevelLong ist der Triggerlevel, der durch das High überschritten werden muss (Enter Long Regel) und dann eine Order auslösen soll.

Eine Handelszeitbeschränkung ist nicht eingestellt und der Datenfeed wird nicht überwacht (ist ja im Moment eine Datenfeed-Simulation).

Viele Grüße
Cornelius

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

4

Sonntag, 23. März 2008, 21:26

Zitat

Enter Delay ist 0, Enter Basis ist selbst gerechnet ("EntryLevelLong"). EntryLevelLong ist der Triggerlevel, der durch das High überschritten werden muss (Enter Long Regel) und dann eine Order auslösen soll.


Hallo Cornelius,

hier könnte der Fehler liegen! Meistens (nicht immer) blickt eine Formel an einer Stelle in die Zukunft wenn HOLD LONG kommt und vorher Enter Long ausgegeben wird!
Happy Trading

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

5

Montag, 24. März 2008, 09:09

Hallo,

zur Berechnung von EntryLevelLong steht unter Definitionen folgendes:

global calc GDfast: Komp(#GD(LastDP(close),7,S)#, #T#);
global calc GDslow: Komp(#GD(LastDP(close),26,S)#, #T#);

(Ich hatte auch einmal

global calc GDfast: Komp(#Ref(GD(close,7,S), -1)#, #T#);
global calc GDslow: Komp(#Ref(GD(close,26,S), -1)#, #T#);

ausprobiert, das war das gleiche.)

global calc EntryLevelLong: ValueWhen(LastDP(high), Cross(GDfast, GDslow,1) = 1, 1, V);

Das schaut doch nicht in die Zukunft, oder?

In der Enter Long Regel steht dann

High > EntryLevelLong.

Da EntryLevelLong aus der Vergangenheit bestimmt wird, dachte ich, dass das mit Enter Delay 0 geht.

Könnte da ein Problem liegen?

Viele Grüße
Cornelius

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

6

Montag, 24. März 2008, 09:37

Hallo cornelius,

ich kann auch keine Fehler in der Formel (zeitbezogen) erkennen! Nur wenn HOLD LONG im Protokoll steht, gab es irgendwann auch ein ENTER LONG. Wenn das unterschlagen wird, datiert Investox normalerweise das Signal auf eine Periode zurück-das heißt: Das Signal wäre mit Hold LONG nicht handelbar, weil es vor einer Periode generiert wurde!Vielleicht kommt man weiter wenn man die Infos zu den Einstellungen zum System so wie die Einstellungen des virtuellen Brokers näher kennt! Du kannst auch die betroffenen Signalphase gezielt über die Simulation laufen lassen und beobachten, wie sich Investox verhält und was überhaupt berechnet wird! Am besten lässt man die Signalgeber in den Teilcharts mit laufen und beobachtet, wie sie an der Signalstelle sich bewegen. Meistens kommt man damit am ehesten vorwärts! Berechne auch hier die Perioden nicht zu knapp und gib acht darauf,welche Perioden Du begrenzt-wenn gleich ich nicht glaube das es in dem Fall daran liegt...
Happy Trading

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

7

Montag, 24. März 2008, 09:44

Hallo Cornelius

Doch, das ganze schielt aber heftig in die Zukunft! Da unvollendete Perioden aktiv sind, steht am Anfang einer Periode nur Open fest, dagegen: Close, High, Low ändern sich natürlich mit jedem Tick. Jeder neue Tick ist nämlich sozusagen vorerst das Ende dieser Periode.

Für den Entry (Deine Enter Long Regel) ist das ok, wenn man es so gewollt hat! Aber nicht für die Bezugspunkte, auf die sich das Entry bezieht. Die musst Du stabil kriegen mit Ref( , -1), also etwa so:
global calc GDfast: Komp(#GD(LastDP(Ref( close, -1)),7,S)#, #T#); // Wobei ich nicht gecheckt habe, ob die GDFast Formel so ok ist, soll nur das Prinzip zeigen.

Dazu sollte in diesem Fall die Signalumsetzung auf 1 Signal pro Periode begrenzt werden (weil sonst wären die Signale zwar ok, aber stimmen nicht mehr mit dem Backtest überein, was ich auch sehr verwirrend fände! Sollen mehrere Signale innerhalb 5 Minuten geroutet werden, empfehle ich eher auf 1 Minuten Grundkompression zu gehen statt mehrere Signale pro 5 Min. Periode zu zulassen).

Wenn nämlich Bezugspunkt und Entry sich in der laufenden Periode ändern, ist das Ergebnis nicht stabil und es passieren so komische Sachen wie von Dir beschrieben. Nicht nur mit dem VB, auch beim echten Trading :D
Gruss
Bernd

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

8

Montag, 24. März 2008, 09:57

Hallo Bernd,

LastDp hat REF-1 schon "eingebaut"-das heißt es wird automatisch der Letzte Kurs von C_O_H_L ausgewertet (REF-1)!Das gleiche Ergebnis erzielt man mit der zweiten Formel (KOMP-REF-1), die Cornelius vorgestellt hat!

Dazufolgendes aus der Investox Hilfe:

Letzter Kurs auf Tagesbasis
Berechnet den letzten Kurs eines Preisfeldes am vorigen Tag auf täglicher Basis.

Der Indikator LastDP (Last Daily Price) ist nur für Intraday-Systeme und Intraday-Charts von Interesse. Dort lässt er sich zum Beispiel zur Berechnung von Pivotpunkten einsetzen.

Als Preisfeld können wahlweise Open, High, Low, Close, Volume oder Open Interest angegeben werden. Wenn das Preisfeld in der Basisreihe vorhanden ist, berechnet der Indikator das angegebene Preisfeld auf täglicher Basis und liefert den entsprechenden Wert für den vorigen Tag.Für Open, High und Low werden Schlusskurse verwendet, wenn die jeweiligen Preisfelder in der Basisreihe in der aktuellen Komprimierung nicht zur Verfügun
g
Happy Trading

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

9

Montag, 24. März 2008, 10:13

Hallo Udo

Ja, da hast Du natürlich recht. LastDP hat das eigentlich eingebaut. Jetzt, wo Du es sagst :rolleyes:
Merkwürdig ist, dass sich das System von Cornelius so verhält, als ob irgendwo noch ein "freilaufender" Close / High / Low herum schwirrt!


@Cornelius

Ich nehme an, Du hast den VB nicht nur durchlaufen lassen, sondern aktiv beobachtet? Ich positioniere in solchen Fällen den Feed immer bis kurz vor das vermutete Problem und lasse laufen. Nun beobachte ich den Chart und habe für alle Fälle "Akustische Signale ausgeben" eingeschaltet. Tritt nun ein Signal auf, halte ich die Aktualisierung an und notiere die genaue Tickzeit. Danach lasse ich weiterlaufen, bis das Signal wieder "verschwindet". Nun halte ich wieder an und sehe mich um (Tickzeit, Chart) - bisher hatte ich dann noch immer die "Eingebung" wo das Problem liegt ;(
Gruss
Bernd

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

10

Montag, 24. März 2008, 11:10

Hallo,

danke für Euere Hinweise!

Bisher habe ich die Simulation immer blockweise mit 12 oder 24 Perioden durchlaufen lassen, damit es schneller geht. Ich schaue es mir jetzt nochmal Candle für Candle an.

Könnte ein evtl. Vorausschauen auch an einem Stop liegen? (Da habe ich auf den ersten Blick aber auch nichts Kritisches bemerkt.)

Grüße
Cornelius

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

11

Montag, 24. März 2008, 11:24

Hallo Cornelius,

wenn ein Stopp, dann oft ein Intraday-Stopp! Es kommt darauf an, ob HOLD LONG nach einem Stopp auftritt oder ob System vorher über mehrere Perioden nicht investiert war- oder ob ein Wechsel von EXIT-ENTER stattfand (u.a. direkter Wechsel in der Periode)! Jeder Stopp,außer der Sofort Stopp, benötigt eine Periode Anlauf und beim Intaday-Stopp kann man die Prioität ab INV-V5 einstellen!
Happy Trading

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

12

Montag, 24. März 2008, 11:34

Dann liegt es nicht an Stopps: System war vorher viele Perioden nicht investiert, und einen Intraday-Stopp gibt es nicht.

Also, ich simuliere jetzt mal candleweise.

Grüße
Cornelius

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

13

Montag, 24. März 2008, 12:39

Hallo,

ich habe jetzt eine Reihe candleweiser Simulationen durchlaufen lassen. Dabei habe ich festgestellt, dass

global calc GDfast: Komp(#GD(LastDP(close),7,S)#, #T#);
global calc GDslow: Komp(#GD(LastDP(close),26,S)#, #T#);

nicht das gleiche ist wie

global calc GDfast: Komp(#Ref(GD(close,7,S), -1)#, #T#);
global calc GDslow: Komp(#Ref(GD(close,26,S), -1)#, #T#);

Letzteres schaut wohl in die Zukunft!

Ich habe jetzt bei mehreren Durchläufen hintereinander Enter Orders zum VB geroutet bekommen. Mein neues Problem ist nun, dass ich nicht weiß warum.

Es funktioniert jetzt mit beiden obigen Formulierungen. Ich hatte einen Pyramidierungsstopp rausgenommen (der aber an der simulierten Stelle nicht greift), dann hat es geklappt. Habe den Pyramidierungsstopp wieder zugeschaltet, klappt immer noch. Habe die Simulationsläufe mit verschieden weiten Abständen vor dem Enter gestartet, klappt so oder so. :?: :?: :?:

Viele Grüße
Cornelius

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

14

Montag, 24. März 2008, 12:54

Hallo,

ich glaube, der Unterschied, welcher nun zum Routing der Orders führt, ist, dass ich jetzt die Simulationen Periode für Periode habe durchlaufen lassen. Vorher hatte ich pro Aktualisierung 12 oder 24 oder mehr Perioden (also eine oder mehr Stunden) fortschreiben lassen.

Ich vermute, dabei ist etwas schiefgelaufen und man muss tatsächlich jede einzelne Periode fortschreiben lassen.

Habt Ihr damit Erfahrungen? Kann es daran liegen?

Viele Grüße
Cornelius