Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Handelssystem als Indikator - Hilfe benötigt

Geschrieben

Liebe Community-Mitglieder,

 

ich brauche mal ein wenig Hilfe bei der Programmierung. Und zwar geht es darum, dass ich drei verschiedene Handelssysteme auf den FDAX (Sub1 bis 3) am laufen habe, aber eigentlich nur eine Position handeln möchte.

 

Um den nächsten Schritt des Systemhandels zu gehen, steht folgende Idee im Raum: es soll nur (mittels eines Mastersystems) in die aktuelle Richtung des Systems gehandelt werden, welches bspw. in den letzten 4h am profitabelsten war. Die Idee kam dabei von jemanden, der diesen Ansatz mal testweise in Investox umgesetzt hat. Dort sah es sehr profitabel aus, nur leider war die Datenbasis zu gering, so dass ich mich nun frage, ob das mit dem Metatrader auch geht.

 

Ich denke dabei daran, dies über einen kleinen Umweg zu machen. Dieser könnte wie folgt aussehen: die einzelnen Subsysteme handeln nicht, sondern dienen Indikator bzw. werden dazu umgebaut. Ich benötige dabei zum einen den Status der Subsysteme (long, short, flat) als auch den jeweiligen "Profit" bspw. der letzten 4h (dies wäre per Backtest zu optimieren). Dabei ist zu beachten, dass die Subsysteme in der Zwischenzeit ja auch ihre Position verändert haben könnten - nur den aktuellen Status mit der Kursdifferenz im Underlying zwischen jetzt und vor 4h zu multiplizieren reicht also leider nicht.

 

Das Mastersystem bräuchte dann "nur" die Indikatoren abgleichen und nach dem "besten" long oder short gehen bzw. dann später die Position drehen (Details wann wo wie folgen).

 

Nun die Fragen:

- kann ich ein System (inkl. Profitkurve) zu einem Indikator "umbauen"?

- wenn ja: wie kann ich diese Daten (Status und Profit der Subsysteme) dann in das Mastersystem übergeben?

- ist überhaupt verständlich, was ich bezwecke ;)?

 

So viel sei gesagt: ich habe keine Angst vor Programmcodes, nur überwiegen bei mir eher die Ideen und das basteln als dass ich etwas "aus dem Nichts" programmieren könnte. Leider sind meine MQL Kenntnisse nicht so weitreichend, als das ich das hinbekommen würde. Falls also jemand Lust und Zeit hat, mir dabei zu helfen, ist das super.

 

Falls es "zu viel" Aufwand ist, kann man sich auch gerne per Boardmail über Details einer möglichen "Bezahlung" austauschen.

 

Vielen Dank vorab schon mal an alle, die aufgrund meines Textes hier ihren Kopf rauchen lassen :badtaste_:.

 

P.S.: ich hoffe, ich habe die richtige Kategorie für mein Topic ausgewählt. Sonst bitte in Handelsansätze / Strategien o.ä. verschieben.

Bearbeitet von conglom-o

  • Antworten 78
  • Aufrufe 1,2Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

Featured Replies

Geschrieben
  • Autor
[...]

Back to Topic: also das SOS scheint zu tun was es soll, das umbauen auf Indikatoren detto.

Noch zum RSI: ich hab gesehen beim OrderSend sind StopLoss und TakeProfit level, die zwar in der Form auf 0 sind, aber:

sind im vollen System SL oder TP gesetzt?

 

Nö, da ist gar nix gesetzt. Das RM wird bei den drei Subsystemen eh extern über das Depot gesteuert. Habe nämlich auch mal backgetestet (deshalb im Quelltext) und sämtliche Sachen wie TP, SL (sowohl absolut als auch relativ) etc. machen die Systeme langfristig nur schlechter. Datenbasis: FDAX 5-Minuten seit Januar 2005.

 

Aber vielleicht macht es im Mastersystem ja Sinn, muss man mal sehen, wenn die drei Subindikatoren fertig sind :).

Geschrieben
Aber vielleicht macht es im Mastersystem ja Sinn, muss man mal sehen, wenn die drei Subindikatoren fertig sind :).

 

