Trading Tools / Programmierspache

cello

New member
26. Dez. 2011
6.233
177
0
Svizzera
Welche Trading Plattformen verwendet ihr für eure HS? Und welche Programmiersprache bevorzugt ihr?Ich bin halt mit dem Metatrader "aufgewachsen" und habe mich bis jetzt auch vor allem darauf konzentriert. Verwende also schon viele Jahre den MT4 mit der mql4 Sprache und seit einem Jahr oder so bin ich auch mit dem MT5 und der mql5 Sprache am experimentieren.Der MT5 ist im Bezug auf das Backtesting einiges besser geworden als der MT4. Er hat aber auch seine Nachteile. Beim manuellen Trading finde ich vor allem super, dass man neu die Orders direkt auf dem Chart verschieben kann. Man nimmt also einfach z.B. die TP oder die SL Order und zieht sie auf dem Chart dorthin wo man sie will. Ärgerlich finde ich, dass der MT5 die Positionen nettiert. Man kann also nicht mehr separate Trades in kleinen Stücken für ein bestimmtes Instrument machen, wird alles zusammengefasst. Ich kenne das schon von anderen Brokern und es hat auch seine Vorteile. Aber eigentlich finde ich das überhaupt nicht nötig. Denn oft macht es Sinn die Positionen einzeln zu behandeln z.B. in Bezug auf die TP und SL Orders. Auch bei den EAs bevorzuge ich es für Long und Short einzelne Systeme zu machen, was durch das nettieren der Posis dann auch zu Problemen führen kann.

 
Je nach dem was man halt machen will gibts Vor- und Nachteile. Als Retailer ist man mit Metatrader sehr gut bedient. Es gibt genügend Doku, das Handling ist ok und auch sehr einfach zu programmieren, also auch für nicht Informatiker geeignet. Muss aber sagen, ich traue dem Backtesting vom MT4 nicht so ganz. Das Ding bescheisst manchmal. Kann aber auch an einem der wichtigsten Punkte liegen, der Datenqualität. Rechnet das überhaupt mit Kommission und Slippage? Besser sieht für mich NinjaTrader aus. Jedoch basiert das NinjaScript auf C# und ist für einige evtl etwas schwieriger. Alles in alles eines der besten, (preiswerten) und nicht selbst erstellten Progs wäre da noch Openquant (C#). Wenns halt etwas theoretischer ausfallen darf kann man mit Matlab oder dem opensource Program "R" alles machen, muss aber auch alles selbst machen (oder zumindest die Packages suchen) :(Falls man dazu noch mathematische,statistische Auswertungen braucht empfiehlt es sich sowieso auf ein Matheprogram zu wechseln, da die nicht matritzenbasierten Dinger einfach eklig sind. Oder halt die eine Kombination...ps: es gibt noch ettliche mehr, Tradestation etc.. kenne ich aber nicht genauer.

 
Sowas gibts doch schon irgendwie bei einem Amibroker. Drag-n-Drop mässig.Ein Stück weit hats auch NinjaTrader drin.

 
Nein, hatte nur mal eine Werbung gesehen. Evtl war es TD-Ameritrade. Auch egal... einem dragndrop System gebe ich keinen cent.

 
Muss aber sagen, ich traue dem Backtesting vom MT4 nicht so ganz. Das Ding bescheisst manchmal.
Wie kommst du jetzt darauf?
Kann aber auch an einem der wichtigsten Punkte liegen, der Datenqualität. Rechnet das überhaupt mit Kommission und Slippage?
Klar, die Backtests sind nur so gut wie die historischen Daten welche du auf deinem Rechner hast. Die meisten Broker haben die MT Accounts so aufgesetzt, dass die Kommission im Spread drin ist und der wird natürlich mitberechnet.
 
Ich möchte noch erwähnen das Dukascopy an einem neuen Konzept arbeitet. Einem visuellen Editor für die JForex Plattform. Dadurch können Strategien ohne Programmierkenntnisse entworfen werden. Bin mal gespannt wie das aussehen wird. Der einziege Screenshot den ich gefunden habe war dieser hier: :mrgreen:
Für den Metatrader gibt es den Molanis Strategy Builder. Der ist auch ganz easy aufgebaut und man kann eigentlich recht schnell ein System basteln auf graphischer Basis. Aber eben diese Tools stossen halt irgendwann an ihre Grenzen wenn es etwas komplizierter werden soll. Nur blöd wenn man kein Coder Profi ist :(
So sieht das Ding aus:

molanisexemple.png


 
Muss aber sagen, ich traue dem Backtesting vom MT4 nicht so ganz. Das Ding bescheisst manchmal.
Wie kommst du jetzt darauf?
Kann aber auch an einem der wichtigsten Punkte liegen, der Datenqualität. Rechnet das überhaupt mit Kommission und Slippage?
Klar, die Backtests sind nur so gut wie die historischen Daten welche du auf deinem Rechner hast. Die meisten Broker haben die MT Accounts so aufgesetzt, dass die Kommission im Spread drin ist und der wird natürlich mitberechnet.
Hatte mal ein HS im E/D mit MT4 und Oanda getestet. Es hatte einen abartigen Profitfaktor aber auf NT dann nur noch einen recht guten. Werde es bei Zeit noch auf einem anderen System Backtesten. Denke es liegt an Oanda. Ist einfach etwas müllig.
 
Hatte mal ein HS im E/D mit MT4 und Oanda getestet. Es hatte einen abartigen Profitfaktor aber auf NT dann nur noch einen recht guten. Werde es bei Zeit noch auf einem anderen System Backtesten. Denke es liegt an Oanda. Ist einfach etwas müllig.
OANDA hat mal eine Mail geschrieben in der sie über Datenfehler informierte. Ich weiss aber nicht genau was damals mit den offenen Positionen geschehen ist.
Ich handle auch nicht über Oanda. Nur hatte ich gesehen, dass er zt einfach durch einen Stopp hindurch ist (nicht ausgelöst) und dann viel weiter im Plus geschlossen hatte. Dies war 1-2 mal so UND nur wenns positiv war. Ich denke sie nehmen irgendwie damits schneller geht trotz "Tick-by-tick" nur Closes... :?
 
Aber grundsätzlich schreibe ich lieber in Scala und bevorzuge deshalb meine eigene Lösung, einem KDB+ Fork: http://widebase.github.com/ und http://t1ck.bitbucket.org/. Der Vorteil liegt vorallem in der Cross Market fähigkeit, die bspw. mit anderen Systemen nur bedingt realisierbar sind. Bspw. kannst du in einem Code Block zwei Märkte gleichzeitig bedienen, siehe auch ein älteres Bsp. Script: https://gist.github.com/c3cba2b7dd4e9832b8f7. Die realtime Quotes von zwei Märkte - Dukascopy und MB Trading - werden bspw. wie folgt abonniert:

val mbtConsumer = rq.consumer(mbt, "192.168.2.3", 60000)val swfxConsumer = rq.consumer(swfx, "192.168.2.3", 60001)mbtConsumer.login("consumer", "password")swfxConsumer.login("consumer", "password")mbtConsumer.subscribe("quote")swfxConsumer.subscribe("quote")Noch shorter ist kaum möglich :D Die Daten können dann mit eigenen Listener direkt verarbeitet werden.

Code:
object mbt extends RecordListener {  import t1ck.widebase.db.table.mbt.QuoteTable  def react = {    case chunk: Table => QuoteTable(chunk).foreach(println(_)) // Print MBT quote to screen  }}object swfx extends RecordListener {  import t1ck.widebase.db.table.mbt.QuoteTable  def react = {    case chunk: Table => QuoteTable(chunk).foreach(println(_)) // Print SWFX quote to screen  }}
Aber auch diese Lösung ist nicht der ultimative Problemlöser. Zumale viele Komponenten selber geschrieben werden müssen. Dafür ist aber die flexibilität am höchsten. Manchmal ist es jedoch einfacherer wenn du eine Plattform öffnest und gleich loslegen kannst. Halt immer eine Frage was erreicht werden soll :)
Sehr sexy und schlank!! :repsekt:

Klar muss man so viel selber schreiben. Auf der anderen Seite wird dir so eine JVM als Deployment-Plattform reichen (und somit irgendein UNIX-oides System). Was mich an den meisten vorgefertigten Lösungen stört ist der Umstand, dass die meisten davon halt für Win32 gebaut sind und so man halt einfach Windows für den Betrieb benötigt. Ich muss gestehen dass ich aus der Java EE Welt komme und dort zumindest in meinen Projekten das meiste bislang auf Linux/Solaris (mit Oracle DBs) lief. Dementsprechend bin ich vielleicht nicht grad dafür prädestiniert dafür, eine 7x24 Windows-Umgebgung am Leben zu halten ;-)

widebase schaue ich mir sicherlich sehr gerne mal an, schaut interessant aus! Vielen Dank für die Links!

 
Auch mit Spring Framework? Ich habe damals auf Basis des Spring Frameworks und ActiveMQ ein verteiltes System aufbauen wollen, wie im folgenden Post kurz angedeutet: viewtopic.php?f=74&t=851#p33337. Dabei sollte besonders das Spring Framework als Hot-Swap Schnittstelle dienen. MIt der du dann via XML die einzelnen Handelskomponenten zusammenkleben konntest. Das ganze hat sich dann aber rasch in einen überdimensionierten Moloch entwickelt :mrgreen:
Ja teilweise auch mit Spring - obwohl ich davon weniger begeistert bin als noch anno 2004/2005 (als noch Applicationserver mit EJB 2.0 und ihren aufwändigen Deployment-Deskriptoren die Landschaft dominierten). Heutzutage mit JEE6 und EJB 3.1 hat sich der Nutzen von Spring IMHO ziemlich relativiert. Und die XML-basierte Konfiguration ist halt irgendwann auch kaum noch zu pflegen. Aktuell arbeite ich in einem Projekt mit rund 175 XML-Configurationfiles - bin recht neu da, werde aber heute dem Team eine kleine Präsentation halten damit wir das immerhin auf Annotationen umstellen. Gegenwärtig hat nämlich keiner mehr den Überblick über diese XML-Konfig, das ist schon recht evil :kopfwand:
Oracle Berkeley DB habe ich mir für eine kurze Zeit auch als möglicher Kandidat für die grossen Zeitreihen in betracht gezogen. Leider war mir das Lizenzmodell nicht sonderlich toll. Habe mich damals auch mit Apache Cassandra beschäftigt, OpenTSDB und ein paar andere unbekannten DBs. Schlussendlich gefiel mir das Modell von KDB+ am besten. Das wurde damals auch bei der UBS entwickelt, bis dann der Arthur Whitney sich selbstständig machte. Die APL verwandte Programmiersprache Q - der Vorgänger war K - auf der KDB+ baut war mir jedoch sehr suspekt. Auch der Preis war mit ca. $20'000 bis $90'000 pro Jahr zum davon rennen :repsekt: Es gibt aber eine Trial Version von KDB+ für Windows und Linux: http://kx.com/trialsoftware.php. Wenn du mal selber erfahren willst wie sich Q anfühlt :bye:
Das tönt interessant! Ich muss zugeben, dass ich recht auf die JEE-Welt fokussiert bin und leider viel zu wenig über den Tellerrand schaue. Werde deine Links aber gerne mal anschauen und studieren!! Vielen Dank.
 
Wer auf einem nackten System codet, könnte auch die TA-Lib interessieren: http://www.ta-lib.org/. Enthalten sind 200 fertige Indikatoren für die Programmiersprachen C/C++, Java, Perl, Python and 100% Managed .NET. Die meisten Indikatoren innerhalb der JForex Plattform stammen von der TA-Lib.
Genau, ta-lib bietet schon recht viel. Vor allem gibt es auch ein Excel Add-In, womit man einfachere Sachen auch schon mal in einem Spreadsheet angucken kann und gar nichts programmieren muss.