Expertoscope

Author: Roger
Miscellaneous
Uses files from the file systemIt writes information to file
0 Views
0 Downloads
0 Favorites
Expertoscope
//+------------------------------------------------------------------+
//|                                                 Expertoscope.mq4 |
//|                                                            Roger |
//|                                     http://www.rogerssignals.com |
//+------------------------------------------------------------------+
#property copyright "Roger"
#property link      "http://www.rogerssignals.com"
 
#property show_inputs
 
#import "kernel32.dll"
   int  FindFirstFileA(string path, int& answer[]);
   bool FindNextFileA(int handle, int& answer[]);
   bool FindClose(int handle);
   int _lopen  (string path, int of);
   int _llseek (int handle, int offset, int origin);
   int _lread  (int handle, string buffer, int bytes);
   int _lclose (int handle);
#import
string filear[],param[][44]; 
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int win32_DATA[79];
   int num, i,ii,iii, cnt,pos,exp, flag,kol,xx;
   string filename=StringConcatenate(TerminalPath(),"\\profiles\\default\\");
   string word,head,end,sym,per;
   int handle = FindFirstFileA(filename+"*.chr",win32_DATA);
   if(handle!=-1)
      {
      ArrayResize(filear,1);
      filear[0]=bufferToString(win32_DATA);
      ArrayInitialize(win32_DATA,0);
      }
   num=2;
   while (FindNextFileA(handle,win32_DATA))
      {
      ArrayResize(filear,num);
      filear[num-1]=bufferToString(win32_DATA);
      ArrayInitialize(win32_DATA,0);
      num++;
      }
   num-=1;
   if (handle>0) FindClose(handle);
   for(i=0;i<num;i++)
      {//1
      handle=_lopen (filename+filear[i],0);   
      if (handle>=0)
         {//2 
         int result=_llseek (handle,0,0);      if (result<0) {Print ("Error in file seek" );}
         string buffer="";
         string char="x";
         int count=0;
         result=_lread (handle,char,1);
         while (result>0) 
            {//3
               buffer=buffer+char;
               char="x";
               count++;
               result=_lread (handle,char,1);
            }//3
         result=_lclose (handle);              
         if (result<0)  Print ("Error in file close ",filename);         
         }//2
      pos=0;flag=0;
      sym="";
      per="";
      for(cnt=0;cnt<StringLen(buffer);cnt++)
         {//2
         if(StringGetChar(buffer,cnt)==13)
            {//3
            word=StringSubstr(buffer,pos,cnt-pos);
            if(StringFind(word,"symbol=")!=-1&&cnt!=pos&&sym=="")sym=StringSubstr(word,7);
            if(StringFind(word,"period=")!=-1&&cnt!=pos&&per=="")per=StringSubstr(word,7);
            if(StringFind(word,"</window>")!=-1&&cnt!=pos)flag=1;
            if(StringFind(word,"<expert>")!=-1&&cnt!=pos&&flag==1)
               {//4
               exp++;
               ArrayResize(param,exp);
               for(cnt=cnt;cnt<StringLen(buffer);cnt++)
                  {//5
                  if(StringGetChar(buffer,cnt)==13)
                     {//6
                     word=StringSubstr(buffer,pos,cnt-pos);
                     if(StringSubstr(word,0,4)=="name")
                        {//7
                        param[exp-1][1]=StringSubstr(word,5);
                        param[exp-1][4]=sym;
                        param[exp-1][5]=per;
                        if(exp==1)
                           {//8
                           param[0][0]=0;
                           int basa[1]={1};
                           }//8
                        else
                           {//8
                           flag=0;
                           for(ii=0;ii<exp-1;ii++)
                              {//9
                              if(param[ii][1]==StringSubstr(word,5))
                                 {//10
                                 param[exp-1][0]=param[ii][0];
                                 basa[StrToInteger(param[exp-1][0])]=basa[StrToInteger(param[exp-1][0])]+1;
                                 flag=1;
                                 break;
                                 }//10
                              }//9
                           if(flag==0)
                              {//9
                              kol++;
                              ArrayResize(basa,kol+1);
                              basa[kol]=1;
                              param[exp-1][0]=kol;
                              //Print("kol - ",kol);
                              }//9
                           }//8   
                        }//7
                     if(StringSubstr(word,0,5)=="flags")
                        {//7
                        param[exp-1][2]=StringSubstr(word,6);
                        }//7
                     if(StringFind(word,"<inputs>")!=-1&&cnt!=pos)
                        {//7
                        xx=0;
                        for(cnt=cnt;cnt<StringLen(buffer);cnt++)
                           {//8
                           if(StringGetChar(buffer,cnt)==13)
                              {//9
                              word=StringSubstr(buffer,pos,cnt-pos);
                              for(iii=0;iii<StringLen(word);iii++)
                                 {//10
                                 if(CharToStr(StringGetChar(word,iii))=="=")
                                    {//11
                                    param[exp-1][6+xx]=StringSubstr(word,0,iii);
                                    param[exp-1][7+xx]=StringSubstr(word,iii+1);
                                    xx+=2;
                                    }//11
                                 }//10
                              if(StringFind(word,"</inputs>")!=-1)break;
                              pos=cnt+2;
                              }//9
                           }//8   
                        param[exp-1][3]=xx/2;
                        }//7
                     if(StringFind(word,"</inputs>")!=-1)break;
                     pos=cnt+2;
                     }//6
                  }//5
               break;   
               }//4
            pos=cnt+2;
            }//3
         }//2
      }//1
   head="<html><head><title>Experts List</title><style type=\"text/css\" media=\"screen\">td { font: 8pt Tahoma,Arial; }"+
   "</style></head><body topmargin=1 marginheight=1><div align=center><div style=\"font: 20pt Times New Roman\">"+
   "<b>Experts List</b></div><br>";  
   word="";
   for(i=0;i<=kol;i++)
      {
      int par=100;
      for (cnt=0;cnt<par;cnt++)
         {
         xx=0;
         for(ii=0;ii<exp;ii++)
            {
            if(StrToInteger(param[ii][0])!=i)continue;
            if(cnt==0)
               {
               if(xx==0)
                  {
                  par=StrToInteger(param[ii][3])*2+6;
                  word=StringConcatenate(word,"<div align=center><div style=\"font: 14pt Times New Roman\"><b>"+param[ii][1]+"</b></div><br>");
                  word=StringConcatenate(word,"<table cellspacing=1 cellpadding=3 border=1><tr align=left><td><b>Currency</b></td>");
                  }
               word=StringConcatenate(word,"<td><b>",param[ii][4],"</b></td>");              
               }
            if(cnt==1)
               {
               if(xx==0)
                  {
                  word=StringConcatenate(word,"<tr align=left><td><b>Period</b></td>");
                  }
               word=StringConcatenate(word,"<td><b>",param[ii][5],"</b></td>");            
               }  
            if(cnt==2)
               {
               if(xx==0)
                  {
                  word=StringConcatenate(word,"<tr align=left><td><b>Trade</b></td>");
                  }
               if(!DecToBin(StrToInteger(param[ii][2])))per="No";else per="Yes";
               word=StringConcatenate(word,"<td><b>",per,"</b></td>");          
               }  
            if(cnt==3||cnt==4||cnt==5)continue;
            if(cnt>5)
               {
               if(MathMod(cnt,2)*2==0)
                  {
                  if(xx==0)word=StringConcatenate(word,"<tr align=left><td><b>",param[ii][cnt],"</b></td>");
                  xx++;
                  continue;
                  }
               else word=StringConcatenate(word,"<td><b>",param[ii][cnt],"</b></td>");            
               }  
            xx++;
            }
         }   
      word=StringConcatenate(word,"</table><br>");
      }
   end="</body></html>";
   word=StringConcatenate(head,word,end);
   handle=FileOpen("Expert List.htm",FILE_WRITE);
   if(handle>0)FileWrite(handle,word);
   FileClose(handle);
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//|  read text from buffer                                           |
//+------------------------------------------------------------------+ 
string bufferToString(int buffer[])
   {
   string text="";
   
   int pos = 10;
   for (int i=0; i<64; i++)
      {
      pos++;
      int curr = buffer[pos];
      text = text + CharToStr(curr & 0x000000FF)
         +CharToStr(curr >> 8 & 0x000000FF)
         +CharToStr(curr >> 16 & 0x000000FF)
         +CharToStr(curr >> 24 & 0x000000FF);
      }
   return (text);
   }  
//+------------------------------------------------------------------+
bool DecToBin(int dec)
   {
   int ch,x=3;
   bool res;
   dec-=3;
   while(x>0)
      {
      ch=MathMod(dec,2);
      dec=MathFloor(dec/2);
      x--;
      }
   if(ch==0)res=false; else res=true;   
   return(res);
   }

Comments