Ich vermute sie machen im MasterSystem nicht mehr Sinn als im normalen, die Frage ist ob man im MasterSys Flat erlauben soll, aber das ist alles Teil der Tests.

 

Zu den Subindis: Du musst mir nur den Code geben :hul: Ich bin derzeit sowas von lernunmotiviert, du würdest mir richtig einen Gefallen tun wenn ich was zum coden krieg :OMG:

Geschrieben
  • Autor
[...]

Zu den Subindis: Du musst mir nur den Code geben :hul: Ich bin derzeit sowas von lernunmotiviert, du würdest mir richtig einen Gefallen tun wenn ich was zum coden krieg :OMG:

 

Die kompletten Subsysteme kann ich hier leider nicht reinstellen, da es eine Gemeinschaftsentwicklung ist. Deswegen die abgespeckte version, welche man ja zu Testzwecken modifizieren und mit unterschiedlichen Parametern versehen kann. Bitte um Verständnis in diesem Punkt. Wenn ich wüsste, was ich machen muss, würde ich die Originale selber mal zum Indikator umbauen - ich bin da noch lernmotiviert :).

Geschrieben
  • Autor

@Mythos

Grandios :hul:!!!

 

Auf Basis des Beispielindikators habe ich nun meine drei Subindikatoren gebaut. Ich werde heute im Verlaufe des Tages dann mal im Detail überprüfen, ob diese auch die gleichen Trades machen wie deren "Muttersysteme". Erst wenn das der Fall ist, widme ich mich dem Mastersystem.

 

Die Idee ist, das Subsystem im Backtest laufen zu lassen und parallel den jeweiligen Subindikator einzubauen, der einfach nur grafisch seine Position (1, 0 oder -1) zeichnet. Ich denke, dann ist der Abgleich am einfachsten. Technisch sollte es ja irgendwie hinzubekommen sein ;).

Geschrieben
  • Autor

Der optische Test war ganz hilfreich - so wurde wenigstens deutlich, dass tatsächlich ein Fehler in den Subindikatoren war. Der war aber ganz allein auf meinen Mist gewachsen - man sollte nicht abends während des Fußballs mit Bier in der Hand programmieren :hul:...

 

Technisch klappt nun also alles wunderbar - bin mal gespannt, was bei der Optimierung des Masters raus kommt. Nochmal ganz dickes Lob und vielen Dank an Mythos für die Arbeit :OMG:.

 

P.S.: An dieser Stelle sei noch darauf hingewiesen, dass man für das Nutzen des Beispielindikators die aktuelle Tradebox v1.08 benötigt!

  • 3 Wochen später...
Geschrieben
  • Autor

Und auf geht es zur nächsten Etappe. Nachdem der Indikator im live-Betrieb (und Backtest) hervorragend funktioniert, fiel auf, dass bei einem PC Neustart die Daten alle weg (bzw. auf 0) sind und somit natürlich andere Ergebnisse als bei einem durchlaufenden Indikator rauskommen.

 

Idee ist nun, die entsprechenden Daten der Arrays für RegSlope etc. rückwirkend über alle Bars in einen Puffer zu schreiben, wie dies bei den im Metatrader mitgelieferten Indikatoren auch geschieht. Es wurde nun einiges rumprobiert, das Problem scheint aber darin zu liegen, dass die Arrays nicht richtig in den Puffer geschrieben werden. Ich habe die Basisdateien iRSI2 (Indikator ohne Historie) und eine Testschleife iTest2 angehängt. Bei der Testschleife wird die Equity beispielhaft als i*i berechnet und auch rückwirkend korrekt eingezeichnet - bei den Arrays klappt dies irgendwie nicht.

 

Ein großer Dank geht dabei an den User GoSPvC, der nun auch unsere Gemeinde hier erweitern wird :laugh:.

Er wird zu den technischen Fragen sicherlich mehr sagen können - mir wird vor lauter Schleifen drehen ja immer ganz schwindelig...

 

