|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
MagicNo integrieren & Mehrfachtrades verhindern
Hallo!
Nachdem ich mich nun ein bißchen hier und anderweitig im Netz nach EAs umgesehen habe, die zu meinen Ansichten und meinem Stil passen, habe ich zwar an vielen Stellen große Augen gemacht (und wäre am liebsten an 20 Stellen gleichzeitig reingesprungen! ), aber entweder habe ich nicht so richtig kapiert, was die tun, oder ich wurde beim Lesen der Beschreibungen skeptisch ob der Ertragsaussichten. Einen habe ich gefunden, der meinen Grundvorstellungen schon recht gut entspricht, den ich aber gerne um so einige Funktionen anpassen und erweitern würde. Allerdings bin ich mit der EA-Programmierung noch gänzlich unbeleckt... Habe mich durch den (kurzen und übersichtlichen) Code gegraben und verstehe nun Zeile für Zeile, was das Ding tut. Soweit schon mal stolz! Genug gesabbelt, hier die Fragen: MagicNumber Momentan hat er keine Magic Number. Habe ihn aufm Demo in EURUSD und GBPUSD laufen. Die MaxTrades will ich beibehalten, allerdings zählt er so aktuell auf beiden Paaren zusammen und sperrt dann, wenn die Summe (bsp. 20) im Gesamten erreicht ist. Ich will aber, dass er 20 PRO Paar aufreisst!? Wie könnte ich eine Magic integrieren und dann entsprechend mit abfragen? Mehrfachorders Aktuell ist gegeben: "X Pips von Wert Y = Order raus"... Daher: Schwankt der Wert dann mehrmals über diese Stelle, wird jedes Mal eine Order aufgerissen. Wie könnte ich das vermeiden? Kann ich irgendwie die offenen Trades nach diesem Einstiegswert durchsuchen und falls vorhanden den Trade unterbinden? Danke für eure Hilfe und Geduld. |
|
|||
Hallo Forexcrawler,
da braucht man keine MagicNumber, sondern es müßte die Stelle abgeändert werden, die die Trades zusammenzählt. D.h. Am besten in der Routine des Checks der offenen Orders müßte dann in die Anzahl des einen WP und er des anderen WP separiert werden und evtl. noch ein bis zwei andere Anpassungen vorgenommen werden. Zu den Mehrfachorders: Das hört sich so an, als wäre der EA ein Grid-Trader. Einstiegspunkte kann man am besten mit Flags kennzeichnen. Das sind Variablen des Typs bool, für die nur der Zusandte existiert true oder false. D.h. existiert der Trade an der Stelle dann ist die Variable true usw. Aber das ist aus der Ferne etwas kompliziert zu erklären, zumal Du geschrieben hattest, nicht programmieren zu können. Da wundert es mich schon, dass Du nunmehr Zeile für Zeile verstehst. traderdoc |
|
|||
Hallo ihr beiden,
vielen Dank für die Antworten! Habe zwischendurch weiter gemacht und eine Magic eingebaut. Von außen einstellbar, schreibt sich bei Ordererteilung mit in den Kommentar und die nächste Stelle. So weit, so gut. Auch auf die Ideemit dem WP bin ich mittlerweile gekommen. :P Das mit den Flags verstehe ich zwar, aber in der Tat noch keinen Dunst für die Umsetzung. Habe im Netz einen EA zum abgucken gefunden, der macht eine Schleife mit Orderselect über alle Trades und last sich die Einstiegszeit ausgeben. Wollte das so abwandeln, dass er die Einstiegspreise nimmt und nur ordert wenn kein gleicher Preis gefunden? Zu deiner Frage, Traderdoc: Ich habe mal vor rund 15 Jahren Anwendungsentwicklung gelernt und habe bis vor 8 Jahren Programme geschrieben. Allerdings für Industriesteuerungen (SPS). Das gundlegende Verständnis ist also wohl schon da, aber die Syntax muss ich mühsam nachschlagen... Mit C(++) war ich nur in der Berufsschule in Berührung |
|
||||
Zitat:
Ich würde mal testen mit kalkuliertem einstiegspreis und der hälfte der gridpips oder ähnlich, müsstest mal testen. Also (entweder keiine order offen) ODER (es sind orders offen UND um kalkulierten einstiegspreis +- (gridpips/2) befindet sich aktuell keine offene order) ... |
|
|||
Kleine Schritte...
Was haltet ihr für die Zählung von aktuell in diesem WP offenen Orders davon? Code:
if(OrdersTotal()>0){ for(int oc =0;oc<=OrdersTotal();oc++){ OrderSelect(oc,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic){ CurrentTrades = CurrentTrades++; } } } |
|
||||
Code:
int GetOpenTrades() { int CurrentTrades=0; for (int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if (!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol()!=symbol) continue; if (OrderMagicNumber()!=magicnumber) continue; { CurrentTrades++; } return(CurrentTrades) } if (GetOpenTrades()==0) öffne order etc. pp. |
|
|||
Super, danke!!!!
Habe noch ein paar Zeichen wie } und ; eingestreut, nun lässt es sich kompilieren. Zum Verständnis: Du nimmst alle Orders, ziehst die ab, die nix mit uns zu tun haben und erhöhst für jede relevante den CurrentTrade? Der geht dann am Ende an die Globale zurück, die dann die Anzahl der offenen Trades enhält, wodurch is sie mit Globale < maxTrades als Bedingung nutzen kann? |
|
||||
hehe, jo, flüchtigkeitsfehler.
Auch die vorhandenen variablen magicnumber und symbol mußt durch Deine ersetzen ... Ja, es wird durch alle offenen trades gelooped und addiert (wobei hier alle diejenigen gefiltert werden wo symbol und MagicNumber nicht passen). global ist die currenttrade-variable nicht, sie besteht nur innerthalb der funktion. Die Funktion gibt einen Inegerwert zurück (0 wenn keine offenen trades vorhanden sind), ansonsten die Zahl der offenen trades. Ach ja, das ist "old mql4-syntax", inwieweit daß jetzt mit dem aktuellen build anders läuft weiß ich nicht, noch nicht. Ich habe mich mit dem neuen style noch nicht befasst, mir steht der Kopf aktuell auch woanders, bzw. liegen meine Prioritäten anders sodaß ich derzeit wenig bis gar nicht progge. |
Lesezeichen |
Stichworte |
magic id, magicnumber, mehrfachorder, mehrfachorders, mql4, order, programmierung, programmierung metatrader |
|
|