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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3872
Beiträge: 37205
Benutzer: 6.156
Aktive Benutzer: 437
Links: 80
Wir begrüßen unseren neuesten Benutzer: kraus10
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 11 Stunden
- kraus10
vor 18 Stunden
- ultragrass...
vor einem Tag
- shanmughav...
vor 3 Tagen
- Aline
vor 4 Tagen
- GPCecchett...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 49
Gesamt: 50
Team: 0
Team:  
Benutzer:  hhloverhh
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 19.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 2
L0rdy befindet sich auf einem aufstrebenden Ast
Standard Die letzten Verlustorders zusammen zählen

Hallo,
ich möchte was ausprobieren und einem Verlust mit grösseren Lots entgegenwirken. Nun es müsste zuerst der Verlust bestimmt werden.

Die Idee: die letzten aufeinander folgenden Verluste zusammen zu zählen.
Entsprechend bei Gewinn soll abgebrochen werden und Verlust (falls welcher vorkam) zurückgegeben werden.

Dazu habe ich ein Beispiel Code hier aus Forum etwas modifiziert. Ich kenne mich nicht so richtig mit "return" und "break" aus und hoffe, dass ich die richtig (entsprechend der Logik)eingesetzt habe.
Wäre dankbar für Vorschläge und Anregungen.
PHP-Code:
double ClosedLooses(){
double x;
double summe 0;
  for (
int i OrdersHistoryTotal() - OrdersHistoryTotal() - 10i--) 
  {
     
OrderSelect(iSELECT_BY_POSMODE_HISTORY);     
     if(
OrderProfit()<0)
            {
            
OrderProfit() + OrderSwap() + OrderCommission();
            
summe += x;
            Print(
"summe="summe);
            }
        else break
  }
  
summe=MathAbs(summe);
  return(
summe);

Mit Zitat antworten
  #2 (permalink)  
Alt 19.01.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.922
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Soweit im Prinzip richtig, noch ein paar Feinheiten dazugeproggt.

Code:
double ClosedLooses()
{
   double x;
   double summe = 0;

   for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) 
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
      {
         if (OrderSymbol() == Symbol && OrderMagicNumber() == MagicNumber)
         {    
            if (OrderProfit() < 0)
            {
               x = OrderProfit() + OrderSwap() + OrderCommission();
               summe += x;
               Print("summe = ", summe);
            }
            else break;
         }
      }
   }
   summe = MathAbs(summe);
   return(summe);
}
Dein Code hätte einen Compilerfehler ergeben müssen, denn hinter dem break muss unbedingt ein ; stehen.
Warum nur die letzten 10 Orders nach i > OrdersHistoryTotal() - 10?
Ob die zusätzliche Zeile mit der Abfrage nach dem OrderSymbol() (und ggf. mit der OrderMagicNumber()) notwendig ist, liegt in Deiner Entscheidung. Mit dieser Zeile werden eben nur die Orders zu einen bestimmten WP genommen (und ggf. sogar eines WP mit ausgewählter MagicNumber!).
Die entscheidende Stelle ist jedoch die Zeile mit dem break, denn richtigerweise von Dir bereits geproggt, soll ja die Aufsummierung sofort unterbrochen werden, wenn eine Order mit OrderProfit() >= 0 ist.
Man hätte auch formulieren können:
if (OrderProfit() + OrderSwap() + OrderCommission() < 0)
denn im Endeffekt belastet auch ggf. der Swap und auf alle Fälle die Commission das Konto.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 19.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 2
L0rdy befindet sich auf einem aufstrebenden Ast
Standard

Danke für ";"
Zitat:
Warum nur die letzten 10 Orders nach i > OrdersHistoryTotal() - 10?
weil EA max. 3-5 mal am Stück verliert. Deswegen denke ich 10 is ausreichend.

OrderSymbol() und OrderMagicNumber() nutze ich nicht, da ich sonst nichts laufen habe.

Zitat:
if (OrderProfit() + OrderSwap() + OrderCommission() < 0)
Gute Idee ! Danke ! Werde ich mal so und so austesten )
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 111
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

OrdersHistoryTotal() gibt Dir nur die Anzahl von Orders an, die auch im Metatrader im Terminal unter Kontohistory angezeigt werden, und nicht die gesamte History (es sei denn, Du hast dort unter "Zeitraum auswählen" die gesamte History ausgewählt.
Wenn Du dort z.B. "heute" auswählst, und heute noch keine Order geschlossen hast, gibt Dir OrdersHistoryTotal() als Wert 0 zurück.
Man braucht also die Abfrage nicht begrenzen mit der Befürchtung, dass tausende von alten Orders durchgezählt werden.
Mit Zitat antworten
Antwort

Lesezeichen


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 +1. Es ist jetzt 01:28 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.
-----------------------------------------------------------------------------------------------------------------------------