Einzelnen Beitrag anzeigen
  #27 (permalink)  
Alt 01.02.17
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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
__________________
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)