Die Frage ist also nun: wie bekommt man es hin, dass der Indikator iRSI auch rückwirkend seine Kurven malt?

Geschrieben
Idee ist nun, die entsprechenden Daten der Arrays für RegSlope etc. rückwirkend über alle Bars in einen Puffer zu schreiben, wie dies bei den im Metatrader mitgelieferten Indikatoren auch geschieht. Es wurde nun einiges rumprobiert, das Problem scheint aber darin zu liegen, dass die Arrays nicht richtig in den Puffer geschrieben werden.

 

Wie habt ihr es denn versucht? bzw. inwiefern wird die Equity falsch in die Buffer geschrieben?

Um die History in den Buffer zu füllen, muss man für jeden noch nicht berechneten Bar, die Equity etc. berechnen und in den entsprechenden Buffer-Eintrag schreiben.

 

Muss jetzt eigentlich jeden Tick was verändert werden, oder passiert nur beim ersten Tick vom Bar etwas? In der History hast du ja dann keine Ticks zur Verfügung, was auch zu ungewollten Effekten führen könnte.

Geschrieben

Hi Mythos...

 

Ich spring hier mal für conglom-o ein... (Ist aber auch mein erster Indikator in MQL)

Nicht Equity ist das Problem, sondern RegSlope. Equity habe ich mit "irgendwelchen Werten" gefüllt; der Einfachheit halber i*i der for-Schleife, damit für alle Bars irgendein Wert verfügbar ist.

 

Das (Verständnis-)Proiblem, das ich jetzt habe ist: Um die beiden als Buffer definierten Arrays RegSlope[] der Equity[] zu berechnen, muß man über zwei weitere HilfsArrays die RegSlope[] berechnen lassen. Wie muß man aber diese beiden Arrays (mean- und temp-array) behandeln? So wie hier kommt jedenfalls für RegSlope nix raus:

 

for(index=0;index<RegressionPeriod;index++){
ArrayCopy(mean_array,Equity,0,index,AveragePeriod);
temp_array[RegressionPeriod-index-1]=iMAOnArray(mean_array,AveragePeriod,AveragePeriod,0,MODE_SMA,0);
}
RegSlope[i]=tbLinRegSlopeConstX(temp_array);

Geschrieben
  • Autor

@GoSPvC

Danke fürs Einspringen :blink:.

 

Was die Ticks angeht stellt es sich so dar, dass das zugrundelegende Handelssystem ja auf 5er Close basiert. Gleiches müsste dann ja auch für den Indikator gelten (korrigiert mich, wenn ich falsch liege). Im virtuellen Modus klappt es ja auch - man muss also quasi dem Indikator "nur" einen Durchlauf im visuellen Modus vorgaukeln, so bald man ihn auf den Chart zieht. Im beim MT4 beigelieferten MACD Indikator sieht es ja so einfach aus - der greift allerdings auch nicht auf Arrays zurück, wenn ich den Quelltext richtig interpretiere.

Geschrieben
Das (Verständnis-)Proiblem, das ich jetzt habe ist: Um die beiden als Buffer definierten Arrays RegSlope[] der Equity[] zu berechnen, muß man über zwei weitere HilfsArrays die RegSlope[] berechnen lassen.

 

Zu den Arrays:

mean_array ist der "source" für die Mittelwerte, die dann für die RegSlope verwendet werden.

Es wird also der entsprechende Teil (und genau hier hängts glaub ich bei deinem Code) aus der "Equitycurve" (also dem EquityBuffer) rauskopiert, und der Mittelwert dieses TeilArrays in den entsprechenden Eintrag von temp_array geschrieben.

Dann wird von den Werten in temp_array die RegSlope berechnet.

Zugegeben das Kopieren ins mean_array kann man sich eigentlich sparen (hab da das erste mal mit Array-Zugriffsfunktionen gearbeitet ;), das würde vermutlich Performance bringen.

(Ich weiß, schön programmieren is was anderes, das war mehr ein kleiner schneller Hack :blink: )

 

