|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Mehrere EAs auf einem Konto
Moin Zusammen,
also folgende Fragestellung: Ich trade zb. 3 versch. EAs auf einem Konto. Jeder EA darf/soll max. 1 Order eröffnen können. Dafür habe ich bei allen jeweils eine Abfrage Orderlots()<1 eingebaut. Wie ich das jetzt im Trading sehe, heisst das ja im Endeffekt, wer zuerst kommt malt zuerst - also EA1 eröffnet eine Position und damit sind EA2-3 blockiert bis diese Position geschlossen wird. Meine Idee wäre das mit der Abfrage nach der MagicNum oder einem Comment oder so zu umgehen... Ist das so richtig gedacht? Und wie löst bzw. habt ihr solche Probleme behoben? Oder gibt es dazu schon einen Thread? Gruss |
|
|||
Bereits mehrmals gepostet:
Code:
void CheckOrders() { BuyOrder = false; SellOrder = 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) BuyOrder = true; if (OrderType() == OP_SELL) SellOrder = true; } } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Sollte wohl OrdersTotal() heißen.
Du könntest das von Traderdoc gepostete verwenden. Wenn du allerdings einfach nur umgehen willst, das EA2-3 blockiert werden, so darfst du halt nicht abfragen, ob OrdersTotal()<1 ist, sondern fragst einfach ab, ob es schon eine Order vom entsprechenden EA gibt (MagicN.). Code:
bool orderset = false; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber() == DEINE_MAGIC_NUMBER) orderset = true; } } |
|
|||
Schaut mal was ich da jetzt gebaut habe...
läuft auf den DAX_1min 1) EA soll eine Stoporder platzieren und zwar pro neuer Minute/Candle eine neue, respektive im aktuellen Fall zb. auf das High[1]+6 2) wurde Stop nicht getriggert soll er nach 1min/Candle gestrichen werden 3) Insgesamt soll es so sein das bestehende Orders im Account zb. diskritionäre oder durch andere EAs nicht beachtet werden. PHP-Code:
Wie gesagt, bin noch ganz am Anfang...was mache ich falsch!? |
|
|||
Code:
//simple Test Order die einfach platziert bei Neuer Candle platziert werden soll => und Streichung der vorherigen StopOrder if(orderset=true) { if (0<1) //Bedingung Hauptsache es geht die Order raus { OrderNumber = OrderSend(Symbol(), OP_BUYSTOP,0.1,High[1]+6, 5,12500, 0,"Test",202,TimeCurrent()+660,Blue); BarsSinceEntry=TimeCurrent(); } } 2. Erst willst du pro EA nur eine Order und jetzt setzt du immer eine neue, wenn orderset == true, also wenn schon eine Order von diesem EA vorhanden ist? 3. Die zweite If-Bedingung ist sinnlos. Wieso hast du sie drinne? 4. Wenn du als Preis den Höchstkurs mit 6 addierst, kann es nicht vernünftig werden. Rate mal was passiert, wenn du zu einer Gleitpunktzahl 6 addierst (z.B. 1.12345 + 6). Code:
if (BarsSinceEntry > 0 && TimeCurrent() > BarsSinceEntry + PeriodSeconds(PERIOD_CURRENT)) 1000 > 0 && 1060 > 1060 Na, wo liegt der Fehler? Warum 1060 > 1060? Weil du in der if davor (if(orderset=true)) immer BarsSinceEntry auf TimeCurrent() setzt. Sofern zwischen diesen beiden Codeblöcken nicht mindestens 1 Sekunde vergangen ist, so ist TimeCurrent() nie größer als BarsSinceEntry. Außerdem erübrigt sich an paar Stellen auch eine Abfrage, weil du in den ganzen Codeblock ja erst mit der nächsten Kerze kommst. Code:
bool res = OrderDelete(OrderTicket()); if (res) BarsSinceEntry = 0; break; Print(GetLastError()); Geändert von next user (12.07.17 um 14:52 Uhr) |
|
|||
Danke next user!
Der EA soll erst mal auf den DAX laufen - kein Forex. Daher passt das schon mit dem Punkten. Aber sicherlich ist es sauberer auch hier auf Ticks/Pips umzustellen. Verstehe ich das richtig, das wenn hier: PHP-Code:
orderset == false steht, das Dann immer Trades geschickt werden, egal ob schon Orders von anderen EAs gefilled wurden und pending sind!? Korrekt??? Bzgl. des Orderstreichens über BarsSinceEntry wie ich es habe klappt aber super!??? |
|
|||
Zitat:
Zitat:
Bei orderset == false werden keine neuen Orders gesetzt. Zitat:
Muss kurz weg. Bin in'ner Stunde wieder da. |
|
|||
Also ich habe es live neben dran laufen!
Nur wenn ich es so eingebe, laufen mit zwei EAs trades! Mit ==false , jeweils in jedem EA PHP-Code:
|
|
|||
Zitat:
Code:
bool orderset = false; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber() == 202 ) orderset = true; } } //simple Test Order die einfach platziert bei Neuer Candle platziert werden soll => und Streichung der vorherigen StopOrder if(orderset=true) { if (0<1) //Bedingung Hauptsache es geht die Order raus { OrderNumber = OrderSend(Symbol(), OP_BUYSTOP,0.1,High[1]+6, 5,12500, 0,"Test",202,TimeCurrent()+660,Blue); BarsSinceEntry=TimeCurrent(); } } Im nächsten Teil fragst du aber ab, ob orderset == true ist und eröffnest in dem Fall eine weitere Order. Bei dem, was du bisher geschrieben hast, soll eine Order ja nur gesetzt werden, wenn noch keine vom EA vorhanden ist. In dem Fall musst du abfragen, ob orderset == false. |
Lesezeichen |
Stichworte |
ea, expert advisor, mehrere ea, mehrere expert advisor, mql4, programmierung, programmierung metatrader, programmierung mql4 |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|