expert_analyze





#property copyright "Viatcheslav Suvorov"
#property link      "slava_suvorov@list.ru"
#property show_inputs
#define arraysize 193 


string reportname      =   "StrategyTester.htm"; 
string MTpath      =   "D:\Program Files\MetaTrader - North Finance"; 
int price=PRICE_CLOSE;
//int barsbehinde=96;
//int barsafter=96;
double bestprofit=0.3;
double bestloss=0.3;
int Hour_shift=0; 




#include <WinUser32.mqh>
 
#import "mt4excel.dll"
bool  ExcelOpenFile(string FileName);//Îòêðûâàåò ôàéë Excel
bool  ExcelClose();//Çàêðûâàåò Excel
bool  ExcelSetFormula(string Value);//Çàïèñàòü ôîðìóëó â ÿ÷åéêó
bool  ExcelSetRange(string Range);//Çàïîìíèòü äèàïàçîí


bool  ExcelSetValueCell(int X,int Y,double Value);//Çàïèñàòü ÷èñëî â ÿ÷åéêó
bool  ExcelSetTextCell(int X,int Y,string Value);//Çàïèñàòü òåêñò â ÿ÷åéêó
bool ExcelSetDiagramma(int TypeD,string Title,string XRange,string YRange,int Left,int Top,int Riht,int Bottom);//Äîáàâëÿåò äèàãðàìó

string ExcelGetLastErrorText();//Òåêñò ïîñëåäíåé îøèáêè Excel
#import

string results[0][9];

string StringCutAndPaste(string source, string cut, string paste){
   int p=StringFind(source,cut,0);
   if (p==-1) return(source);
   return(StringSubstr(source,0,p)+paste+StringSubstr(source,p+StringLen(cut)));
}//StringCutAndPaste

string IntToA1(int c){
  switch(c){
    case 1: return("A");  break;
    case 2: return("B");  break;
    case 3: return("C");  break;
    case 4: return("D");  break;
    case 5: return("E");  break;
    case 6: return("F");  break;
    case 7: return("G");  break;
    case 8: return("H");  break;
    case 9: return("I");  break;
    case 10: return("J");  break;
    case 11: return("K");  break;
    case 12: return("L");  break;
    case 13: return("M");  break;
    case 14: return("N");  break;
    case 15: return("O");  break;
    case 16: return("P");  break;
    case 17: return("Q");  break;
    case 18: return("R");  break;
    case 19: return("S");  break;
    case 20: return("T");  break;
    case 21: return("U");  break;
    case 22: return("V");  break;
    case 23: return("W");  break;
    case 24: return("X");  break;
    case 25: return("Y");  break;
    case 26: return("Z");  break;
    
  }//switch
}//IntToA1

string R1C1toA1(string r1c1){
   int p=StringFind(r1c1,"C",0);  
   if (p==-1) return("error");
   string c1=StringSubstr(r1c1,p+1);
   string r1=StringSubstr(r1c1,1,p-1);
   int c1int=StrToDouble(c1);
   int c11=MathFloor(c1int/27);
   int c12=c1int-c11*27;
   if (c11>0) c12++;
   return(IntToA1(c11)+IntToA1(c12)+r1); 
}//R1C1toA1


