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: 4357
Beiträge: 39948
Benutzer: 6.704
Aktive Benutzer: 205
Links: 80
Wir begrüßen unseren neuesten Benutzer: Ondragon
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (vor einem Tag um 22:38).
Neue Benutzer:
vor einem Tag
- Ondragon
vor einem Tag
- sar_trader
vor 2 Tagen
- Solari
vor 3 Tagen
- simplepips
vor 3 Tagen
- NXT2017

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 153
Gesamt: 153
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

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

Was gibt es da nicht durchzusteigen? Das Problem ist nur allzu häufig, ihr wollt EAs programmieren und es fehlen häufig die grundlegenden Programmkenntnisse. Bei der Zeile:

if OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
muss es natürlich lauten:

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
Dieser Fehler war aus Post #4 mitgeführt worden.

U.a. nach if und for folgt immer!! ein Klammerausdruck (...) und kein ;

Das return(summe) sitzt im Post #11 an der korrekten Stelle.

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

Hallo traderdoc,

ich bitte vielmals um Entschuldigung.
Die zusätzlich einzufügenden if-Klammern waren mir auch schon aufgefallen und "return(summe)" bzw. "Print("Summe", summe);" standen selbstverständlich an der richtigen Stelle.

Melde mich in Kürze, sobald es etwas Neues zu berichten gibt.

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

Lieber traderdoc,

ich mühe mich redlich, - und das seit Stunden !
Im Allgemeinen hast Du schon recht, alle wollen sich einen EA "basteln" aber keiner will dessen Sprache verstehen.
Im Besonderen gibt es aber auch User, welche die Sprache erlernen und richtig anwenden wollen. - Und das versuche ich seit nunmehr einem Jahr (Stück für Stück - und immer, wenn es die Zeit erlaubt). Momentan muss ich mich aber mit "no body is perfect" zufrieden geben !
Was meine aktuellen Bemühungen angeht, bin ich jetzt HIER angelangt:

Code:
extern string LastDays = "Today=0, Yesterday=1 aso.";
extern int       Shift = 0;

double Profit();
int Line();
int Text();

//+------------------------------------------------------------------+
//     CustomIndicator initialization function                       |       
//+------------------------------------------------------------------+
int init()     {
   initGraph();
      {
      if (IsConnected()) main();
      }
   return(0);  }
//+------------------------------------------------------------------+
//     CustomIndicator deinitialization function                     |       
//+------------------------------------------------------------------+
int deinit()   {
   ObjectsDeleteAll(0,OBJ_LABEL);
   return(0);  }
//+------------------------------------------------------------------+
//     CustomIndicator start function                                |       
//+------------------------------------------------------------------+
int start()    {
   if (IsConnected()) main();
   return(0);  }
//+------------------------------------------------------------------+
//     CustomIndicator function                                      |       
//+------------------------------------------------------------------+    
void main()    {   
//+--- get Profit() global scope ------------------------------------+
  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) &&
                 OrderCloseTime() <  iTime(NULL, PERIOD_D1, Shift-1))
                {
                x = OrderProfit()
                Summe += x; 
                }
             }
          }
          Print("Summe", Summe);
       }
       return(Summe); 
    }
    
//+--- Unterscheidg. Prof/Loss bzw. CLRgreen_up/CLRred_down
  double prof = Profit();
                                       //   Rückgabewerte für Variablen  
  if(prof >= 0)   paintProf(prof);     //  (prof) für Weiterverarbtg. unter paintProf
  if(prof <  0)   paintLoss(prof);     //  (prof) für Weiterverarbtg. unter paintLoss 

//+--- paint-Bereich ------------------------------------------------+
  paintLine();
  paintSign();
  paintsumme();  
}
//+------------------------------------------------------------------+    
void initGraph()   {
  ObjectsDeleteAll(0,OBJ_LABEL);
  objectCreate("Line",10,17,"-----------------------------------",10,"Arial",LightSlateGray);  //  Line
  objectCreate("Sign",10,7,"PROFIT(euro):",9,"Arial Narrow",LightSlateGray);                   //  Text
  objectCreate("Summe",134,25,DoubleToStr(9,1),10,"Arial Narrow",Silver);                      //  Wert / DoubleToStr(9,1) (value,digits)
  objectCreate("Prof",130,67);                                                                 //  Rectangle 1 green
  objectCreate("Loss",130,61);                                                                 //  Rectangle 2 red   
  WindowRedraw();
  }  