Im virtuellen Modus klappt es ja auch - man muss also quasi dem Indikator "nur" einen Durchlauf im visuellen Modus vorgaukeln, so bald man ihn auf den Chart zieht.

Das geht leider nicht, da er im Backtest (also visuellen Modus) die Ticks nach der Reihe in den Chart lädt, beim ziehen auf den Chart, aber mit einem Satz alle Bars kriegt, also die gesamte Tick-info der Vergangenheit "verloren" geht.

Bei Indikatoren geht man eigentlich davon aus, das sie nur die Infos der einzelnen Bars benötigen, aber keine Tick-Info. Man kriegt zwar live defakto die Tickinfo geliefert, aber halt nicht auf die Vergangenheit.

Geschrieben
  • Autor
[...]

Bei Indikatoren geht man eigentlich davon aus, das sie nur die Infos der einzelnen Bars benötigen, aber keine Tick-Info. Man kriegt zwar live defakto die Tickinfo geliefert, aber halt nicht auf die Vergangenheit.

 

Yo, das müsste auch reichen - Tickinfo wird nicht benötigt, eigentlich sogar nur der Close der Bars (der eingebundene RSI holt sich ja die Daten, die er benötigt). Systeme, die auf Tickbasis arbeiten mag ich eh nicht so sehr. Der Haken scheint also wirklich beim Füllen des Arrays zu liegen - nur gerade was Arrays angeht habe ich immer enorme Vorstellungsprobleme. Das scheint wirklich nur was für "Freaks" zu sein :blink:.

Geschrieben
- nur gerade was Arrays angeht habe ich immer enorme Vorstellungsprobleme. Das scheint wirklich nur was für "Freaks" zu sein :OMG:.

Wen nennst du hier Freak? :blink:

 

Zu den Arrays: stells dir als (lange) Tabelle mit nur einer Spalte vor (wenn du willst sogar in Excel). Die Einträge im Array sind genau die Werte in der Tabelle... (und die indizes des Arrays sind die Zeilennummern)

 

hth

Geschrieben

Merci Mythos für die jetzt funktionierende iRSI.mq4 ... Ich könnte mich in fremden Code nicht so schnell reindenken und auf die Schnelle Funktionalität schaffen.

 

conglom-o und ich versuchen grad die iRSI mit drei unterschiedlichen Modul-Einstellungen(Sub1 Sub2 und Sub3) als drei Indikatoren zum laufen zu bekommen, aber anscheinend zeigen trotz unterschiedlicher EingabeWerte die Indikatoren (bis auf die Equity ?!?) alle gleiche Ausgaben an.

 

Kann es sein, daß dadurch, das die BufferNamen, bzw. die zur Berechnung verwendeten VariablenNamen innerhalb des ja dreimal gleichen Codes sich irgendwie gegenseitig beim Berechnen behindern???

Geschrieben
Kann es sein, daß dadurch, das die BufferNamen, bzw. die zur Berechnung verwendeten VariablenNamen innerhalb des ja dreimal gleichen Codes sich irgendwie gegenseitig beim Berechnen behindern???

 

sollte eigentlich nicht sein, da jeder Indikator ja für sich abgeschlossen ist. Und auch die TB von jedem aufrufenden Modul als eigenständige Instanz aufgerufen wird (werden sollte).

 

Ich kann das Verhalten hier auch leider nicht reproduzieren (wenn ich den RSI 2 mal unter verschiedenen Namen mit unterschiedlichen Parameter laufen lassen, funkt alles wie es soll...)

 

habt ihr mal versucht das ganze "schrittweise" zu machen? also den "geheimen" Teil wegzulassen und schaun ob die Probleme dann immer noch bestehen...

Ohne Code bzw. "Testfall" ist es schwer zu sagen was falsch sein könnte, weil das theoretisch vom Programmierfehler bis zu einem MT-Bug gehen kann...

(MT zeigt ja bei einem solchen Indi teils sehr interessantes verhalten)

Geschrieben

:-) Tjooo... den "geheimen" Teil darf ich auch nicht sehen...

 

