Dienstag, 16. April 2024, 21:03 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

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.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

1

Donnerstag, 7. August 2008, 09:36

Realisierung eines Stop Entry Systems in Investox

Guten Tag liebe Investox-Gemeinde!

Seit einiger Zeit versuche ich, ein Stop Entry System in Investox zu realisieren. Dies ist mir bisher leider nicht gelungen (trotz freundlicher Lösungshinweise von Hr. Knöpfel). Daher bitte ich Euch um Eure Hilfe und habe zur Illustration und zum Ausprobieren von Lösungsvorschlägen ein Testsystem angehängt. Wenn die Realisierung damit im Datenfeed-Test gelingt, würde ich es als Lösungsvorschlag in die Datenbank hochladen. Dieses Thema ist ja durchaus praktisch relevant, z.B. für die Umsetzung des von Joachim beim Investox-Usertreffen vorgestellten FESX-Systems.

Zur Problemstellung:

In einem Stop Entry System wird das Enter Signal in zwei Bestandteile zerlegt: 1. setup und 2. enterlevel.

Ziel ist es, dass bei Erfüllung der setup-Bedingungen eine Stop Buy bzw. Stop Sell Order in den Markt gelegt wird, die im Orderbuch möglichst weit oben steht und daher mit möglichst geringer Slippage bei Erreichen des Stopkurses (= enterlevel bzw. enterlevel +/- 1 Tick) ausgeführt wird.

In Investox wird das setup als Enter Long bzw. Enter Short Regel definiert. Dabei gibt es keine besonderen Probleme. Im beigefügten Testprojekt ist das setup ganz einfach so formuliert, dass es häufig Signale generiert.

Das Testsystem ist nur für die Long-Seite formuliert. Bei Vorliegen des setup soll Investox dann eine Stop Buy Order zu enterlevel + 1 Tick routen.

Problematisch ist die Umsetzung des Exits und der Verluststopps. Denn bei dieser Umsetzung geht Investox davon aus, dass ab Erfüllung der setup-Bedingung eines Position besteht. Daher werden die Exit-Bedingung und die Verluststopps ab dem setup-Zeitpunkt scharfgeschaltet, obwohl dann i.d.R. noch gar keine Position besteht, sondern nur die Stop Order in den Markt gelegt ist.

Dies bedeutet, dass z.B. ein Verluststop ausgelöst werden kann, bevor eine Position tatsächlich eröffnet wurde. Dann hat man ungewollt z.B. eine Short Position ohne irgendeine Stop-Absicherung.

Die Aufgabe besteht also darin, Exit und Verluststopps so zu formulieren, dass sie erst ab tatsächlicher Positionseröffnung wirksam werden.

Im Testsystem habe ich zum Ausprobieren drei Verluststopps definiert (davon einer, der nur vier Perioden ab Positionseröffnung laufen soll), die aber alle nicht funktionieren.

Mein Ansatz war, die Position über #_Depot_Pos# <> 0 (globale Variable AktPosition) abzufragen. Dies veranlasst allerdings die Fehlermeldung, dass die Bedingung mindestens einmal erfüllt sein muss. Dieses Problem konnte ich trotz eines Hinweises von Hr. Knöpfel nicht umgehen.

So, jetzt hoffe ich auf Eure Kreativität!

Viele Grüße
Cornelius
»cnolte« hat folgende Datei angehängt:

Peratron

unregistriert

2

Donnerstag, 7. August 2008, 10:32

Zitat

Die Aufgabe besteht also darin, Exit und Verluststopps so zu formulieren, dass sie erst ab tatsächlicher Positionseröffnung wirksam werden.


Hallo,
Damit die Position eröffnet wird muss ja ein bestimmtes Level erreicht werden. Frag doch einfach dieses Level ab
und gib dieses als Zusatzbedingung in Deine Exit und Verluststopps. Sofern dieses Level nicht erreicht wird ist noch
keine Position eröffnet, sobald es erreicht wird besteht eine Position und die Zusatzbedingung aktiviert Deine Exit
und Verluststopps.


