|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Je ein Trade auf verschiedenen Chartfenstern
Hallo zusammen,
ich hätte da mal eine Frage. Ich habe einen EA programmiert und möchte diesen zu drei verschiedenen Zeiten starten lassen. Dazu habe ich den EA einfach drei mal als MQ4-Datei abgespeichert (...A,B,C), die entsprechenden Zeitenänderungen in jedem EA vorgenommen, die jeweilige MagicNumber geändert und diese dann auf drei Chartfenster desselben Symbols verteilt. Jetzt kommt das eigentliche Problem: Da ich möchte, dass jeder EA für sich immer nur EINEN Trade startet, habe ich das Starten mehrerer Trades mittels "if (OrdersTotal()==0)" unterbunden (also es darf nur EIN Trade starten, wenn keiner aktiv ist, was ja auch funktioniert). Leider scheint sich aber auch auf die anderen beiden EAs in den anderen beiden Chartfenster auszuwirken und solange der erste EA seinen Trade gestartet hat, weigern sich leider die anderen beiden, ebenfalls einen Trade zu starten. Ich vermute jetzt, dass das OrdersTotal() sich auf alle Trades im Konto bezieht, weiß jedoch keine Lösung, wie ich den Befehl dahingehend umschreiben könnte, damit sich das nur auf den entsprechenden EA bezieht. Geht das überhaupt? Wenn ich jetzt z.B. statt (OrdersTotal()==0) dann (OrdersTotal()< 3) schreiben würde, befürchte ich, dass dann drei Trades im selben EA gestartet würden, was ich ja vermeiden möchte. Weiß jemand eine Lösung hierfür? Bin irgendwie ein wenig am verzweifeln... Grüße BodoM |
|
|||
Also, erstens würde man nur 1 EA benutzen, indem die drei Zeitvorgaben definiert werden.
Wenn wie in Deinem Fall, dann werden über OrderSelect() ganz normal die offenen Orders durchsucht und lediglich nach der MagicNumber gefiltert. D.h wenn nach OrderSelect() dann die Abfrage über if (OrderMagicNumber() == MagicNumber) true ist, existiert bereits für diesen EA eine Order. Lässt man dann also bei true jeweils ein Flag (z.B. flag1, flag2 und flag3 für die jeweiligen drei EAs) setzen, weiss man am Ende von OrderSelect(), zu welchem EA bereits die Order gesetzt wurde. Ist ein Flag false ist keine Order in diesem EA offen und könnte ggf. gesetzt werden. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
erst mal herzlichen Dank für deine Antwort. Den Abschnitt oben habe ich jedoch nicht wirklich richtig verstanden. Kannst du das mit dem "flag" noch etwas näher erläutern. Vielleicht anhand eines Codeschnipsels? Gruß BodoM |
|
|||
Code:
flag = false; for (int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { flag = true; } } } } if (!flag) { //ggf. Action }
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
|
|
|||
Zitat:
Es startet nach wie vor nur ein Trade. Ich habe das so umgesetzt: Code:
flag = false; for (int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { flag = true; } } } } if (flag != true) { action... } Sieht irgendjemand meinen Denkfehler? Gruß BodoM |
|
|||
Hi alle,
ich kann es nicht wirklich erklären, aber jetzt ging das mit diesem Script DOCH. Ich habe keine Ahnung warum das vorher nicht ging, aber jetzt, nach undendlicher Herumprobiererei, ist dann doch ein zweiter Trade in einem anderen Währungspaar gestartet. herzlichen Dank nochmals an den traderdoc. Wollte ich nur loswerden, falls jemand ein ähnliches Problem hat. Grüße BodoM |
Lesezeichen |
Stichworte |
expert advisor, orderstotal |
|
|