Deswegen blieb mir nur ein Test, ob die zwei Indikatoren mit selbem Inhalt, aber anderem Namen iRSI1.mq4 und iRSI2.mq4 dieses Verhalten bei mir auch zeigen.

Dazu habe ich kurzerhand die Buffer im ersten mal 100 und im zweiten mal 1000 genommen... und so werden auch zwei unterschiedliche Ausgaben geliefert.

 

Ich geb dir absolut recht, wenn man den Code nicht vor der Nase hat, kann man wenig hilfreich sein; wollte auch grad über's Telefon behilflich sein, ist aber nicht wirklich was dabei rausgekommen.

Geschrieben
  • Autor

So, nachdem Mythos, GoSPvC und ich stundenlang die große Version des Quelltextes durchgegangen sind, wurde folgendes wieder mal deutlich: 90% der Fehler sitzen vorm Bildschirm - in diesem Fall meinem :wub:.

 

Der Quelltext von Mythos ist also fehlerfrei gewesen und auch der Indikator tut nun das, was er soll. Das Wochenende ist also quasi gerettet. Werde dann versuchen, eine weiter durchkommentierte Version zu erstellen und diese dann als eine Art Template hier hochladen. Kann allerdings noch ein paar Tage dauern.

 

An dieser Stelle aber nochmals vielen Dank und großes Lob an die zwei "Freaks" Mythos und GoSPvC, ohne die dieses kleine Projekt "Umbau eines Handelssystems in einen Indikator" nicht möglich gewesen wäre :wub:.

Geschrieben
  • Autor

Update

Habe nun den Master mal zwei Tage live laufen gelassen. Leider macht er irgendwie keine Trades bzw. nicht annähernd die Dinger, die er im Backtest anzeigt. Weiß jemand, woran das liegen könnte?

 

Ich werde nun aber mal versuchen, den Master auf Open Price (kein Tickchart) umzubauen und dann weitere Tests starten. So bald eine lauffähige Version existiert, folgt an dieser Stelle eine dokumentierte Version :smile:.

Geschrieben
  • Autor

Update II

Nun wird es noch verwirrender - ich habe nun mal ein wenig rumprobiert und festgestellt, dass wenn ich den Anfangszeitpunkt des Backtest verändere, sich auch die Trades (zum Teil gravierend) verändern. Das darf eigentlich nicht sein. Ich vermute mal, dass dies an den Subindikatoren liegt. Der Fehler liegt also nicht wie zunächst vermutet im Mastersystem (zumindest nicht nur). Es bleibt spannend :smile:.

Bearbeitet von conglom-o

Geschrieben
  • Autor

Update III

Nach stundenlangen Tests konnte ich nun den Fehler weiter einschränken. Er liegt anscheinend doch am Master selber. Warum? Wenn ich die Reihenfolge der Indikatoren, auf die der Master zurückgreift, ändere, ergeben sich gravierend unterschiedliche Ergebnisse des Backtests. Das dürfte / sollte eigentlich nicht so sein. Eventuell weiß hier jemand mehr, woran das liegen könnte bzw. wie man die Auswahlroutine ändern muss. Ich forsche aber auf jeden Fall weiter :wub:.

Geschrieben
Wenn ich die Reihenfolge der Indikatoren, auf die der Master zurückgreift, ändere, ergeben sich gravierend unterschiedliche Ergebnisse des Backtests. Das dürfte / sollte eigentlich nicht so sein.

stimmt, es gab einen kleinen Bug in Zusammenhang mit dem Unique. Das Problem sollte nur auftreten wenn Unique auf true gesetzt ist (was ich persönlich nicht für sinnvoll halte).

 

hier eine neue Version (geändert haben sich nur 2(4) Zeilen in der FUnktion getDirection()):

 

eSystemOfSystems.mq4

 

Nochmal zur Erinnerung an alle mitleser: Dieses SystemOfSystems is bewusst sehr allgemein gehalten, es kann also mit beliebigen subsystemen verwendet werden, wenn diese als indikatoren vorliegen, nur 2 Parameter nehmen (RegressionPeriod und AveragePeriod) und als 1. (Line 0) Linie den Regressionslope und als 2. (Line 1) Linie die aktuelle Position liefern.