Grüße Peratron

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

3

Donnerstag, 7. August 2008, 11:49

Hallo Peratron,

man braucht dann wohl

HHV( high, x) = enterlevel + 1 Tick mit x = Perioden seit Vorliegen des setup,

und um zu dem x zu kommen braucht man wohl irgendwie "ValueWhen()"?

Der Ablauf im Datenfeed ist ja:

1. setup Bedingung erfüllt -> Investox unterstellt eine Position und beginnt, die Zusatzbedingung für Exit/Verluststopp zu prüfen

2. wenn die Position aber tatsächlich noch nicht besteht und die Zusatzbedingung fragt #_Depot_Pos# <> 0 ab oder den Kurs wie oben dargestellt unter Einsatz von ValueWhen(), dann kommt die Fehlermeldung, dass die Bedingung mindestens einmal erfüllt sein muss - was sie aber nicht ist, da ja die Position tatsächlich noch nicht eröffnet ist

3. das führte dann (bei meinen Tests) dazu, dass entweder das System nicht aktiviert wird (graue Leiste über Zeitachse) oder der entsprechende Verluststopp ignoriert wird.

Oder hattest Du eine andere Lösung im Sinn?

Viele Grüße
Cornelius

Peratron

unregistriert

4

Donnerstag, 7. August 2008, 13:37

Hallo!

Wenn das Low oder das High das Enterlevel erreicht, wird ein Signal generiert, oder?
Hier brauch man dann doch nur unter den Stops die Abfrage High bzw. Low = Enterlevel
unter Zusatzbedingung eintragen und der Stop wird erst aktiv sobald das High bzw.
Low das Enterlevel erreicht hat, und eine Position eröffnet wurde. Grüße Peratron

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

5

Donnerstag, 7. August 2008, 15:02

Nur um Missverständnisse auszuräumen:

es geht Dir darum, dass die Sicherheitsstops von ORM geroutet werden bevor die Stop Enter Order gefillt ist ?

Oder darum, dass normale Stops in Investox aktiv sind, weil Investox denkt, dass bereits im Markt ist?
If you think it´s expensive to hire a professional, wait until you hire an amateur.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

6

Donnerstag, 7. August 2008, 18:46

@Lenzelott

Letzteres, Joachim: Investox denkt, mit dem setup = Enter Signal wäre die Position eröffnet und schaltet damit Exit Regeln und Verluststopps scharf.


@Peratron

In Pseudocode müßte die Zusatzbedingung des Stopps gemäß Deinem Vorschlag lauten:

Höchstes Hoch seit letztem setup größer gleich enterlevel.

Denkst Du da an etwas wie

HHV( high, BarsSince( setup, 1) ) >= enterlevel ?


Viele Grüße
Cornelius

Peratron

unregistriert

7

Donnerstag, 7. August 2008, 19:24

Hi!
am einfachsten wäre doch

High >= Enterlevel

hier müsste aber die Abfrage auf Tickdaten erfolgen und unvollendete Perioden aktiv sein.
Somit wären die Stops sofort aktiv sobald die Position eingegangen wurde. Grüße Peratron

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

8

Donnerstag, 7. August 2008, 19:37

Hallo Peratron!

high >= enterlevel prüft ja nur für den aktuellen Balken.

Wenn eine Position eröffnet wurde und die Balken mit ihren highs danach wieder unter enterlevel absinken, ist diese Zusatzbedingung nicht erfüllt und der Stopp also nicht aktiv. Für einen Verluststopp wäre das schlecht (bei einem Gewinnstopp bzw. Kurstrailer oberhalb von enterlevel ginge es).

Viele Grüße
Cornelius

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cnolte« (7. August 2008, 20:09)


Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

9

Donnerstag, 7. August 2008, 20:41

Ich habe mal ein eigenes Demoprojekt gebastelt.

Kann die Fehlermeldungen nicht nachvollziehen.
Im Stop Frage ich die Depotpos ab und dann ist er aktiv oder nicht, bekomme da keine Fehlermeldung; funktioniert genau so wie es soll.

Selbst wenn dem nicht so wäre, darf das von Dir beschriebene Problem eigentlich trotzdem nicht auftreten.
Man hat eine nicht gefillte Order im Orderbuch stehen und das Depot ist leer.
Wenn IV jetzt einen Exit generiert, prüft Investox ob es die Order aus dem Depot heraus erfüllen kann und routet oder nicht.

Im Logbuch müßte dann auftauchen:

Zitat

Exit Order wurde nicht aufgegeben
If you think it´s expensive to hire a professional, wait until you hire an amateur.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

10

Donnerstag, 7. August 2008, 20:56

Hallo Joachim,

hast Du die Funktion im Datenfeed getestet und es kam keine Fehlermeldung und der Stopp war aktiv?

Bei mir kam es mal vor, dass keine Fehlermeldung kam und der Stopp einfach überhaupt nicht aktiv wurde.

Viele Grüße
Cornelius

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

11

Donnerstag, 7. August 2008, 22:21

Also hier kommt das Projekt. Habe ich heute abend auf dem FDAX mal nebenbei mitlaufen lassen.

Stop Enter Test.Inv

Es taucht dabei aber ein völlig anderes Problem auf:
Die Tradehistorie sieht völlig anders aus, wenn man eine Position hat oder auch nicht.

Im System ist ein Tradedauerstop 5 Perioden, der keine Nebenbedingung hat.

Wenn man keine Depotposition inne hat:


Wenn man eine Depotposition hat:


Was da passiert ist folgendes:
Wenn man aktuell eine Position hat, rechnet das System von Anfang an durch und hat dummerweise dann auch in jedem virtuellen Trade (
bei denen die keine wurden, da der Stoplevel nicht erreicht wurde) aktivierte Stops die auslösen und den Tradeaustopen.

Das ist in sofern sachgefährlich, als dass sich je nach Handelssystem die real gehandelten Trades dadurch verändern.

richtig blöde wird das, wenn man mit dem Verluststop in der zweiten Periode ausgestopt wird.
Danach meint Investox, dass es keine Depotposition mehr hat und spring in den "Modus" um: ich habe keine Stops mehr und eine Sekunde später ist das System am Schirm wieder long, obwohl es vorher gerade ausgestoppt wurde.

Damit kann man dann den nächsten echten Einstieg verpassen. Sehr unschön.

Hat jemand eine Idee dazu ?

@Herr Knöpfel:
könnte Sie es so einrichten, dass #_Depot_Pos# nicht einfach den Wert x einnimmt für das komplette Handelssystem sondern eine Zeitreihe ist, die sich aufgrund des Orderbuches berechnet? Damit wäre dieses Problem erledigt!
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

12

Donnerstag, 7. August 2008, 22:26

hahahaha wie hohl bin ich denn. :baby: :baby: :baby:

Jetzt habe ich zulange gebraucht mit dem Schreibe und dem Screenshot und nicht gemerkt, dass es 22 Uhr rum war und schon ist die Order nicht mehr gefilled worden und das System hat natürlich keine Position mehr einnehmen können.
Entsprechend bitte nicht wundern, dass beide Charts gleich aussehen.
ich mach das morgen früh nochmal.......
If you think it´s expensive to hire a professional, wait until you hire an amateur.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

13

Freitag, 8. August 2008, 10:39

Hallo Joachim,

habe Dein System "REAL Stop Test" heute morgen mit dem FESX im Datenfeed getestet. Meine Erkenntnisse bisher:

Nur den Tradedauerstop (5 Perioden) und den Intraday Verluststop (hier muß in der Zusatzbedingung #_loadglobal depotpos# ergänzt werden) aktiviert:

Investox rechnet die Stopperioden ab setup, nicht 5 Perioden nach tatsächlicher Positionseröffnung. D.h. der Buy Stop wird aus dem Markt genommen, wenn er nicht innerhalb von 5 Perioden gefillt ist. Kannst Du das bestätigen?

Das ist nicht das Verhalten, das man in einem Stop Entry System haben will. Es ist eine andere Sache, dass man eine offene Order evtl. mit einer Zeitbegrenzung versehen will. Mit dem Tradedauerstop ist die TRADEDAUER gemeint, und da noch kein Trade eröffnet ist, sollte er keinen Effekt haben - d.h. keine offene Enter Order aus dem Markt nehmen.

EDIT: Eine Tradedauerbegrenzung kann man also in einem Stop Entry System nicht über den Tradedauerstop realisieren, jedenfalls nicht ohne Zusatzbedingung. Eine solche Zusatzbedingung in einem Tradedauerstop oder in einem Anwenderstop müßte die tatsächliche Position abfragen, entweder direkt mittels z.B. #_Depot_Pos# oder indirekt wie von Peratron oben angedacht. Ich habe das bisher nicht ohne Fehlermeldung hinbekommen.


Soviel zu meiner Beobachtung bisher - hab jetzt leider keine Zeit mehr. Ob der Intraday Verluststop überhaupt wirksam ist, muss ich später prüfen.

Viele Grüße
Cornelius

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cnolte« (8. August 2008, 11:04)


Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

14

Freitag, 8. August 2008, 11:23

Zitat

(hier muß in der Zusatzbedingung #_loadglobal depotpos# ergänzt werden)


Muß man nicht. Geht im Stop auch ohne. Muß man nur im Chart.

Zitat

Investox rechnet die Stopperioden ab setup, nicht 5 Perioden nach tatsächlicher Positionseröffnung. D.h. der Buy Stop wird aus dem Markt genommen, wenn er nicht innerhalb von 5 Perioden gefillt ist. Kannst Du das bestätigen?


Das ist allerdings ein Problem. Hier wäre es mehr als wünschenswert, wenn Herr Knöpfel für eine elegante Möglichkeit schaffen könnte, damit mit sich bei Stopentrysystemen nicht immer so furchtbar verbiegen muß, bis man Sie handeln kann. Manchmal klappts auch gar nicht ist meine Erfahrung.

Mir fällt dazu nur ein, dass man es wohl mit einem Anwenderstop umgehen könnte.

mittels

Quellcode

1
hhv(high,TradePeriods)>=TradeEntryPrice

bzw

Quellcode

1
llv(low,TradePeriods)<=TradeEntryPrice

bekommt man heraus, ob man bereits eingestoppt ist.

Und mit

Zitat

TradePeriods-barssince(llv(low,TradePeriods)<=shorttrigger,1)


erhäst Du die tatsächliche Periode seit Du eingestoppt wurdest.

Die Exitbedingung im Anwenderstop wäre denn wohl

Zitat

if(llv(low,TradePeriods)<=TradeEntryPrice,TradePeriods-barssince(llv(low,TradePeriods)<=TradeEntryPrice,1),0)>maximaletradedauer


Schönheitsfehler: Anwenderstops hauen irgendwie immer furchtbar bei der Rechenzeit rein. Ob das System dann noch Echtzeitfähig ist kann ich nicht einschätzen.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

15

Freitag, 8. August 2008, 11:26

Und hier die zwei Charts nochmal, .....

Ohne Depotposition


Mit Depotposition
If you think it´s expensive to hire a professional, wait until you hire an amateur.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

16

Freitag, 8. August 2008, 11:40

Ja, so wie in Deinen beiden Charts hat sich das auch bei mir verändert, wenn eine Position da war.

Ich hatte den Eindruck, dass das Systemverhalten dadurch nicht mehr einschätzbar war - z.B. bestand eine Position beim Broker tatsächlich deutlich länger als 5 Perioden.

Deine Ideen zum Anwenderstop versuche ich heute abend mal. Bist Du sicher, dass HHV() bzw. LLV() als zweiten Parameter eine Variable akzeptieren?

Viele Grüße
Cornelius

P.S. Bzgl. des #_loadglobal ...# im Stop habe ich was Neues gelernt - teste es heute abend aber trotzdem nochmal. :D

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

17

Freitag, 8. August 2008, 11:48

Bist Du sicher, dass HHV() bzw. LLV() als zweiten Parameter eine Variable akzeptieren?


Da hast Du recht, aber mit HHVVar geht´s.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

18

Freitag, 8. August 2008, 11:57

Danke! Probiere es heute abend aus - bin schon gespannt!

Grüße
Cornelius

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

19

Mittwoch, 13. August 2008, 18:03

Hallo, melde mich zurück! Hat doch etwas länger gedauert ...

Möchte kurz den bisherigen Stand zusammenfassen:

Peratron hat vorgeschlagen, in den Zusatzbedingungen der Stopps

high > enterlevel

abzufragen (alles hier bezogen auf die Long-Seite). Das ist eine Lösung, die mir gut gefällt. Sie funktioniert aber natürlich nur für Stopps, die oberhalb von enterlevel greifen sollen, d.h. für gewinnsichernde Stopps (z.B. Gewinnstopps und gewinnsichernde Kurstrailer).

Problematischer sind

1. verlustbegrenzende Stopps, die unterhalb von enterlevel greifen sollen,

2. tradedauerabhängige Stopps (Begrenzung der Tradedauer, Gültigkeit ab einer bestimmten Tradedauer oder beides).

In diesen beiden Fällen muss in den Zusatzbedingungen der Stopps abgefragt werden, ob (für 1.) bzw. ob und wann (für 2.) eine Position tatsächlich eröffnet worden ist.

Ich habe mich in den letzten Tagen an einem Anwenderstopp zur Begrenzung der Tradedauer in meinem Test_Stop-Enter-System versucht. Es scheint mir gelungen zu sein, das hinzubekommen! ^^

Zum Nachvollziehen und Ausprobieren für alle, die es interessiert, füge ich das Projekt nochmal bei. Ich habe es auf 30-Sekunden-Komp umgestellt, damit im Feed schneller was passiert. Lasst es doch mal mit dem aktuellen FDax oder FESX mitlaufen! (NUR MIT DEM VIRTUELLEN BROKER!!! :thumbup: )

Im System gibt es zunächst einen Tradedauerstopp. Der Tradedauerstopp hat im Stop-Enter-System die Funktion, die Orderlaufzeit zu begrenzen. Die Orderlaufzeit wird durch diesen Tradedauerstopp auf 20 Perioden = 10 Minuten begrenzt.

Daneben seht Ihr drei Versionen eines Anwenderstopps, der die Tradedauer auf vier Perioden begrenzen soll. Version 3 ist die, welche wohl funktioniert. Der Trick ist, dass man mit DepotHist arbeitet, weil das eine Zeitreihe liefert.

In den ersten beiden Versionen des Anwenderstopps habe ich mit TradeHigh (geprüft, ob TradeHigh seit setup größer enterlevel war) und TradePeriods (entsprechend) gearbeitet (habe auch die oben vorgeschlagene Lösung mit HHVVar() ausprobiert). Das funktioniert alles nicht, weil diese Schlüsselwörter so wie auch Depot_Pos nur den aktuellen Wert liefern. Damit kommt entweder eine Fehlermeldung oder der Stopp wird ignoriert.

Meldet doch mal, wie das bei Euch im Feed funktioniert und ob Ihr alternative Lösungsmöglichkeiten kennt!

Ich mache mich in den nächsten Tagen an die Formulierung weiterer Stopps.

Viele Grüße
Cornelius
»cnolte« hat folgende Datei angehängt:

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 050

Wohnort: Giessen

20

Mittwoch, 13. August 2008, 18:20

Das funktioniert im Backtest natürlich gar nix.

Aber mit den aktuellen Werten sollte das doch klappen?!
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Ähnliche Themen