//+--- Label, Positionierg., Hintergrundfarbe und Textvorgaben ----------------------------------------------------------------+
void objectCreate(string name,int x,int y,string text="-",int size=12,
                  string font="Arial",color colour=CLR_NONE)   {
   ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,3); 
   ObjectSet(name,OBJPROP_COLOR,colour);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetText(name,text,size,font,colour);
   }
//+--- Zuordnung Farb-Eigenschaften --------------------------------------------------------------------------------------------+  
void paintLine()   {
   ObjectSet("ZeroLine",OBJPROP_COLOR,LightSlateGray);
   }
void paintSign()   {
   ObjectSet("Sign",OBJPROP_COLOR,LightSlateGray);   
   }
void paintsumme(int value)   {
   if(value >= 0)
   ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Green);    //  für sich ändernde Wert-Angabe + summe in EUR
   if(value <  0)
   ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Maroon);   //  für sich ändernde Wert-Angabe - summe in EUR   
   }
void paintM1(double value)   {
   if (value >= 0) 
   ObjectSet("Prof",OBJPROP_COLOR,Green);                                 //  Rectangle Prof
//   ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Green);    //  Part 2: für sich ändernde Wert-Angabe in Point/pip
   }
void paintM5(double value)   {
   if (value <  0) 
   ObjectSet("Loss",OBJPROP_COLOR,Maroon);                                //  Rectangle Loss
//   ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Maroon);   //  Part 2: für sich ändernde Wert-Angabe in Point/pip
   }
//+--- The PRG-End -------------------------------------------------------------------------------------------------------------+
Sieht für den Laien vielleicht recht gut aus, ist aber mit 4 Fehlern behaftet:
1. "Profit"-function can be declared only in the globalscope
2. "paintProf" - function not defined
3. "paintLoss" - function not defined und
4. "PaintSumme" - wrong parameters count
Ursprünglich waren es 23 errors und ?? warnings, welche ich ausräumen konnte, - jetzt komme ich aber einfach nicht weiter.
Vielleicht kannst Du nochmals einen Blick darüber werfen und mir mit Deinen Hinweisen zur Seite stehen ?
Wäre richtig toll.

LG. piptrade

PS.: Auf dem angehängten JPG werden die abgeschlossenen Trades (EA arbeitet momentan OHNE Filter!) bereits dargestellt - die programm-technische Umsetzung der manuell eingefügten Grafik ist das Ziel des obigen Codes. So hat man vielleicht eine bessere Vorstellung.
Angehängte Grafiken
Dateityp: jpg ANALYTIC_03.jpg (124,9 KB, 9x aufgerufen)
  #24 (permalink)  
Alt 01.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.270
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

1. "Profit"-function can be declared only in the globalscope
double Profit() muss genauso extern deklariert werden wie z.B.
void paintSign()

2. "paintProf" - function not defined
Die Funktion paintProf() wurde zwar aufgerufen aber wurde nirgends deklariert.

3. "paintLoss" - function not defined
Die Funktion paintLoss() wurde zwar aufgerufen aber wurde nirgends deklariert.

4. "PaintSumme" - wrong parameters count
Die Funktion paintsumme() wurde mit der Übergabe eines Parameters deklariert, sie wird aber ohne Parameterübergabe aufgerufen. Das geht natürlich nicht.

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

Ohhh, - eine Antwort im "Kästchen" !

