Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 3978
Beiträge: 37905
Benutzer: 6.282
Aktive Benutzer: 381
Links: 80
Wir begrüßen unseren neuesten Benutzer: SimplePlan
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 10 Stunden
- SimplePlan
vor 19 Stunden
- Robbin
vor einem Tag
- forexphong...
vor 3 Tagen
- sunap
vor 4 Tagen
- IInvest84

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 45
Gesamt: 46
Team: 0
Team:  
Benutzer:  traderdoc
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By next user
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.03.18
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 58
AVT befindet sich auf einem aufstrebenden Ast
Post 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
Logisch, OrdersTotal bezieht sich auf den gesamten Account, und da ich drin war, war die Anzahl ==1 und der Entry verboten. Ich habe das umgeschrieben und bitte Euch mal einen Blick auf die Struktur zu werfen, ob das jetzt mit manuellem Trading vereinbar ist - oder ich noch irgendwas übersehen habe.
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++)
Vielen Dank. AVT
__________________
heute schon gelacht?
Mit Zitat antworten
  #2 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
... ob das jetzt mit manuellem Trading vereinbar ist ...
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
         }
      }
   }
}
Mit Zitat antworten
  #3 (permalink)  
Alt 13.03.18
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 58
AVT befindet sich auf einem aufstrebenden Ast
Standard

Danke Dir vielmals.

Zitat:
Zitat von next user Beitrag anzeigen
Gleiche Bedingungen sollten immer zusammengefasst und nur einmal abgefragt werden.
Ich persönlich setze mehrere gleiche Funktionsaufrufe in eine Variable, daher habe ich hier einfach mal den Typ gespeichert.
Code:
uchar orderType = 0;
Die Wiederholungen sind nur für das Step-by-Step gedacht, um zu sehen, ob und welche Bedingungen erfüllt sein müssen, damit die Logik stimmt. Ich bevorzuge in der Endfassung alles in eine Funktion zu packen.

Eine zusätzliche Frage: geht es nicht schneller, wenn man die sowieso schon vorhandene OrderType() benutzt, anstatt daß jedesmal Deine orderType ersetzt werden muß?
__________________
heute schon gelacht?
Mit Zitat antworten
  #4 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
Eine zusätzliche Frage: geht es nicht schneller, wenn man die sowieso schon vorhandene OrderType() benutzt
Nein. In deinem Code rufst du 4 mal die Funktion "OrderType()" auf. Bei mir mache ich das nur einmal und habe dann die konstante
Integer-Variable zum vergleiche ect.

Zitat:
Zitat von AVT Beitrag anzeigen
... anstatt daß jedesmal Deine orderType ersetzt werden muß?
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.
AVT likes this.
Mit Zitat antworten
  #5 (permalink)  
Alt 13.03.18
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 58
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von next user Beitrag anzeigen
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.

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
__________________
heute schon gelacht?
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
ea struktur


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 06:41 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------