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.

MQL Library mit Standardfunktionen

Geschrieben

Soda, ich start hier einfach mal das Projekt "StandardLib". Sobald ein Admin den Upload freischaltet gibts meine kleine Lib mit sage und schreibe 2 Funktionen im Downloadbereich einfach mal als Diskussionsgrundlage.

 

SVN halte ich für sinnvoll, aber ich denke, der Download-Bereich sollte es auch tun und mehr Leute verstehen es auch, zumal es auch nicht so hoch frequentiert ist (oder wie der Chef immer so schön sagt: "Hier bei tom-next ticken die Uhren langsamer"). Es wird wahrscheinlich darauf hinauslaufen, dass jeder so "sein Baby" hat und die anderen es lediglich testen und eventuell Bugs rückmelden.

 

Ich denke mit SVN wirds erst sinnvoll wenn wir wirklich mehrere Coder sind die daran arbeiten. Solange nur eine handvoll dran arbeitet könnts mit einem file klappen.

 

Vor allem dürfte das Hauptziel mal sein die notwendigen Funktionen zu finden.

Wie ich das bis jetzt sehe, haben wir hier viele "Betatester" die wissen was es können soll und ein paar coder, die das dann produzieren.

 

Also: Was soll in so eine Standardlib rein? Was codet ihr immer wieder und denkt euch jedesmal "das hab ich doch schon mal geschrieben"?

 

Kurz was schon drin ist:

TBOrderSend: Als Extension zu OrderSend. TBOrderSend kann man die "rohen" Werte geben und es gleich diese "sinnvoll" an die notwendige Genauigkeit an (also rundet Preise zum nächsten vollen Tick auf oder ab, gleicht die Lotsize an etc.) Passt auch Stops und TPs an falls sie zu nah am Entryprice liegen (anhand der Stoplevel vom MArketINfo). Zusätzlich noch eine Überprüfung der Expiration auf sinnhaftigkeit und schickt dann die Order los.

Kommt trotzdem ein Error versucht er es immer wieder mit kleinem Errorhandling: Requote und Wartezeit bei Serverbusy... Im Erfolgsfall retouniert sie das OrderTicket, sonst den negativen Fehlercode.

 

TBOrderModify macht im Prinzip das gleiche nur für OrderModify (und noch nicht wirklich kommentiert)

 

zur Namensgebung: ich hab sie TradeBox genannt und deswegen alle Funktionen daraus mit dem Präfix TB versehen.

 

Und ja, beim coden ist mein Englisch teils unter aller Sau ;)

  • Antworten 108
  • Aufrufe 1,8Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Most Popular Posts

  • Freut mich wenn dir die Tradebox hilft.   für alle Funktionen wirds eine lange liste. Am Anfang der TradeBox is eine lange Liste mit allen vorhandenen Funktionen. Zum Code, deiner ist fast korrekt (es

  • Zum lösen des Problems bin ich offensichtlich zu spät, aber die Frage kann ich beantworten ;) Es gibt grundsätzlich den Unterschied zwischen include und import:   Bei include holt sich der Compiler zu

  • // Copyright (C) 2009 // Markus Kuegerl <kuegerl.markus@gmx.net> // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are per

Veröffentlichte Bilder

Featured Replies

Geschrieben
Alex, geht das in Richtung Lösung dieses " ic.arrow.right.png Problems"

 

 

nein leider nicht

ich möchte herrausbekommen mit MQL4 welche Sprache der User in MT4 benutzt.

Capture_009.gif

Geschrieben
  • Autor
habe nicht getestet

hoffe es hat sich kein Fehler eingeschlichen :full:

 

kann ja dann mit in die Datei eingebaut werden :top:

 

Habs eingebaut, ein paar kleine Fehler waren drin, und ich hab noch das Symbol als Parameter dazugegeben (inkl Default und "any" option)

Neue Datei ist hochgeladen.

(Ich hab nur den Funktionsnamen umgenannt. (Damit alle TradeBox Funktionen mit TB beginnen und weil ich "?" in Funktionsnamen skeptisch gegenüber stehe ;)

 

Hab auch gleich mal für die GetDayOfWeek vorbereitet, komm nur gerade nicht dazu eine english-only-vorab Version zu schreiben.

 

btw: hab nur ich zugriff auf die Datei, oder dürfen die andere auch ändern?

 

achja: ich habs auch nicht getestet, bin also über alpha-tester dankbar ;)