- jetzt wird`s wieder heiß für mich.
Werde mich sofort und erneut in die Materie stürzen und hoffe noch heute Abend grünes Licht geben zu können.

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

Hallo traderdoc,

bis zum jetzigen Zeitpunkt zeigt sich lediglich ein grünlicher Schimmer am Ende des Tunnels. Ein "GRÜNES LICHT" ist das noch nicht.

Die letzten 3 Punkte habe ich (so glaube ich zumindest) verstanden und den Code auch dahingehend verändert. Resultat für diese 3 Punkte: No Errors / No Warnings !
Insoweit bin ich erst einmal über das Erreichte recht froh. Danke.

Darüber hinaus habe ich etwas "aufgeräumt", überflüssige Dopplungen entfernt und Kleinigkeiten in Übereinstimmung gebracht. Soweit, wie gesagt, ist alles o.k..

Was es aber in sich hat, ist der Part mit der externen Deklaration von double Profit() ! Egal, wohin ich dieses Teil verschiebe, egal, wie ich es umforme oder ergänze, - das PRG will nach wie vor die globale Deklaration !!! (... oder schlimmeres !)
Kannst Du mir bei dem hoffentlich letzten "Brocken" nochmals helfen ?

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

@piptrade, Du kannst einen schon beschäftigen.

Code:
extern string  LastDays = "Today=0, Yesterday=1 aso.";
extern int     Shift    = 0;

//+------------------------------------------------------------------+
//     CustomIndicator initialization function                       |       
//+------------------------------------------------------------------+
int init() {
   initGraph();

   if (IsConnected()) main();
   return(0);  
}
//+------------------------------------------------------------------+
//     CustomIndicator deinitialization function                     |       
//+------------------------------------------------------------------+
int deinit() {
   ObjectsDeleteAll(0,OBJ_LABEL);
   return(0);
}
//+------------------------------------------------------------------+
//     CustomIndicator start function                                |       
//+------------------------------------------------------------------+
int start() {
   if (IsConnected()) main();
   return(0);  
}
//+------------------------------------------------------------------+
//     CustomIndicator function                                      |       
//+------------------------------------------------------------------+    
void main() {      
//+--- Unterscheidg. Prof/Loss bzw. CLRgreen_up/CLRred_down
  double prof = Profit();             //Rückgabewerte für Variablen                                                
  if(prof >= 0)   paintProf(prof);    //(prof) für Weiterverarbtg. unter paintProf
  if(prof <  0)   paintLoss(prof);    //(prof) für Weiterverarbtg. unter paintLoss 

//+--- paint-Bereich ------------------------------------------------+
  paintLine();
  paintSign();
  paintsumme();  //hier fehlt laut Deklaration der Funktion ein int-Parameter in den Klammern!
}
//+------------------------------------------------------------------+ 


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) &&
                OrderCloseTime() <  iTime(NULL, PERIOD_D1, Shift-1)) {
               x = OrderProfit(); //Zeile korrigiert
               Summe += x; 
            }
         }
      }
      Print("Summe", Summe);
   }
   return(Summe); 
}

void paintProf(double prof) {

}

void paintLoss(double prof) {

}
   
void initGraph() {
   ObjectsDeleteAll(0,OBJ_LABEL);
   objectCreate("Line",10,17,"-----------------------------------",10,"Arial",LightSlateGray);  //  Line
   objectCreate("Sign",10,7,"PROFIT(euro):",9,"Arial Narrow",LightSlateGray);                   //  Text
   objectCreate("Summe",134,25,DoubleToStr(9,1),10,"Arial Narrow",Silver);                      //  Wert / DoubleToStr(9,1) (value,digits)
   objectCreate("Prof",130,67);                                                                 //  Rectangle 1 green
   objectCreate("Loss",130,61);                                                                 //  Rectangle 2 red   
   WindowRedraw();
}  
//+--- Label, Positionierg., Hintergrundfarbe und Textvorgaben ----------------------------------------------------------------+
void objectCreate(string name,int x,int y,string text="-",int size=12,
                  string font="Arial",color colour=CLR_NONE) {
   ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,3); 
   ObjectSet(name,OBJPROP_COLOR,colour);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetText(name,text,size,font,colour);
}
//+--- Zuordnung Farb-Eigenschaften --------------------------------------------------------------------------------------------+  
void paintLine() {
   ObjectSet("ZeroLine",OBJPROP_COLOR,LightSlateGray);
}
void paintSign() {
   ObjectSet("Sign",OBJPROP_COLOR,LightSlateGray);   
}
void paintsumme(int value) {
   if(value >= 0)
   ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Green);    //  für sich ändernde Wert-Angabe + summe in EUR
   if(value <  0)
   ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Maroon);   //  für sich ändernde Wert-Angabe - summe in EUR   
}
void paintM1(double value) {
   if (value >= 0) 
   ObjectSet("Prof",OBJPROP_COLOR,Green);                                 //  Rectangle Prof
   //ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Green);    //  Part 2: für sich ändernde Wert-Angabe in Point/pip
}
void paintM5(double value) {
   if (value <  0) 
   ObjectSet("Loss",OBJPROP_COLOR,Maroon);                                //  Rectangle Loss
   //ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Maroon);   //  Part 2: für sich ändernde Wert-Angabe in Point/pip
}
//+--- The PRG-End -------------------------------------------------------------------------------------------------------------+
So nun habe ich den Code so umgeschrieben, wie vorher beschrieben, die Funktion Profit wurde extern deklariert. Deklarierungen von Funktionen dürfen in keinen anderen Funktioen stehen.
Auch diese Zeile kann der Compiler nicht bearbeiten:
x = OrderProfit()
Da fehlt nicht viel, aber etwas Entscheidendes, nämlich das ;
Beim Programmieren wird der kleinste Syntaxfehler geahndet.

Diese Funktionen waren immer noch nicht deklariert und müssen mit Leben erfüllt werden.

paintsumme(); //hier fehlt laut Deklaration der Funktion ein int-Parameter in den Klammern!
(das ist in diesem Code jetzt noch der einzige Syntaxfehler!!)

Die init()-Funktion funktioniert auich nur so richtig:
int init() {
initGraph();

if (IsConnected()) main();
return(0);
}

Und alles noch etwas aufgehübscht.
So, nu is aber gut.

traderdoc
piptrade likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.

Geändert von traderdoc (01.02.17 um 21:22 Uhr)
  #28 (permalink)  
Alt 01.02.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

"So, nun is aber gut !"
Das hast Du sehr schön gesagt: - und Du hast sicher auch Recht damit !

Danke, Danke, Danke! - für Dein neustes Statement. Bin voller Spannung, Deine Ausführungen zu inhalieren, - sorry, - aber bitte erst morgen.

Melde mich so schnell als möglich und auch nur dann, wenn es Sinn macht.

Gute Nacht, alles liebe und bis dahin ...
piptrade
  #29 (permalink)  
Alt 01.02.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Nachtrag:

Lieber traderdoc,

dass ich Dich "schon beschäftigen" kann, hatte ich übersehen (die CodeUmschreibung war in diesem Moment wichtiger !) - sorry !

Dennoch empfinde ich es als bewundernswert, - einfach nur als toll und als fair, dass Du, wie ein Terrier, `dran bleibst, den richtigen Biss hast, und ... spitzenmäßig und selbstlos weiterhilfst !