bool WriteStatisticToFile(int h,double data[][]){
   int arrpos=ArrayRange(data,0);    
   int barsbehinde=(arraysize-1)/2;
   int barsafter=(arraysize-1)-barsbehinde;
   
   FileWriteString(h,"Âðåìÿ(ìèí);",StringLen("Âðåìÿ(ìèí);"));
   if (arrpos>0)
     for (int kk=0;kk<arraysize;kk++){               
       string txt=DoubleToStr((kk-barsbehinde)*Period(),0)+";";
       txt=StringCutAndPaste(txt,".",",");
       FileWriteString(h,txt, StringLen(txt)); 
     }//for  
   FileWriteString(h,"\r\n", StringLen("\r\n")); 
   
   FileWriteString(h,"Ñðåäíÿÿ(ïóíêòû);",StringLen("Ñðåäíÿÿ(ïóíêòû);"));
   double mo[arraysize];
   for (int jj=0;jj<arrpos;jj++) 
     for (kk=0;kk<arraysize;kk++)
       mo[kk]=mo[kk]+data[jj,kk];
          
   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++){        
       mo[kk]=mo[kk]/arrpos;
       txt=DoubleToStr(mo[kk],2)+";";
       txt=StringCutAndPaste(txt,".",",");
       FileWriteString(h,txt, StringLen(txt)); 
     }//for  
   FileWriteString(h,"\r\n", StringLen("\r\n")); 

   FileWriteString(h,"ÑÊÎ;",StringLen("ÑÊÎ;"));   
   double sko[arraysize];
   for (jj=0;jj<arrpos;jj++) 
     for (kk=0;kk<arraysize;kk++)
       sko[kk]=sko[kk]+MathSqrt(MathPow(data[jj,kk]-mo[kk],2));

   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++){        
       sko[kk]=sko[kk]/arrpos;
       txt=DoubleToStr(sko[kk],2)+";";
       txt=StringCutAndPaste(txt,".",",");
       FileWriteString(h,txt, StringLen(txt)); 
     }//for  
   FileWriteString(h,"\r\n", StringLen("\r\n")); 


   double sko1[arraysize];
   double sko1count[arraysize];
   for (jj=0;jj<arrpos;jj++) 
     for (kk=0;kk<arraysize;kk++) 
       if (data[jj,kk]>=mo[kk]){  
         sko1count[kk]++;
         sko1[kk]=sko1[kk]+MathSqrt(MathPow(data[jj,kk]-mo[kk],2));
       }//if  

   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++) 
       if (sko1count[kk]>0) sko1[kk]=sko1[kk]/sko1count[kk]; else sko1[kk]=0;
     
   double sko2[arraysize];
   double sko2count[arraysize];
   for (jj=0;jj<arrpos;jj++) 
     for (kk=0;kk<arraysize;kk++) 
       if (data[jj,kk]<mo[kk]){  
         sko2count[kk]++;
         sko2[kk]=sko2[kk]+MathSqrt(MathPow(data[jj,kk]-mo[kk],2));
       }//if  

   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++) 
       if (sko2count[kk]>0) sko2[kk]=sko2[kk]/sko2count[kk]; else sko2[kk]=0;


   FileWriteString(h,"Âåðõíÿÿ ãðàíèöà;",StringLen("Âåðõíÿÿ ãðàíèöà;"));      
   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++){               
       txt=DoubleToStr(mo[kk]+3*sko1[kk],2)+";";
       txt=StringCutAndPaste(txt,".",",");
       FileWriteString(h,txt, StringLen(txt)); 
     }//for  
   FileWriteString(h,"\r\n", StringLen("\r\n")); 

   FileWriteString(h,"Íèæíÿÿ ãðàíèöà;",StringLen("Íèæíÿÿ ãðàíèöà;"));      
   if (arrpos>0)
     for (kk=0;kk<arraysize;kk++){               
       txt=DoubleToStr(mo[kk]-3*sko2[kk],2)+";";
       txt=StringCutAndPaste(txt,".",",");
       FileWriteString(h,txt, StringLen(txt)); 
     }//for  
   FileWriteString(h,"\r\n", StringLen("\r\n")); 
   
}//WriteStatisticToFile

double Profit(int num){  
  for(int all=0;all<ArraySize(results);all++){ //check all entry of one trade
    int curnum=StrToDouble(results[all][3]);
    if(results[all][2]=="s/l" || results[all][2]=="t/p" || results[all][2]=="close" || results[all][2]=="close at stop") 
      if (curnum==num) {
       // Print(results[all][8]);
        return(StrToDouble(results[all][8]));
      }  
  }//for
}//Profit