Geschrieben

Mythos, besteht die Chance, der Lib jeweils eine eigene Versionsnummer zu geben?

Desweiteren würde ich (da öffentlich darauf zugegriffen werden kann) ein copyright setzen, plus einen Hinweis auf das Supporttopic, plus (falls für wichtig erachtet) einen Disclaimer.

 

Was meint Ihr dazu?

Geschrieben
  • Autor
Btw, kann man die Fehlerdialoge soweit definieren, dass in der alertbox exakt angezeigt wird, was der Fehler gewesen ist. Also eine "dau-kompatible" Messagebox.

Jup, werds mal angehen.

 

Mythos, besteht die Chance, der Lib jeweils eine eigene Versionsnummer zu geben?

Desweiteren würde ich (da öffentlich darauf zugegriffen werden kann) ein copyright setzen, plus einen Hinweis auf das Supporttopic, plus (falls für wichtig erachtet) einen Disclaimer.

 

Versionsnummer is eine gute Idee.

I bin leider nit gut darin offizielle Disclaimer zu schreiben, aber eine Text ala "Wers verwendet is selber schuld" wär vermutlich nit schlecht (vor allem bei den Bugs die ich einbau.... ;)

Geschrieben
  • Autor

Und wieder ein Update, aktuelle Version: 1.01 ;)

Hab eine kleine init dazugefügt, die im Log beim Aufruf Hallo sagt mit der Versionsnummer und auch im Chart einen Comment "powered by TradeBox " eingebaut. War mehr gaude, lass mich also auch überstimmen das es wieder raus kommt ;)

 

Ich hab ein paar kleine lib-interne Helperfunctions zur Normalisierung von Price, Stoploss und Takeprofit ausgelagert, wodurch jetzt bei fehlerhaftem OrderSend, die Price immer an den Aktuellen kurs, Stoplevel etc. angepasst werden.

Außerdem ist der Volume Bug behoben (war eigentlich ein Fehler von MT: MathMod funktioniert teils nicht richtig auf Double).

In TBOrderSend und TBOrderModify hab ich auch noch eine Expiration überprüfung eingebaut. Es wird keine Order gesendet oder dahingehend geändert, wenn die Expiration (also bei Pending Orders) über den Verfall des Contracts hinausläuft.

Achja und die Erroralerts sollten jetzt besser verständlich sein. Ich hab über die stdlib die ErrorDescription verwendet.

 

Ich hab auch den Datei header ein bissl aufgepeppt... aber noch eher stümperhaft. Eine Frage wegen Copyright: Wer hat jetzt das Copyright auf die Lib? Soll ich als Copyright Tom-Next schreiben? Weil Mythos oder Markus Kügerl wär nicht richtig, da wirs ja zusammen erarbeiten...

 

achja: da mir wie immer die Zeit zum testen fehlt, freu ich mich über alpha-test-berichte und code-zerpflücker ;)

Geschrieben
Und wieder ein Update, aktuelle Version: 1.01 ;)

[..]

[..]

 

:bbg:

 

Ich hab auch den Datei header ein bissl aufgepeppt... aber noch eher stümperhaft.

 

Finde ich jetzt nicht. Und....irgendwo muss man ja mal anfangen. Mir gefällts.

Wen es interessiert, hier der Intro Bereich der Datei

 

//+------------------------------------------------------------------+
//|													 TradeBox.mq4 |
//|Diese Library beinhaltet einige häufig verwendete Funktionen,	 |
//| die das Coden von EAs und Scripts vereinfachen sollen.		   |
//|Für Fragen und Anregungen: Es gibt ein Supporttopic:			  |
//|  http://www.tom-next.com/community/MQL-Library-mit-Standardfunktionen-t32132.html
//|
//|Auf diese Lib gibt es keinerlei Garantie, wer sie verwendet ist   |
//| selbst für Schäden und Verluste verantwortlich.				  |
//+------------------------------------------------------------------+

#define VERSION_NUMBER 1.01