Mehrere Parameter der Subsysteme müssten hardcoded oder per config-file gehandelt werden.

 

mfg

Geschrieben
  • Autor
stimmt, es gab einen kleinen Bug in Zusammenhang mit dem Unique. Das Problem sollte nur auftreten wenn Unique auf true gesetzt ist (was ich persönlich nicht für sinnvoll halte).

[...]

 

Rein logisch würde ich es auch für wenig sinnvoll halten, aber wenn es besser ist (zumindest ist es in der Investox-Basis so), warum nicht...

 

Der Bug der unterschiedlichen Ergebnisse bei Änderungen der Reihenfolge der Subindikatoren ist leider immer noch vorhanden - sowohl bei Unique true als auch false (hab's grad mal getestet). Werde mich mal hinsetzen und den ganzen Ablauf im Kopf durcharbeiten. Evtl. erkenne ich, woran es liegt :blink:.

Bearbeitet von conglom-o

Geschrieben
  • Autor

Update

GoSPvC und meiner einer sind gestern nochmal den Quellcode durchgegangen und haben etliche Tests gefahren. Das Austauschen der Reihenfolge der Indikatoren ließ zumindest ansatzweise ein Muster erkennen, was zu der Vermutung führt, dass der Master (wenn er einen Sieger gefunden hat) aufhört, die Suchschleife zu durchlaufen. Normalerweise müsste er aber weiter prüfen, ob es auch wirklich der "einzige" Sieger ist. Warum der Fehler bei Unique true und false auftaucht, bleibt aber zunächst ein Rätsel.

 

Idee ist nun, zwei vollkommen getrennte Schleifen (eine zum Einlesen und eine zum Vergleichen der Systeme) zu programmieren. Mal sehen, ob es klappt und was am Ende bei raus kommt :wink:.

Geschrieben
  • Autor

Update

Wir haben nun die Schleifen raus genommen und den Master testweise Subindikator für Subindikator einzeln durchrechnen lassen. Ergebnis: es kommt nur Minus raus (verschiedene Varianten ausprobiert) und man ist schneller pleite als man denkt. Auffälliger Nebeneffekt: auch hier kommen bei unterschiedlichen Indikatorreihenfolgen auch unterschiedliche Ergebnisse des Backtests raus. So langsam fange ich wirklich an zu verzweifeln, da für mich nun wirklich nicht mehr nachvollziehbar ist, wo der Fehler liegt :top:.

Bearbeitet von conglom-o

Geschrieben
Update

Wir haben nun die Schleifen raus genommen und den Master testweise Subindikator für Subindikator einzeln durchrechnen lassen. Ergebnis: es kommt nur Minus raus (verschiedene Varianten ausprobiert) und man ist schneller pleite als man denkt. Auffälliger Nebeneffekt: auch hier kommen bei unterschiedlichen Indikatorreihenfolgen auch unterschiedliche Ergebnisse des Backtests raus. So langsam fange ich wirklich an zu verzweifeln, da für mich nun wirklich nicht mehr nachvollziehbar ist, wo der Fehler liegt :top:.

 

He, das war als "GeheimTest" gedacht und gibt meine nichtvorhandenen Programmierkenntnisse preis !! :top: :top:

 

Meinem Verständniss nach hat die Version MIT der Möglichkeit, mehrere (egal, wie viele) Systeme miteinander zu verknüpfen den Fehler, daß nachdem ein System mit Gewinn gefunden ist, die restlichen Systeme nicht mehr überprüft werden. Somit spielt die Reihenfolge, wie die Systeme in den Input geschrieben werden eine Rolle.

Als nächstes Scenario wäre ja so auch nicht berücksichtigt, daß ein drittes (weiteres) System ebenfalls Gewinn macht und somit vom System ja eigentlich nichts zu tun wäre. Der Master soll ja nur eingreifen, wenn alle Systeme Verlust gemacht haben und das erste in den Gewinn dreht.

Bearbeitet von GoSPvC

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.