Bis hier her nochmals: DANKE !

... und natürlich die LG. piptrade
  #30 (permalink)  
Alt 02.02.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo, traderdoc,

wenn ich Dich richtig verstanden habe, bestand das Hauptproblem im Fehlen eines int-Parameters innerhalb der Klammer.

Bei dem angehängten Vorschlag wurde in der Deklaration unter void "value" gegen "summe" ersetzt, so dass der int-Parameter innerhalb der Klammer ebenfalls "summe" sein müßte. - Gesagt, getan ! Jetzt wurde eine erneute Deklaration verlangt, die ich vorerst mit "double summe = OrderProfit();" gelöst habe. - Zumindest gibt es "no error" / "no warning" ! - Und "SO" sieht es dann im Code aus:

Code:
double summe = OrderProfit();
  paintSumme(summe);
...
...
...
void paintSumme(double summe) {
   if(summe >= 0)
   ObjectSetText("Summe",DoubleToStr(summe,0),10,"Arial Black",Green);
   if(summe <  0)
   ObjectSetText("Summe",DoubleToStr(summe,0),10,"Arial Black",Maroon);
   }
Ist das soweit tatsächlich richtig ?

Bis zum Eintreffen Deiner mit Spannung erwarteten Antwort werde ich mich um die letzten 2 "void-Blöcke" kümmern und die provisorischen Bezeichnungen gegen die relevanten austauschen. Auch hier sind sich verändernde Variable notwendig, so dass ich auch hier auf das obige Problem stoßen werde. Nun denn ...

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 10:32 Uhr.


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