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: 4340
Beiträge: 39890
Benutzer: 6.672
Aktive Benutzer: 194
Links: 80
Wir begrüßen unseren neuesten Benutzer: Rupp
Mit 1.311 Benutzern waren die meisten Benutzer gleichzeitig online (16.09.19 um 01:18).
Neue Benutzer:
vor 4 Tagen
- Rupp
vor 6 Tagen
- walkn
vor einer Woche
- hakanhukum...
vor einer Woche
- Marco_FX
vor einer Woche
- Manoo

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 218
Gesamt: 221
Team: 0
Team:  
Benutzer:  juleslesquet, MA-EA, traderdoc
Freunde anzeigen

Empfehlungen

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 30.01.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.258
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Sorry, da fehlte noch das wichtige return.

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

  for (int i = OrdersHistoryTotal() - 1 ; i >= 0; i--)              //  "int i" wurde integriert deklariert / Zählung läuft abwärts
     { 
     if OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
        {
         if(OrderSymbol() == Symbol())                              //  hier ggf. zusätzlich  "(... &&  OrderTicket() == TicketNumber())"
           {
              if (OrderCloseTime() >= StringToTime(TimeToString(TimeCurrent(), TIME_DATE))
              //oder if (OrderCloseTime() >= iTime(NULL, PERIOD_D1, 0))für den Tagesprofit
              //oder if (OrderCloseTime() >= iTime(NULL, PERIOD_MN1, 0)) für den Monatsprofit
                {
                  x = OrderProfit() + OrderSwap() + OrderCommission();  //  Swap und Commission werden jetzt berücksichtigt
                  summe += x;                                           //  "summe" kann jetzt <= (positiv) oder < 0 (negativ) sein
                }
           }
        }
     Print("Summe=", summe);                                        //  summe = positiv/Graph-green  //  summe = negativ/Graph=red
     }
   return(summe);
}
//+---  
void OnStart()
{
  if(Profit() >= 0)  // ObjectCreate in CLR green ...
  if(Profit() <  0)   // ObjectCreate in CLR red .....
  ...
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #12 (permalink)  
Alt 30.01.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo RetepM,
ganz lieb von Dir, mir Deine Unterstützung zukommen zu lassen. Dennoch verwirrt mich die ganze Geschichte mehr, als dass sie mir hilft.
Mit traderdoc haben wir doch eine effiziente Möglichkeit gefunden, das Gewünschte umzusetzen. Lass uns doch auf diesem Wege fortfahren.
Was jetzt noch wünschenswert wäre, ist eine graphische Umsetzung. D.h., dass der Profit (der pos. in green / der neg. in red) optisch dargestellt und die pos. oder neg. Differenz via string ausgewiesen wird.
Hierzu habe ich zwar schon eine recht gute Idee - vielleicht hast Du aber auch schon einen vernünftigen Code dafür ?

... zwischenzeitlich hat auch traderdoc gesendet ... und es auf den Punkt gebracht: So weit bin ich leider noch nicht !

LG. an beide, Euer piptrade
  #13 (permalink)  
Alt 31.01.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc, hallo RetepM,

wenn wir uns
1. auf die Auswertung auf Tagesbasis beschränken,
2. zusätzlich die externe Bestimmung eines ganz bestimmten Tages ermöglichen und
3. vorerst auf Swap bzw. Commission verzichten,
würde der Code wie folgt aussehen (einfach, übersichtlich und fast schon perfekt) ! :

Code:
extern int Shift = 0;  //  Auswertung für den heutigen Tag / "1" für gestern usw.
//+---

double Profit()
{
  double x  = 0;
  double summe = 0;

  for (int i = OrdersHistoryTotal() - 1 ; i >= 0; i--) 
     { 
     if OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
        {
        if (OrderSymbol() == Symbol())
           {
           if (OrderCloseTime() >= iTime(NULL, PERIOD_D1, Shift))
              {
              x = OrderProfit();
              summe += x; 
              }
           }
        }
     }
  return(summe); 
}
//+---  
void OnStart()
{
  if(Profit() >= 0)   // ObjectCreate in CLR green ...
  if(Profit() <  0)   // ObjectCreate in CLR red .....
  ...
}
Sollte der Code nunmehr komplett und auch richtig sein, wäre der Weg für eine graphische Darstellung frei !!!
Dies wiederum sollte aber ein neues Thema sein.

Nochmals recht, recht herzlichen Dank für die Hilfestellungen und

ganz LG. piptrade
  #14 (permalink)  
Alt 31.01.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.258
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ne, noch nicht ganz, weil bei diesem Code jede Order, die zur Zeit des Beginns der historischen Tageskerze und später geschlossen wurde dann zählen würde. Da fehlt sozusagen die obere Grenze:

Code:
        if (OrderSymbol() == Symbol())
           {
           if (OrderCloseTime() >= iTime(NULL, PERIOD_D1, Shift) &&
               OrderCloseTime() <   iTime(NULL, PERIOD_D1, Shift-1) //für Shift >=1
              {
              x = OrderProfit();
              summe += x; 
              }
           }
        }
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #15 (permalink)  
Alt 31.01.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,

nur gut, dass ich hier nochmal `reingeschaut habe !
Dennoch fällt es mir schwer, Deine Argumentation zu verstehen:

Deine Worte:"..., weil ... jede Order, die zur Zeit des Beginns der historischen Tageskerze(n) (und später) geschlossen wurde, dann zählen würde.
All diese Order (also die des laufenden Tages) sollen aufaddiert werden; - eigentlich muss es doch genau so sein ! - oder ???

Wenn ich den Code um 11:00 laufen lasse und 5 Trades sind bis dahin abgeschlossen - möchte ich auch das Ergebnis dieser 5 Trades erfahren. Sind um 18:00 12 Trades abgeschlossen, will ich das Ergebnis dieser 12 Trades usw.. Ist denn hier eine obere Grenze überhaupt erforderlich ? Wenn "ja", versuche es bitte (einem geistig Gehbehinderten) zu erläutern.

Und noch eine Frage: Ist das Vergleichszeichen der 1. Zeile überhaupt richtig ausgerichtet ? Der Zeitpunkt der letzten geschlossenen Order soll doch weiter zurückliegen, also kleiner sein, als der aktuelle Zeitpunkt der Auswertung während des laufenden Tages; - oder ?

Im Moment bin ich schon ein bisschen verwirrt und hoffe sehnsüchtig auf eine Beruhigung dieses Zustandes.

LG. piptrade
  #16 (permalink)  
Alt 31.01.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.258
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das kann ich alles verstehen, ging mir vor 10Jahren auch nicht anders. Die Zeitbetrachtungen sind im MQL4 nicht unbedingt die Anwerderfreundlichsten.
Folgendes, die Zeiten werden in Sekunden angegeben, die seit dem 01.01.1970 bis zu dem jeweiligen Zeitpunkt verstrichen sind.
Einfaches Beispiel, wir nehmen mal an:
OrderCloseTime() = 23410000 (also 23410000 Sekunden nach dem 01.01.1970 geschlossen)
und ein Tag hat 86400 Sekunden. Sollte z.B. der Tagwechsel per Shift bei 23400000 sein, dann würde der Tag bis 23486400 gehen.
D.h. wenn nun Dein Shift auf diesen Tag zeigt, dann beträgt die Zeit über iTime(NULL, PERIOD_D1, Shift) 23400000.
D.h. nun wieder, wenn Du genau für diesen Tag Shift die Profits der Orders auslesen willst, dann darf die zu betrachtende CloseTime nur bis 1 Sekunden vor 23486400 gehen, ausgedrückt über
if (OrderCloseTime() < iTime(NULL, PERIOD_D1, Shift-1)
Shift-1 wäre ja der Beginn des darauffolgenden Tages. Wenn ab Shift die Orders der folgenden x Tage auch genommen werden sollen, dann entsprechend
Shift-x.

Noch dezidierter kann ich es nicht erklären.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #17 (permalink)  
Alt 31.01.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo, lieber traderdoc,

noch dezidierter muss es auch nicht sein. Ich kenne das Zurückgreifen auf 1970 und habe etwas ähnliches schon vermutet. Meine Interpretation von OrderCloseTime() hingegen war schlicht falsch.
Bei der jetzigen Betrachtungsweise verstehe ich Dein Ansinnen wesentlich besser. Demnach ist die 2. Zeile Deiner Codeergänzug tatsächlich absolut unverzichtbar.
Beispiel: Will ich die Ergebnisse nur des gestrigen Tages, muss der heutige Tag ja ausgeschlossen werden. Auswertungsbeginn wäre hier "Shift = 1" und das Auswertungsende dann "Shift = 1 - 1" ---> also "Shift = 0".
Soweit alles sehr gut nachvollziehbar.
Damit klärt sich auch die Frage mit dem Vergleichszeichen; - die sollten tatsächlich alle so bleiben, wie sie sind !

Dennoch eine letzte Frage: Ist es richtig, wenn ich die Weiterverarbeitung des Profit() für eine graphische Darstellung "SO" einleite:

Code:
//+--- Unterscheidg. Gewinn/Verlust ---------------------------------+ 

  if(Profit() >= 0)  {  Profit() = Prof; }   // CLR green
  if(Profit() <  0)  {  Profit() = Loss; }   // CLR red

//+--- paint-Bereich ------------------------------------------------+
  
  objectBlank();
  paintProf(Prof);
  paintLoss(Loss);
}
Vielleicht kannst Du mir hierauf nochmals antworten?
Unabhängig davon möchte ich mich aber schon jetzt recht herzlich bedanken: Danke! - ich werde Dich gern weiterempfehlen!

Ganz LG. piptrade
  #18 (permalink)  
Alt 31.01.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.258
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nein, so geht es nicht, weil Du einer Variable den Rückgabe wert der Funktion Profit() übergeben musst und nicht andersherum.
In diesem Falle würde ich es etwas anders schreiben. So könnte es dann aussehen:

Code:
//+--- Unterscheidg. Gewinn/Verlust ---------------------------------+ 
  double prof = Profit();
  if(prof >= 0) paintProf(prof); // CLR green
  if(prof <  0)  paintLoss(prof); // CLR red

//+--- paint-Bereich ------------------------------------------------+
  
  objectBlank(); //was soll diese Funktion bewirken?
}
Damit wird der ermittelte prof den jeweiligen Funktionen übergeben und kann dann in diesen Funktionen weiterverarbeitet werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #19 (permalink)  
Alt 01.02.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,

welche Sau soll da noch durchsteigen ?
Entschuldige bitte den Terminus; - aber "SO" ist mir gerade zumute !!!

Melde mich morgen wieder, wenn ich Deinen Comment auch verstanden habe.

LG. piptrade
  #20 (permalink)  
Alt 01.02.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

PS. zu meinem letzten Beitrag:

Lieber traderdoc,
1. habe mir Deinen letzten Code jetzt auch näher ansehen können: Suuuuper ! - auf diesem Weg bekomme ich die Weiterverarbeitung mit "paint", dem ersten Schritt zur Graph, sicher Stück für Stück "gebacken" ! Danke.

2. Dennoch gibt es ein vordergründiges Problem, was unseren AusleseCode betrifft: Die Zeile " if OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) " wird nach der Kompellierung mit " 'if' - open parenthesis expected ", als error ausgewiesen ! (Es werden Eröffnungsklammern erwartetet?)
Ich habe schon alles Erdenkliche probiert, bisher aber ohne Erfolg. Wo könnte der Fehler liegen ?

3. ... ganz nebenbei: Dein Nachtrag zum "return"; - unendlich wichtig ! Danke.!!! - dennoch mußte dieser Part aufwärts verschoben werden, um an der richtigen Klammerposition auch anerkannt zu werden.

Sehe ich das alles in so weit richtig ? - oder muss ich meine Vermutungen hier und da revidieren ?

LG: piptrade
Thema geschlossen

Lesezeichen

Stichworte
gewinn, mql4, orderhistorytotal, orderhistrory, profit, programmierung, programmierung metatrader, programmierung mql4, verlust


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 20:12 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 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.
-----------------------------------------------------------------------------------------------------------------------------