//====================================================================
//
//Change Log:
//#1.01:
//added helper functions:
// normalizePrice,normalizeStopLoss, normalizeTakeProfit and integrated
// them into TBOrderSend and TBOrderModify
//added init with VersionNumber and Comment.
//added check for Contract Expiration in TBOrderSend and TBOrderModify
//#1.0:
//~included some useful functions, debugged the lotsize calculations (MT Bug!)
//
// TODO:
// - string TBGetDayOfWeek(datetime date) implementieren
//
//====================================================================
//existing functions:
//					 ~TRADING FUNCTIONS~
// int TBSendOrder(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit, string comment,int magic, datetime expiration)
// int TBModifyOrder(int ticket,double price,double stoploss,double takeprofit, datetime expiration)
//
//					 ~ORDER INFORMATIONS~
// bool TBIsTodayOrdersOpen(string symbol= "",int type=-1, int magic=-1) 
//
//====================================================================

 

 

 

Ganz große Klasse => Versionsnummer und ChangeLog :yep:

 

 

 

 

 

Eine Frage wegen Copyright: Wer hat jetzt das Copyright auf die Lib? Soll ich als Copyright Tom-Next schreiben? Weil Mythos oder Markus Kügerl wär nicht richtig, da wirs ja zusammen erarbeiten...

 

achja: da mir wie immer die Zeit zum testen fehlt, freu ich mich über alpha-test-berichte und code-zerpflücker ;)

 

 

Schwierige Geschichte,

ich möchte nur, dass das geistige Eigentum bei den Entwicklern bleibt, die die Ideengeber bzw. die Initiatoren des Projekts waren.

 

Es wäre schön, wenn tom-next.com als "powered by" im Text vorkäme und klar, dass Supporttopic ist wichtig (vielleicht Link als tiny url), damit jeder, der die Lib von 3rd Party Quellen runterläd, weiss wo er den Support her bekommt bzw. sich nach dem Status des Projekts erkundigen kann.

 

Namen: Überlasse ich euch.

Meine Empfehlung an alle die, die irgendwann mit nem CV unterm Arm bei einem US Broker vorstellig werden wollen.

Das ist ein Projekt! Das ist mindestens ein 8 Zeiler in der Projekt-History wert. :bbg: Ich weiss, Ihr braucht das nicht, aber who knows was sich aus dieser Lib entwickelt. Eines Tages kommt Metaquotes und kauft sich die Rechte. Was dann?

 

Also - wer kein Problem hat, seine realen Daten preiszugeben, kann/ sollte das tun.

Auf jeden Fall sollte es der Nickname sein und eine valide Email, unter der euch potentielle Kunden auch nach Jahren noch erreichen.

Unser SEO ist so konfiguriert, dass die Spider den Inhalt der MQL Dateien scannen können.

Geschrieben
  • Autor
Also - wer kein Problem hat, seine realen Daten preiszugeben, kann/ sollte das tun.

Auf jeden Fall sollte es der Nickname sein und eine valide Email, unter der euch potentielle Kunden auch nach Jahren noch erreichen.

Unser SEO ist so konfiguriert, dass die Spider den Inhalt der MQL Dateien scannen können.

 

Machen wir so: ich mach noch einen "Developed by" Teil rein. Ich stell mal sicher meinen Namen inkl. emailadresse rein. Wer noch möchte das sein Name/Nickname/Email aufscheint (und auch was beigetragen hat ;), einfach posten oder PM, dann schreib ichs dazu.

Ich mach auch ein "powered by tom-next.com and tradescout.at" dazu (wenn niemand was dagegen hat, würd ich TradeScout gern dazunehmen ;)

 

Ich werd oben noch die GNU License reinpacken. Achja: was haltet ihr davon die Datei in TradeBox umzubenennen? noch wärs nicht zuviel aufwand ;)

Geschrieben
  • Autor

aktuellste Version 1.02, der Bug in der Preis normalisierung sollte jetzt endgültig behoben sein (Es stand noch ein MathMax wo ein MathMin stehen sollte ;)

 

Ich hab die Datei in "TradeBox" umbenannt, weil wir es eh die ganze zeit so nennen ;)

 

Im Header ist jetzt eine Art Public License inkl. Disclaimer, der bei uns auf der Uni meist verwendet wird. Es steht mal mein Name im Copyright. Wie gesagt, ich schreib gern weitere Namen dazu, ich will nur nix ohne Einverständiss machen.

Geschrieben
aktuellste Version 1.02

 

 

// Copyright (C) 2009
// Markus Kuegerl <kuegerl.markus@gmx.net>
//				
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//	notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//	notice, this list of conditions and the following disclaimer in the
//	documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
//	derived from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

//+------------------------------------------------------------------+
//|													 TradeBox.mq4 |
//|Diese Library beinhaltet einige häufig verwendete Funktionen,	 |
//| die das Coden von EAs und Scripts vereinfachen sollen.		   |
//|Für Fragen und Anregungen: Es gibt ein Supporttopic:			  |
//|  http://www.tom-next.com/community/MQL-Library-mit-Standardfunktionen-t32132.html
//|
//|Auf diese Lib gibt es keinerlei Garantie, wer sie verwendet ist   |
//| selbst für Schäden und Verluste verantwortlich.				  |
//|																  |
//|Mit freundlicher Unterstützung von | powered by				   |
//| www.tom-next.com and www.tradescout.at						   |
//+------------------------------------------------------------------+

#define VERSION_NUMBER 1.02

 

 

 

Nett!

Eventuell noch das Datum der letzten Änderung einbeziehen.

Geschrieben
  • Autor
Und eventuell die Versionsnummer mit in den Namen der Datei. Dann ist es nahezu perfekt.

 

das würd ich nicht, weil dann müsste man bei neuer Version alle EAs die die TradeBox verwenden, umschreiben und neu kompilieren. Aber bei einer Lib gehts genau darum, das man sie ändern/debuggen/erweitern kann und damit alle bereits geschriebenen EAs sofort weiter funzen.

 

Die Versionsnummer in den Dateinamen zu schreiben UND diesen Vorteil der Lib nicht zu verlieren, würde bedeuten, jeder der sie runterläd, muss die Datei händisch umbenennen. Ich find die Versionsnummer im Header reicht, vor allem weil die Versionsnummer eh im laufenden Betrieb auch angezeigt wird.

Ich schreib auch immer die aktuelle Versionsnummer im Downloadbereich dazu... Ist für meine Begriffe genug Redundanz ;)

Geschrieben
das würd ich nicht, weil dann müsste man bei neuer Version alle EAs die die TradeBox verwenden, umschreiben und neu kompilieren. Aber bei einer Lib gehts genau darum, das man sie ändern/debuggen/erweitern kann und damit alle bereits geschriebenen EAs sofort weiter funzen.

 

Die Versionsnummer in den Dateinamen zu schreiben UND diesen Vorteil der Lib nicht zu verlieren, würde bedeuten, jeder der sie runterläd, muss die Datei händisch umbenennen. Ich find die Versionsnummer im Header reicht, vor allem weil die Versionsnummer eh im laufenden Betrieb auch angezeigt wird.

Ich schreib auch immer die aktuelle Versionsnummer im Downloadbereich dazu... Ist für meine Begriffe genug Redundanz ;)

 

 

ok, verstehe ich. Danke für die Erklärung.

Ich kenne es nur so aus der Softwareentwicklung, das jede geänderte Version seine eigenen ID/ Rev.N# haben sollte.

Geschrieben
  • Autor
ok, verstehe ich. Danke für die Erklärung.

Ich kenne es nur so aus der Softwareentwicklung, das jede geänderte Version seine eigenen ID/ Rev.N# haben sollte.

 

sollte es auch, aber das macht man normalerweise ja nicht mit Dateinamen sondern per SVN etc. die Dateinamen selbst müssen konstant bleiben, oder ständig in allen include-Anweisungen, makefiles etc geändert werden. vergisst man dann einen Eintrag zu ändern ist das Chaos perfekt weil gemischte Versionen verwendet werden etc.

 

Also ich hab noch nie gesehen das die Dateinamen geändert werden. (zumindest nicht in der Entwicklung)

Geschrieben
  • Autor

Version 1.03 ist online.

Ich hab die Preisnormalisierung geändert sodass jetzt nicht mehr MathMod verwendet wird.

 

Zusätzlich gibt es jetzt ein "INformation Level" in der TradeBox, damit kann man von außen steuern, wieviel Output man haben will, von 0 (also auch keine alerts) bis hin zu zusätzlichem Debugoutput.

 

Bei TBOrderSend kann man nun auch die Anzahl der Wiederholungen einstellen. (-1 für maximal)

 

Weitere Details im ChangeLog

 

Wenn jemand die Zeit und Lust hat das ganze zu testen oder durchzuschauen freu ich mich natürlich.

Geschrieben

Warum nimmt ihr nicht zur Normalisierung des Preises die in mql4 dafür geignete Funktion? :wink:

 

 

http://img162.imageshack.us/img162/4493/normalizeiw0.png

Bearbeitet von titanfx

Geschrieben
  • Autor
Warum nimmt ihr nicht zur Normalisierung des Preises die in mql4 dafür geignete Funktion? :wink:

http://s8b.directupload.net/file/d/1691/qbkmz59x_png.htm

 

Du meinst NormalizeDouble?

EDIT: ok, hab grad dein Edit gelesen ;)

 

Ganz einfach: Bsp FDAX / Ger30. Ticksize 0.5, Digits: 2.

Mach ich also einen reinen NormalizeDouble, wird ein Kurs von 3500,2345 zwar auf eine "Systemfähige Zahl" angepasst, aber keine "handelbare". Ich wollte aber von Anfang an nur Preise in ganzen Ticks in den Markt schicken.

 

Edit2: Weiterer Grund: ich will selber entscheiden ob ich auf- oder abrunde ;)

 

Inzwischen hab ich aber auch noch ein NormalizeDouble auf den fertigen Wert eingebaut, damit sicher keine Probleme mit der Gleitkommadarstellung von MT passieren (was ja leider nicht selten ist).

Geschrieben
  • Autor
Ok, habe nur an Forex gedacht :wink:

Ich kenn das Problem ;) Ich glaub es würde auch keinen Error produzieren, wenn man nur NormalizeDouble verwendet, da MT nur abfragt ob der Kurs den Digits entspricht. Aber da es immer so eine Frage ist wie mit halben Ticks von Serverseite her umgegangen wird, hab ich mir gedacht: "Wenn mans selber macht, weiß man was passiert" ;)

 

Btw: Find ich klasse, das es noch jemand gibt der den Code kritisch beäugt! Big Thx!

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

Wiedermal ein kleines Update auf 1.06

 

Dazugekommen sind ein paar logfunktionen, die die wichtigsten Infos über _geschlossene_ Orders in eine csv-logdatei schreiben.

 

und die schon lange geplante Funktion zur Ausgabe des aktuellen Tages(als String), derweil in Englisch.

 

freu mich wie immer über kommentare, Bugmeldungen, Wünsche etc.

  • 2 Wochen später...
Geschrieben

Danke die Library. Ich habe sie nach libraries kopiert und in mqh umbenannt.

Anders hat er sie nicht gewollt und so stand es in der Hilfe. Hoffe, dass ist so korrekt.

 

Ich habe noch eine Frage bzgl. der Codezeile

 

#import "stdlib.ex4"
 string ErrorDescription(int error_code);

 

Warum muss ich die Funktion separat importieren und kann nicht die .mqh Datei includen?

 

Ach ja, noch etwas. Warum muss eine init() und deinit() Funktion vorhanden sein?

Nur als Ausgabe der Versionsnummer? Das verhindert doch in meinem EA eine eigene

Defintion dieser mitunter wichtigen Methoden.

 

Wenn ich TradeBox inkludiere, kann ich im Backtest keine Inputs mehr eingeben.

Hm ... das gefällt mir nicht. Vielleicht liegt es an der nicht korrekten Einbindung der Library...

 

Weitere Fragen und Anmerkungen werden folgen. Danke auf jeden Fall für die gute Arbeit.

Eine Funktion um zu bestimmen, ob ein neuer Tag angefangen wäre auch schön :-)

Und zwar unabhängig von EA oder Indikator, wenn das geht.

 

Beste Grüße

Darth

Bearbeitet von DarthTrader

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.