Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Je ein Trade auf verschiedenen Chartfenstern (http://www.expert-advisor.com/forum/showthread.php?t=6732)

BodoM 30.07.20 15:32

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

traderdoc 30.07.20 18:06

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

BodoM 30.07.20 22:07

Zitat:

Zitat von traderdoc (Beitrag 44136)
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

Hi traderdoc ,
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

traderdoc 30.07.20 22:58

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
}

traderdoc

BodoM 31.07.20 10:08

Zitat:

Zitat von traderdoc (Beitrag 44145)
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
}

traderdoc

Oh, wow - und das um diese Uhrzeit. Vielen herzlichen Dank. Das werde ich ausprobieren.

BodoM 03.08.20 15:44

Zitat:

Zitat von traderdoc (Beitrag 44145)
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
}

traderdoc

Das hat leider irgendwie nicht funktioniert.
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... }

Fehlermeldung beim Kompilieren bekomme ich keine, aber es gelingt mir trotzdem nicht, mehrere Trades in mehreren Fensten zu starten.
Sieht irgendjemand meinen Denkfehler?

Gruß
BodoM

BodoM 12.08.20 14:48

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:00 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum