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

habe ein Fehler gefunden

 

Ask, Bid, Point musst du auch als MarketInfo geschrieben werden.

Geschrieben
:grin: danke, aber wie gesagt bis jetzt ist erst TBOrderSend ausreichend kommentiert... und die verwendeten Namen könnten auch noch verbessert werden (ich sag nur LOOPSCHWELLE :grin: )

 

 

welche Funktion hat die LOOPSCHWELLE ?

Geschrieben
was hällst du davon wenn wir die loopschleife nutzen als 2 und 3... Versuch(Aufgabe wiederholen bei Fehler) falls ein error z.b. Trade Server is busy! ? (mit Pause in millis.)
Geschrieben
wie du mit MathMax(), MathMin(), MathMod() arbeitest finde ich absolut Klasse :grin:
Geschrieben

Hmm bin ein wenig sprachlos….

ich hatte die Befürchtung dass die persönliche lib zu speziell auf den jeweiligen Programmierer mit seinen vorlieben abgeschnitten ist.

Deine Funktionen sind ja sehr vielseitig einsetzbar und ganz und gar nicht spezialisiert.

DICKES DANKE dafür. :grin:

Dein try and error loop gefällt mir…

Geschrieben
wie du mit MathMax(), MathMin(), MathMod() arbeitest finde ich absolut Klasse :discuss:

:grin:

:grin:

:grin:

linked.gif Let us start with the most simple, but still used and helpful mathematic functions.

Geschrieben
Ask, Bid, Point musst du auch als MarketInfo geschrieben werden.

 

:grin:

 

:discuss: MetaEditor

mi.jpg

Was bedeutet denn der Value ? v.jpg

Geschrieben
  • Autor

@all: ich werd ja ganz verlegen... :grin: :grin: :grin:

@Ecart: Fragen zu MathMax etc? Als Mathematiker bin ich gewohnt mit den Dingern rumzuschmeißen ;)

@siscop: ich weiß, das problem hab ich auch immer beim schreiben von solchen Funktionen, sie sollen ja nicht für ein System speziell sein sondern allgemein einsetzbar, dadurch reduziert sich leider auch die Anzahl an möglichen Funktionen.

 

was hällst du davon wenn wir die loopschleife nutzen als 2 und 3... Versuch(Aufgabe wiederholen bei Fehler) falls ein error z.b. Trade Server is busy! ? (mit Pause in millis.)

Was meinst du mit "als 2 und 3"?

Die while macht ja genau das oder? Ich versuch die Order zu schicken, wenn ein Error auftritt wird der Versuch wiederholt bis zu oft versucht oder die Order rausgeht. Und bei den Errors "BUSY" oder "TOO FREQUENT" wird per Sleep ein bissl gewartet (ob die Zeiten Sinn machen weiß ich ehrlich gesagt nicht ;)

 

:discuss: MetaEditor

Was bedeutet denn der Value ?

 

Der ist nur von interner Bedeutung. Die Request_Identifiers (wie MODE_TICK, MODE_SPREAD etc.) sind eigentlich vordefinierte Konstanten, MarketInfo() weiß jetzt aufgrund der Zahl die übergeben wird, welchen Wert es zurückgeben soll. MarketInfo(Symbol(),MODE_LOW) ist also genau das gleiche wie MarketInfo(Symbol(),1) nur leichter zu lesen ;)

 

Ich hab mir gedacht ich werd den Startpost erweitern mit einer TODO-Liste in der die noch ausständigen Verbesserungen und Bugs aufgeführt sind.

 

EDIT: hoppla, hab FinGeR's Frage zur LOOPSCHWELLE ganz übersehen: Wenn die OrderSend einen Error produziert versucht er es in der While immer wieder (also bis result nicht -1 ist), damit das nicht unendlich wird, hab ich den loopcount der einfach mitzählt wie oft er schon versucht hat, sobald loopcount LOOPSCHWELLE erreicht wird abgebrochen.

Bearbeitet von Mythos

Geschrieben
  • Autor
Ich hab mir gedacht ich werd den Startpost erweitern mit einer TODO-Liste in der die noch ausständigen Verbesserungen und Bugs aufgeführt sind.

 

Hmm man kann anscheinend den ersten Post im Topic nicht mehr editieren (zumindest geht es bei hier nicht). Ich hab in der Beschreibung im DL-Bereich eine CHANGES-Liste angelegt, die wird bei Bedarf um eine TODO und BUG Liste erweitert ;)

 

Bid,Ask,Point ist geändert (war natürlich auch in TBOrderModify falsch... mea culpa),

LOOPSCHWELLE hab ich fürs leichtere Verständnis in MAX_TRIALS umbenannt

Geschrieben
Was bedeutet denn der Value ?

 

