|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Code Korrekturlesen: EA + manuelles Trading
Wäre jemand bitte so nett, meinen Code Korrektur zu lesen.
Ich hatte meinen EA geladen, der war erst mal inaktiv, also eröffnete ich manuell eine Position. Die lief immer noch, als eigentlich der EA das Entry Signal erhielt (und da ich gut im Plus war, wollte ich die Position auch nicht schließen). Der EA reagierte aber nicht. Als ich meine Position schloß, machte der EA seine Positionen auf - dumm gelaufen, viiieel zu spät um den Profit zu erreichen, den ich haben wollte. Schuld daran war folgende Zeile (immer wieder bin ich dieser Zeile begegnet): Code:
if( OrdersTotal()==0 ) // && Signal, dann eröffne Position Code:
//====================== TRADING =========================================== // !!! if OrdersTotal()==0 interferes with manual trading at the same time for(n=0; n<OrdersTotal(); n++) { if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)) { //====================== no open orders by this EA ========================= if ( OrderMagicNumber()==EANo // this EAs number && OrderComment()==EAname // this EAs comment && OrderSymbol()==Symbol() // this market && OrderType()!=OP_BUY // no buy order from EA && OrderType()!=OP_SELL // no sell order from EA ) { // wait for buy/sell signal, then action } // == end no open positions by this EA //====================== some kind of open order =========================== // ===== open L running else if( OrderMagicNumber()==EANo // this EAs number && OrderComment()==EAname // this EAs comment && OrderSymbol()==Symbol() // this market && OrderType()==OP_BUY // long orders ) { // manage open L running } // == end open L running //===== open S running else if( OrderMagicNumber()==EANo // this EAs number && OrderComment()==EAname // this EAs comment && OrderSymbol()==Symbol() // this market && OrderType()==OP_SELL // short orders ) { // manage open S running } // == end open S running } // == end OrderSelect(n,SELECT_BY_POS,MODE_TRADES) } // == end for(n=0; n<OrdersTotal(); n++) |
|
|||
Naja, manuelles und automatisches Traden kann man ja ganz leicht durch MagicNumber, Kommentar oder sonstwas trennen.
Hast'e ja auch (jetzt) im Code. Zum Code: Gleiche Bedingungen sollten immer zusammengefasst und nur einmal abgefragt werden. Ich habe deinen Code etwas reduziert. Ich persönlich setze mehrere gleiche Funktionsaufrufe in eine Variable, daher habe ich hier einfach mal den Typ gespeichert. Code:
uchar orderType = 0; for(n=0; n<OrdersTotal(); n++) { if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)) { orderType = OrderType(); if(OrderMagicNumber() == EANo && OrderComment() == EAname && OrderSymbol() == Symbol()) { if(orderType != OP_BUY && orderType != OP_SELL) { //====================== no open orders by this EA ========================= // wait for buy/sell signal, then action } else if(orderType == OP_BUY) { // long orders // manage open L running } else { // short orders // manage open S running } } } } |
|
|||
Danke Dir vielmals.
Zitat:
Eine zusätzliche Frage: geht es nicht schneller, wenn man die sowieso schon vorhandene OrderType() benutzt, anstatt daß jedesmal Deine orderType ersetzt werden muß? |
|
|||
Zitat:
Integer-Variable zum vergleiche ect. Bei jedem neuen Schleifendurchlauf ist "OrderType()" wieder eine andere Sache. Ob meine Variable oder "OrderType()" spielt keine Rolle. Was aber einen unterschied macht, ist, ob eine Funktion unnötig mehrmals aufgerufen wird und dabei immer den gleichen Wert zurückgibt, oder ob man diesen nur einmal abfängt und dann mit der gespeicherten Variablen weiterarbeitet. |
|
|||
Zitat:
Stimmt, Betonung auf unnötig weil immer derselbe Wert, werde meinen Code daraufhin durchsehen, was sich sonst noch so optimieren läßt (obwohl die Optimierung eigentlich zum Schluß kommen sollte, wenn alles andere stimmt). Danke für den Hinweis. AVT |
Lesezeichen |
Stichworte |
code korrektur, ea struktur, mql4, programmierung, programmierung metatrader, programmierung mql4 |
|
|