void start()
{
   int barsbehinde=(arraysize-1)/2;
   int barsafter=(arraysize-1)-barsbehinde;

   double short[][arraysize];
   double long[][arraysize];
  
   bool FlagCont=true;
   string var,piece,value;
   
   int row,begin,end,cnt,cntOrders,all;
   double orders[];
   double stoploss,takeprofit;
   string description,lots;
   
   string ticket; 
   string opentime; 
   string type; 
   double openprice;
   string closetime;
   double closeprice;
   int count=0;
   string name;
 
   
   int handle=FileOpen(reportname,FILE_READ,0x7F);
   if(handle<0)
     {
         Alert("File "+reportname+" does not exist !");
         return;
     }         
   FileSeek(handle,0,SEEK_SET);
   int handle1=FileOpen("enrypoints.csv",FILE_BIN|FILE_WRITE);
   if(handle1<1)
    {
     Print("Íå óäàåòñÿ ñîçäàòü ôàéë enrypoints.csv ïîñëåäíÿÿ îøèáêà ", GetLastError());
     return(false);
    }


   while(FlagCont)
      {
         var=FileReadString(handle);
         piece=StringSubstr(var,29,6);
         if(piece=="Symbol")
            {
               piece=StringSubstr(var,54,6);
               if(piece!=Symbol()) 
                  {
                     Alert("Strategy was testing on ",piece," chart. It is not possible to draw results to ",Symbol()," chart !");
                     return;
                  }
            }           
         piece=StringSubstr(var,0,11);
         if(piece=="<tr bgcolor") FlagCont=false;
      }

   
   
   while(FileIsEnding(handle)==false)
      {
         while (FileIsLineEnding(handle)) 
            {
               ArrayResize(results,row+1);
               
               var=FileReadString(handle);
               if(var=="") break;
               begin=StringFind(var, "<td>",0)+4;                             //Position of action
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][0]= value;                                        //number of action
               //-----------------
               begin=StringFind(var, "date>",end)+5;                          //Find the beginning of the position
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][1]= value;                                        //time of action
               //-----------------
               begin=StringFind(var, "<td>",end)+4;                           //Find the beginning of the position
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][2]= value;                                        //type of action
               //-----------------
               begin=StringFind(var, "<td>",end)+4;                           //Find the beginning of the position 
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][3]= value;                                        //order's number 
               //-----------------
               begin=StringFind(var, "mspt>",end)+5;                          //Find the beginning of the position
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][4]= value;                                        //lot size
               //-----------------
               if(Digits==4) begin=StringFind(var, "0\.0000;",end)+10;         //Find the beginning of the position
               else begin=StringFind(var, "0\.00;",end)+8;
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][5]= value;                                        //open price
               //-----------------
               begin=StringFind(var, "right>",end)+6;                         //Find the beginning of the position 
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][6]= value;                                        //stoploss
               //-----------------
               begin=StringFind(var, "right>",end)+6;                         //Find the beginning of the position
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][7]= value;                                        //take profit
               //-----------------
               begin=StringFind(var, "mspt>",end)+5;                          //Find the beginning of the position
               end=StringFind(var, "</td>",begin);                            //Find the end of position
               value = StringSubstr(var, begin, end-begin);                   //Read the value
               results[row][8]= value;                                        //profit size
               
               row++;
            }
         break;  
      }  
               
   Comment("First trade opened - ",results[0][1], "  last trade closed - ",results[row-1][1]);
   for(cnt=1;cnt<=row;cnt++) 
      {
         ArrayResize(orders,cnt);         
         orders[cnt-1]=StrToInteger(results[cnt-1][3]);
      }   
   cntOrders=orders[ArrayMaximum(orders)];
      
      
   int totalShort;   
   FileWriteString(handle1,"Âñå Long\r\n", StringLen("Âñå Long\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;               
               if(results[all][2]=="buy") 
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;   

                     int position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     int startcykle=position+barsbehinde;

                     int endcykle=position-barsafter;
                     totalShort++;
                     
                     int arrpos=totalShort;
                     ArrayResize(long,arrpos+1);
                                          
                     for (int jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                     //    FileWriteString(handle1, "0;", 2); 
                         long[arrpos,jj-startcykle]=0;                     
                       else {   
                         int val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         long[arrpos,startcykle-jj]=val;
                       }//if                       
                  }
                  

/*               if(results[all][2]=="s/l" || results[all][2]=="t/p" || results[all][2]=="close" || results[all][2]=="close at stop")
                  {
                     closetime=results[all][1];
                     closeprice=StrToDouble(results[all][5]);
                     
                     name="Close trade - Object Nr. "+DoubleToStr(count,0);
                     count++;
              
                     ObjectCreate(name, OBJ_ARROW, 0, StrToTime(closetime)+Hour_shift*3600, closeprice);  
                     ObjectSet(name, OBJPROP_ARROWCODE, 242);        
                     if(type=="buy")ObjectSet(name, OBJPROP_COLOR, Aqua);
                     else ObjectSet(name, OBJPROP_COLOR, Tomato);
                     ObjectSetText(name, description,10,"Arial", Blue);
       
                     name="Connection - Object Nr. "+DoubleToStr(count,0);
                     count++;
       
                     ObjectCreate(name, OBJ_TREND, 0, StrToTime(opentime)+Hour_shift*3600, openprice,StrToTime(closetime), closeprice);  
                     ObjectSet(name, OBJPROP_RAY, false); 
                     ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); 
                     if(type=="buy")ObjectSet(name, OBJPROP_COLOR, Aqua);
                     else ObjectSet(name, OBJPROP_COLOR, Tomato);
                     ObjectSetText(name, StringConcatenate("#",ticket,"   ",openprice," --> ",closeprice),10,"Arial", Blue);          
                  } 
                  
                  
               if(results[all][2]=="modify")
                  {
                     name="Modify SL - Object Nr. "+DoubleToStr(count,0);
                     count++;
       
                     ObjectCreate(name, OBJ_TREND, 0, StrToTime(opentime)+Hour_shift*3600, StrToDouble(results[all][6]),StrToTime(opentime)+Period()*60, StrToDouble(results[all][6]));  
                     ObjectSet(name, OBJPROP_RAY, false); 
                     ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID); 
                     if(type=="buy")ObjectSet(name, OBJPROP_COLOR, Teal);
                     else ObjectSet(name, OBJPROP_COLOR, YellowGreen);
                     ObjectSetText(name, StringConcatenate("#",ticket," modify SL"),10,"Arial", Blue);          

                     name="Modify TP- Object Nr. "+DoubleToStr(count,0);
                     count++;
       
                     ObjectCreate(name, OBJ_TREND, 0, StrToTime(opentime)+Hour_shift*3600, StrToDouble(results[all][7]),StrToTime(opentime)+Period()*60, StrToDouble(results[all][7]));  
                     ObjectSet(name, OBJPROP_RAY, false); 
                     ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID); 
                     if(type=="buy")ObjectSet(name, OBJPROP_COLOR, OrangeRed);
                     else ObjectSet(name, OBJPROP_COLOR, Peru);
                     ObjectSetText(name, StringConcatenate("#",ticket," modify TP"),10,"Arial", Blue);          
                     
                  }
                  */
             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,long);
        
   int totalLong;   
   FileWriteString(handle1,"Âñå Short\r\n", StringLen("Âñå Short\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;               
               if(results[all][2]=="sell") 
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;
                     

                     position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     startcykle=position+barsbehinde;
                     endcykle=position-barsafter;
                     
                     totalLong++;                          
                     arrpos=totalLong;
                     ArrayResize(short,arrpos+1);
                     
                     
                     for (jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                         short[arrpos,jj-startcykle]=0;                     
                       else {       
                         val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         short[arrpos,startcykle-jj]=val;
                       }//if

                  }//if


             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,short);

   totalShort=0;   
   FileWriteString(handle1,"Ïðèáûëüíûå Long\r\n", StringLen("Ïðèáûëüíûå Long\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;            
               //if(results[all][2]=="buy") Print("¹=",results[all][3]);
               if((results[all][2]=="buy") && (Profit(StrToDouble(results[all][3]))>0)) 
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;   

                     position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     startcykle=position+barsbehinde;

                     endcykle=position-barsafter;
                     totalShort++;
                     
                     arrpos=totalShort;
                     ArrayResize(long,arrpos+1);
                                          
                     for (jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                         long[arrpos,jj-startcykle]=0;                     
                       else {   
                         val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         long[arrpos,startcykle-jj]=val;
                       }//if                       
                  }
             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,long);

   totalLong=0;   
   FileWriteString(handle1,"Ïðèáûëüíûå Short\r\n", StringLen("Ïðèáûëüíûå Short\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;               
               if((results[all][2]=="sell") && (Profit(StrToDouble(results[all][3]))>0))
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;
                     

                     position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     startcykle=position+barsbehinde;
                     endcykle=position-barsafter;
                     
                     totalLong++;                          
                     arrpos=totalLong;
                     ArrayResize(short,arrpos+1);
                     
                     
                     for (jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                         short[arrpos,jj-startcykle]=0;                     
                       else {       
                         val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         short[arrpos,startcykle-jj]=val;
                       }//if

                  }//if


             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,short);

   totalShort=0;   
   FileWriteString(handle1,"Óáûòî÷íûå Long\r\n", StringLen("Óáûòî÷íûå Long\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;                         
               if((results[all][2]=="buy") && (Profit(StrToDouble(results[all][3]))<0)) 
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;   

                     position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     startcykle=position+barsbehinde;

                     endcykle=position-barsafter;
                     totalShort++;
                     
                     arrpos=totalShort;
                     ArrayResize(long,arrpos+1);
                                          
                     for (jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                         long[arrpos,jj-startcykle]=0;                     
                       else {   
                         val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         long[arrpos,startcykle-jj]=val;
                       }//if                       
                  }
             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,long);

   totalLong=0;   
   FileWriteString(handle1,"Óáûòî÷íûå Short\r\n", StringLen("Óáûòî÷íûå Short\r\n")); 
   for(cnt=1;cnt<=cntOrders;cnt++) // check all trades
      {         
         for(all=0;all<ArraySize(results);all++) //check all entry of one trade
            {
               if(cnt!=StrToInteger(results[all][3])) continue;               
               if((results[all][2]=="sell") && (Profit(StrToDouble(results[all][3]))<0))
                  {
                     type=results[all][2];
                     opentime=results[all][1];
                     lots=results[all][4]; 
                     openprice=StrToDouble(results[all][5]);                                 
                     ticket=cnt;
                     stoploss=StrToDouble(results[all][6]); 
                     takeprofit=StrToDouble(results[all][7]);
                     description=StringConcatenate("#",ticket," lots:",lots," time:",opentime," SL:",results[all][6]," TP:",results[all][7]);
                     
                     name="Open trade - Object Nr. "+DoubleToStr(count,0);
                     count++;
                     

                     position=iBarShift(NULL,0,StrToTime(opentime)+Hour_shift*3600);
                     startcykle=position+barsbehinde;
                     endcykle=position-barsafter;
                     
                     totalLong++;                          
                     arrpos=totalLong;
                     ArrayResize(short,arrpos+1);
                     
                     
                     for (jj=startcykle;jj>=endcykle;jj--)
                       if (jj==position)
                         short[arrpos,jj-startcykle]=0;                     
                       else {       
                         val=(iOpen(NULL,0,jj)-openprice)/Point;                    
                         short[arrpos,startcykle-jj]=val;
                       }//if

                  }//if


             } // end -check all entry of one trade
      }   //end -  check all trades            
   WriteStatisticToFile(handle1,short);
      
   FileClose(handle);
   FileClose(handle1);
   if (ExcelOpenFile(MTpath+"\experts\files\enrypoints.csv")) Print("Ócïåøíî îòêðûëè Excel"); else Print("Íå îòêðûâàåòñÿ Excel:",ExcelGetLastErrorText());//Îòêðûâàåì Excel  

   ExcelSetDiagramma(88,"Òðåéäû ëîíã, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R2C2")+":"+R1C1toA1("R2C194"),R1C1toA1("R3C2")+":"+R1C1toA1("R3C194")+";"+R1C1toA1("R5C2")+":"+R1C1toA1("R6C194"),0,0,400,200);  
   ExcelSetDiagramma(88,"Òðåéäû øîðò, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R8C2")+":"+R1C1toA1("R8C194"),R1C1toA1("R9C2")+":"+R1C1toA1("R9C194")+";"+R1C1toA1("R11C2")+":"+R1C1toA1("R12C194"),400,0,400,200);  
   ExcelSetDiagramma(88,"Ïðèáûëüíûå òðåéäû ëîíã, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R14C2")+":"+R1C1toA1("R14C194"),R1C1toA1("R15C2")+":"+R1C1toA1("R15C194")+";"+R1C1toA1("R17C2")+":"+R1C1toA1("R18C194"),0,200,400,200);  
   ExcelSetDiagramma(88,"Ïðèáûëüíûå òðåéäû øîðò, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R20C2")+":"+R1C1toA1("R20C194"),R1C1toA1("R21C2")+":"+R1C1toA1("R21C194")+";"+R1C1toA1("R23C2")+":"+R1C1toA1("R24C194"),400,200,400,200);
   ExcelSetDiagramma(88,"Óáûòî÷íûå òðåéäû ëîíã, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R26C2")+":"+R1C1toA1("R26C194"),R1C1toA1("R27C2")+":"+R1C1toA1("R27C194")+";"+R1C1toA1("R29C2")+":"+R1C1toA1("R30C194"),0,400,400,200);   
   ExcelSetDiagramma(88,"Óáûòî÷íûå òðåéäû øîðò, ðàçâåðòêà ïî âðåìåíè",R1C1toA1("R32C2")+":"+R1C1toA1("R32C194"),R1C1toA1("R33C2")+":"+R1C1toA1("R33C194")+";"+R1C1toA1("R35C2")+":"+R1C1toA1("R36C194"),400,400,400,200); 
   Print(ExcelGetLastErrorText());  

}










Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:
mt4excel

Order Management characteristics:

Other Features:

It writes information to file
Uses files from the file system
It issuies visual alerts to the screen

It reads information from a file