In MQL sind bestimmte Werte, die Du benutzen kannst aus Verständlichkeitsgründen als Konstanten (ich sag das mal so allgemein hier: obs nu Präkompileranweisungen a la #define sind oder int, das würde dann doch noch viel spezieller) definiert. Du kannst alternativ die Konstante in einem Funktionsaufruf verwenden (z.B. MODE_LOW), kannst aber genauso gut 1 schreiben.

 

Bsp:

double bid =MarketInfo("EURUSD",MODE_BID);

 

ist äquivalent mit

 

double bid =MarketInfo("EURUSD",9);

 

 

Das macht man (so kenn ich es zumindest), damit man nach >3 Monaten Codeabstinenz (oder aber, wenn jemand anderes in Deinem Code weiterarbeiten soll) nicht wie ein Schwein ins Uhrwerk guckt, sondern schneller versteht, was man an der Stelle eigentlich gemacht hat. Selbst wenn der Code brauchbar kommentiert ist, ist er generell mit Konstanten-Text besser lesbar als mit Zahlen.

 

Alternativ hätten die MT-Entwickler auch Funktionen schreiben können wie:

 

MarketInfoBid(string symbol), MarketInfoAsk(string symbol),... allerdings gäbe es viel mehr Funktionen, wie Du Dir leicht denken kannst.

 

 

In unserem Fall gibts nur eine Funktion MarketInfo, die die verschiedendsten Abfragen bearbeitet.

Das ist ne reine Entwicklerentscheidung.

 

 

Was sie auch hätten machen können: MarketInfo("EURUSD","MODE_BID") - statt ner Konstanten (Integerwert) nen Text wählen.

Sie haben sich für den "klassischen" Weg entschieden mit (Integer)-Konstanten; im übrigen ist der Vergleich von Strings (Texten) aufwendiger, da Du meist mehrere Character/Buchstaben (welches MT-intern ja auch nur Integers sind) miteinander vergleichen musst. Das wiederum ist ne Performance-Frage.

 

In einem Aufruf, wo mode ein Integer ist (wie bei MarketInfo()):

 

 

switch(mode){

 

case(MODE_BID): //intern: teste bedingung mode == 9 ?

//frage bid-wert ab

break;

 

case(MODE_ASK): //intern: teste bedingung mode == 10 ?

// frage ask-wert ab

break

}

 

geht das ganz viel schneller als wenn getestet würde

 

ersterBuchstabeVon_mode == "M" && zweiterBuchstabeVon_mode == "O" usw.

 

 

 

2. Vorteil bei der Verwendung von Integers/Konstanten: Man braucht weniger Daten zwischen Server (MT-Server) und Client (Deine MT-Software) hin- und herzuschicken.

 

Programmieren heißt meist: es gibt nicht DIE einzig wahre Lösung, sondern eher "viele Wege führen nach Rom", manche sind halt "eleganter"/"performanter" oder einfach nur historisch bedingt (weil mal Speicher/Prozessorleistung/Bandbreite usw knapp war).

Geschrieben
Hmm man kann anscheinend den ersten Post im Topic nicht mehr editieren (zumindest geht es bei hier nicht).

 

Die Editzeiten zu begrenzen, ist nicht unüblich, in vielen Fällen auch dringend erforderlich.

Problematisch ist es immer dann, wenn nachträglich Aussagen oder Informationen geändert/ hinzugefügt werden, nachdem sie von anderen Usern gelesen wurden bzw. bereits auf den originalen Beitrag geantwortet wurde.

Das ist ein echtes Problem, vor allem wenn die Edit's nicht als solche gekennzeichnet sind bzw. der User einen entsprechenden Vermerk im Beitrag hinterlässt.

Um Rechtschreibfehler zu beheben oder den Satzbau zu optimieren sind 60 Minuten (Usergruppe 'Addict') selbstredend eine zu kurze Spanne.

Beim Updaten eines Threads wie diesem hier, ist es sogar kontraproduktiv.

 

Auch in dem Fall wären wir auf eine Individuallösung angewiesen, was bedeutet, dass wir uns Gedanken machen müssen, wie wir das Problem für alle Seiten lösen können. In anderen Worten, wir werden etwas programmieren lassen, um mittelfristig dieses Thema besser händeln zu können.

Geschrieben
  • Autor
Auch in dem Fall wären wir auf eine Individuallösung angewiesen, was bedeutet, dass wir uns Gedanken machen müssen, wie wir das Problem für alle Seiten lösen können. In anderen Worten, wir werden etwas programmieren lassen, um mittelfristig dieses Thema besser händeln zu können.

 

War eigentlich gar nicht als Aufforderung für Veränderung gedacht, eher als "warum ich nicht mache was ich sage" ;)

In unserem Fall reicht das Editieren der File-Beschreibung IMO vollkommen aus.

Geschrieben
In unserem Fall reicht das Editieren der File-Beschreibung IMO vollkommen aus.

 

Früher oder später kommt der Aufschrei :grin: , das ist so sicher wie das Amen in der Kirche. Wir müssen ja auch weiterdenken,

denn alles was die Software übernimmt/ übernehmen kann - darum muss sich der Staff nicht kümmern.

 

Ich hab's mir mal notiert, mal sehen wie wir das umsetzen.

Geschrieben

@Krümel&Mythos

 

Danke Männer, so komme ich erheblich besser weiter... :grin:

... die .:'stillen':. Mitleser ebenfalls... :grin:

Geschrieben

Downloadbereich :: last update Gestern, 12:05 PM

Admin walte deines amtes! :schimpf:

Geschrieben
im Downloadbereich sind immer noch die alten Files zufinden :schimpf:

 

Unten im Bereich 'Saved Versions' sind die alten Versionen gespeichert. Die letzte = aktuelle Version stammt von heute Mittag, 12:54 Uhr.

 

Gibt es eine Version, die vom DL Modul nicht akzeptiert wurde?

Geschrieben

habe ich schon zu viel Wein getrunken :schimpf:

 

ich sehe da nur die alten Files (siehe Screenshots)

Capture_005.gif

Geschrieben

Download.Library.png

 

Die neueste Version ist immer über den DL Button erreichbar.

Die anderen Files sind die zuvor gesicherten (passiert automatisch).

 

 

Noch ein Tipp: Ihr könnt euch benachrichtigen lassen, sobald eine neue Version/ neuer DL vorliegt.

Option: Notify me when this file is updated

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.