CME_FUTURES_VOLUME

Author: Copyright � 2012�2013, Financial Arsenal LTD
0 Views
0 Downloads
0 Favorites
CME_FUTURES_VOLUME
//+------------------------------------------------------------------+
//|                                           CME_FUTURES_VOLUME.mq4 |
//|                     Copyright © 2012–2013, Financial Arsenal LTD |
//|                                     http://www.arsenal-forex.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012–2013, Financial Arsenal LTD"
#property link      "http://www.arsenal-forex.ru/"
//+------------------------------------------------------------------+
#import "user32.dll"
  int   RegisterWindowMessageA(string lpString);
  int   SetTimer(int hWnd,int nIDEvent,int uElapse,int& lpTimerFunc[]);
  bool  KillTimer(int hWnd,int uIDEvent);
#import "kernel32.dll"
  int   GetModuleHandleA(string lpModuleName);
  int   GetProcAddress(int hModule,string lpProcName);   
#import
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color4 Silver
#property indicator_color5 Silver
#property indicator_color6 DodgerBlue
#property indicator_color7 Crimson
#property indicator_color8 LimeGreen
#property indicator_level1 0
#property indicator_levelcolor Silver
//+------------------------------------------------------------------+
//| Extern Variables                                                 |
//+------------------------------------------------------------------+
extern   bool  Show_Volumes_or_Delta                          = true ;
extern   bool  SelectMarketDeptBar                            = false ;  
extern   bool  ShowLevels_of_Breakdown                        = false;
//+------------------------------------------------------------------+
//|   Defines & Global variavles                                     |
//+------------------------------------------------------------------+
#define empty  EMPTY_VALUE
#define iName  "CME FUTURES VOLUME"
#define lLong  "Long_Breakdown_Level"
#define lShort "Short_Breakdown_Level"
#define hvNm   "MD_SHIFT"
//+------------------------------------------------------------------+
bool gDemo = false;
bool gOwn  = false;
bool Detalied = true;
//----
int TimerId=666;
int  gFiles   = 0;
int  gMdShift = 0;
int  gVscale  = 1;
int  gDelay   = 0;
int   MarketDeptBarShift = 1; 
string txt;
string Symbols[14]={"AUDUSD","CADUSD","CHFUSD","EURUSD","EURGBP","EURJPY","GBPUSD","NZDUSD","USDJPY","USDCAD","USDCHF","6EM3","6EU3","6EZ3"};
//----
string inarr[15000];
int    buff[108000][4];
int    stack[1000][2];
//--- buffers
double volu[];
double vold[];
double long[];
double short[];
double delta[];
double ext_long[];
double ext_short[];
double ext_delta[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init(){int i,ii;
	//---- indicators
	SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexStyle(4,DRAW_HISTOGRAM);
   SetIndexStyle(5,DRAW_HISTOGRAM);
   SetIndexStyle(6,DRAW_HISTOGRAM);
   SetIndexStyle(7,DRAW_HISTOGRAM);
   //----
   SetIndexBuffer(0,ext_long);
   SetIndexBuffer(1,ext_short);
   SetIndexBuffer(2,ext_delta);
   SetIndexBuffer(3,volu);
   SetIndexBuffer(4,vold);
   SetIndexBuffer(5,long);
   SetIndexBuffer(6,short);
   SetIndexBuffer(7,delta);
	//----
	SetIndexEmptyValue(0,0.0);
	SetIndexEmptyValue(1,0.0);
	SetIndexEmptyValue(2,0.0);
	SetIndexEmptyValue(3,0.0);
	SetIndexEmptyValue(4,0.0);
	SetIndexEmptyValue(5,0.0);
	SetIndexEmptyValue(6,0.0);
	SetIndexEmptyValue(7,0.0);
	//----
	SetIndexLabel(0,"");
	SetIndexLabel(1,"");
	SetIndexLabel(2,"");
	SetIndexLabel(3,"Volume / 2");
	SetIndexLabel(4,"Volume / 2 ");
	SetIndexLabel(5,"Long Volume");
	SetIndexLabel(6,"Short Volume");
	SetIndexLabel(7,"Volume Delta");
	//----
   IndicatorDigits(0);
   IndicatorShortName(iName); 
   //----
   gFiles = CheckDataFiles();
   if(MarketDeptBarShift<1){MarketDeptBarShift=1;}
   gMdShift = MarketDeptBarShift;
   if(SelectMarketDeptBar){gMdShift = GetMarketDeptBar(MarketDeptBarShift);}else{gMdShift=0;}
   SetMyTimer(100);
   if(!gOwn){SelectMarketDeptBar=true;}
   //----
return;}
//+------------------------------------------------------------------+
void deinit(){
for(int i=ObjectsTotal()-1;i>=0;i--){
   string nm = ObjectName(i);
   if(StringFind(nm,"ftlevel")>=0){ObjectDelete(nm);}
   if(StringFind(nm,"arrow_")>=0){ObjectDelete(nm);}    
}
DelText();
if(UninitializeReason()!=REASON_CHARTCHANGE){
   ObjectDelete(hvNm);
   ObjectDelete(lLong);
   ObjectDelete(lShort);
   KillMyTimer();
}
return;}
//+------------------------------------------------------------------+
void start(){string fsy,lsy,sy = Symbol();
   if(!IsSymbol(sy)){Comment("Not yet futures for this symbol.");return;}// åñëè íåò ôüþ÷åðñà ïî ýòîìó ñèìâîëó âûõîäèì.
	//----
   int width = GetChartScale();
   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,width);
   SetIndexStyle(4,DRAW_HISTOGRAM,EMPTY,width);	
   SetIndexStyle(5,DRAW_HISTOGRAM,EMPTY,width);	
   SetIndexStyle(6,DRAW_HISTOGRAM,EMPTY,width);	
   SetIndexStyle(7,DRAW_HISTOGRAM,EMPTY,width);	
   //----
   static int pretime=0,prebars=0,lvol=0;
   static double prerp = 0;
   static bool s_l;	 
   int i, ii=0, x, y, counted = IndicatorCounted();
   if (counted > 0) counted--;
   int limit = Bars - counted;
   int per   = Period();
   int pos = StringFind(Symbol(),"f");
   gDelay  = 0; 
   //----Ïðèâîäèì ñèìâîë ê êîðíþ
   if(gDemo){
      fsy = "df"+sy;
      lsy = "df"+sy+"_L";
      if(pos<0){
         Comment("You do not have such features in this version.");
         return;
      }
   }else{
      fsy = "f"+sy;
      lsy = "f"+sy+"_L";
   }
   if(pos>=0&&pos<2){sy = Symbol();}
   //----
   if(!gOwn){
      fsy = Symbol();
      lsy = Symbol();
   }
   //----
   int    maxvol[4];
   int pper  = PERIOD_M1;
   int    DG   = MarketInfo(sy,MODE_DIGITS);
   double PT   = MarketInfo(sy,MODE_POINT);
   if(DG==3||DG==5){DG--;PT*=10;}
   double op_f = iOpen(lsy,per,0);
   double fbid = MarketInfo(fsy,MODE_BID);
   double op_p = iOpen(sy,per,0);
   double bid  = NormalizeDouble(MarketInfo(sy,MODE_BID),DG);
   double shf  = (op_p-op_f);
   int    optm = iTime(fsy,per,0);
   int    sm   = 100 + MathRound(bid-op_p);
   int    l_s  = 2;// 0=long, 1=short, 2=long/short/2
   int    asz  = ArrayRange(buff,0);
   int    fvol;
   double shift;
   //-------------------Ïîëíûé ïåðåðàñ÷åò âñåãî èíäèêàòîðà ïðîèçâîäèì ïðè----------------------------------+
   if((limit > 3 && prebars != Bars)||                   // ïðè ïîëíîì ïåðåñ÷åòå, èëè ïîÿâëåíèè íîâûõ áàîâ
      GetMarketDeptBar(MarketDeptBarShift)!=gMdShift||   // Èëè èçìåíåíèè ïîëîæåíèÿ ìàðêåðà èññëåäóåìîãî áàðà
      gVscale != VertAutoScale()||                       // Èëè èçìåíåíèè âåðòèêàëüíîé øêàëû
      (gMdShift==0 && NewM1Bar())){                      // Èëè åñëè áàð íóëåâîé, òî ñ ïðèõîäîì íîâîé ìèíóòêè.
      //----ëîêàëüíûå îáúÿâëåíèÿ
            ii = 0;
      prebars  = Bars;
      gMdShift = GetMarketDeptBar(MarketDeptBarShift);
      gVscale  = VertAutoScale();
      //----Î÷èñòêà ìàññèâîâ
      ArrayInitialize(stack,0);
      DelText();
      //----Ðàñ÷åò èíäèêàòîðà ñ íóëÿ
      int preii=-1;
      for(x=0;x<gFiles;x++){
         ArraySetAsSeries(buff,false);
         int sz = ReadDataFile(x); //Print(sz);
         ArraySetAsSeries(buff,true);
         int tm = buff[0][0];
         ArrayInitialize(maxvol,0);
         for(i=0;i<sz;i++){
            ii = iBarShift(Symbol(),Period(),buff[i][0],false);
            if(ii!=preii){
               preii=ii;
               long[ii]  =0;
	            short[ii] =0;
	            delta[ii] =0;
            }
            if(x==0&&i==0){pretime = Time[ii];}                        // ôèêñèðóåì âðåìÿ ïåðâîãî ïîñ÷èòàííîãî áàðà
            //---- âîññòàíàâëèâàåì ñòàêàí èç ôàéëà (äëÿ ÒÔ > PERIOD_M1)
            if(ii == gMdShift){// íà âûáðàííîì áàðå ñîáèðàåì ñòàêàí èç ôàéëà
               double fm1_oppr = iOpen(fsy,PERIOD_M1,iBarShift(fsy,PERIOD_M1,buff[i][0]));
               double fcp_oppr = iOpen(fsy,Period(),iBarShift(fsy,Period(),buff[i][0]));
               int    cp_shift = 500+(NormalizeDouble(fm1_oppr-fcp_oppr,DG)/PT)+(buff[i][1]-100);
               stack[cp_shift][0] += buff[i][2];
               stack[cp_shift][1] += buff[i][3];
            }
            //----
            if(ii==y){
               if(maxvol[2] < buff[i][2]){
                  maxvol[0] = buff[i][1];
                  maxvol[2] = buff[i][2];
               }
               if(maxvol[3] < buff[i][3]){
                  maxvol[1] = buff[i][1];
                  maxvol[3] = buff[i][3];
               }
            }else{
               //SetMaxPrices(ii,maxvol);
               y = ii;
               maxvol[0] = buff[i][1];
               maxvol[1] = buff[i][1];
               maxvol[2] = buff[i][2];
               maxvol[3] = buff[i][3];
            }
            //----
            long[ii] += buff[i][2];
	         short[ii]-= buff[i][3];
	         delta[ii] = long[ii]+short[ii];//buff[i][2]-buff[i][3];
         }
      }
      x=ii+1;
      for(i=1;i<=x;i++){//äûðû â ôàéëå âîññòàíàâëèâàåì çà ñ÷åò ïðÿìûõ îáúåìîâ ëàñòîâ
         if(long[i]==0&&short[i]==0){
            ii = iBarShift(lsy,Period(),Time[i]-gDelay,true);
            if(ii<0){continue;}
            fvol = iVolume(lsy,Period(),ii);
            volu[i] =  fvol/2;
            vold[i] = -fvol/2;
         }
      }
      for(i=x;i<limit;i++){// äîáèâàåì íåäîñòàþùèé îáúåì èç èíñòðóìåíòà (áåç ðàñêëàäêè íà øîðò\ëîðã)
         ii = iBarShift(lsy,Period(),Time[i]-gDelay,true);
         fvol = iVolume(lsy,Period(),ii);
         volu[i] =  fvol/2;
         vold[i] = -fvol/2;
      }
      if(gMdShift>0){
         //----Îïðåäåÿåì ïðåäåëû ñòàêàíà
         int b_summ,s_summ,max=0,min=1000;
         double b_max=0,s_max=0;
         int bm_i=0,bm_s=0,sm_i=0,sm_s=0;
         for(i=0;i<1000;i++){
            if((i-500)%gVscale == 0){
               if(b_summ!=0||s_summ!=0){
                  if(min > i){min = i;}
                  if(max < i){max = i;}                 
               }
               if(b_summ > bm_s){
                  bm_s = b_summ;
                  bm_i = i;
               }
               if(s_summ > sm_s){
                  sm_s = s_summ;
                  sm_i = i;
               }
               b_summ = stack[i][0];
               s_summ = stack[i][1];   
            }else{          
               b_summ += stack[i][0];
               s_summ += stack[i][1];            
            }
         }
         shift = 0;//iOpen(fsy,per,gMdShift)-iOpen(sy,per,gMdShift); Comment(shift);
         double p_min = shift + iOpen(Symbol(),Period(),gMdShift) + (min-(501+gVscale)) * PT;   // íèæíÿÿ öåíà êîðîáêè
         double p_max = shift + iOpen(Symbol(),Period(),gMdShift) + (max-(500-gVscale*2)) * PT; // âåðõíÿÿ öåíà êîðîáêè
         double cls_p = shift + iOpen(Symbol(),Period(),gMdShift) + (max-(501-gVscale)) * PT;   // ðàçäåëèòåëü çàãîëîâêà
         double bmv_p = shift + iOpen(Symbol(),Period(),gMdShift) + ((bm_i-500)-gVscale/2) * PT;   // öåíà ìàêñèìàëüíîãî êëàñòåðà ïîêóïîê
         double smv_p = shift + iOpen(Symbol(),Period(),gMdShift) + ((sm_i-500)-gVscale/2) * PT;   // öåíà ìàêñ êëàñòåðà ïðîäàæ
         if(min!=1000&&max!=0){
            SetMarketDept(p_min,p_max,cls_p,bmv_p,smv_p,gVscale);
         }
         //----Âûáîðêà è ïîêàç ñòàêàíà
         for(i=0;i<1000;i++){
            if((i-500)%gVscale == 0){
               double prpr = shift + iOpen(Symbol(),Period(),gMdShift) + (i-500) * PT;
               if(min <= i && max >= i){SetLevel(prpr,s_summ,b_summ);}
               b_summ = stack[i][0];
               s_summ = stack[i][1];   
            }else{          
               b_summ += stack[i][0];
               s_summ += stack[i][1];            
            }
         }   
      }   
   }
   //-----------------------------Îáðàáîòêà íóëåâîãî áàðà----------------------------------------------------------------+ 
   if(gOwn){
      fvol = iVolume(lsy,PERIOD_M1,0);//Comment(iVolume(lsy,Period(),0));
      int dvol = fvol - lvol;
      if(dvol<0){dvol = fvol;}  
      int  curr_sft = 500+(NormalizeDouble(iClose(fsy,Period(),0)-iOpen(fsy,Period(),0),DG)/PT);
      double fask = MarketInfo(fsy,MODE_ASK);
      double last = MarketInfo(lsy,MODE_BID);
      if(dvol!=0){
         if(last>=fask){// ïðèïèñûâàåì ê ëîíãàì
            long[0]+=dvol;
            stack[curr_sft][0]+=dvol;
         }else if(last<=fbid){// ïðèïèñûâàåì ê øîðòàì
            short[0]-=dvol;
            stack[curr_sft][1]+=dvol;
         }else{// äåëèì íà ïîëîâèíó ëîíã\øîðò
            if(dvol%2==0){
               long[0]+=(dvol/2);
               short[0]-=(dvol/2);
               stack[curr_sft][0]+=dvol/2;
               stack[curr_sft][1]+=dvol/2;
            }else{
               if(s_l){
                  long[0]+=((dvol/2)+(dvol%2));
                  short[0]-=(dvol/2); 
                  stack[curr_sft][0]+=(dvol/2+dvol%2);
                  stack[curr_sft][1]+=dvol/2;           
                  s_l = false;
               }else{
                  long[0]+=(dvol/2);
                  short[0]-=((dvol/2)+(dvol%2));
                  stack[curr_sft][1]+=(dvol/2+dvol%2);
                  stack[curr_sft][0]+=dvol/2;  
                  s_l = true;
               }
            }
         }
         delta[0] = long[0]+short[0]; 
      }  
      lvol = fvol; 
   }
   //----Ïîêàç ñòàêàíà òåêóùåãî áàðà
   if(gMdShift==0){
      b_summ=0;s_summ=0;max=0;min=1000;
      b_max=0;s_max=0;
      bm_i=0;bm_s=0;sm_i=0;sm_s=0;
      for(i=0;i<1000;i++){
         if((i-500)%gVscale == 0){
            if(b_summ!=0||s_summ!=0){
               if(min > i){min = i;}
               if(max < i){max = i;}                 
            }
            if(b_summ > bm_s){
               bm_s = b_summ;
               bm_i = i;
            }
            if(s_summ > sm_s){
               sm_s = s_summ;
               sm_i = i;
            }
            b_summ = stack[i][0];
            s_summ = stack[i][1];   
         }else{          
            b_summ += stack[i][0];
            s_summ += stack[i][1];            
         }
      }
      shift = iOpen(sy,per,0)-iOpen(fsy,per,0);
      p_min = shift + iOpen(Symbol(),Period(),gMdShift) + (min-(501+gVscale)) * PT;   // íèæíÿÿ öåíà êîðîáêè
      p_max = shift + iOpen(Symbol(),Period(),gMdShift) + (max-(500-gVscale*2)) * PT; // âåðõíÿÿ öåíà êîðîáêè
      cls_p = shift + iOpen(Symbol(),Period(),gMdShift) + (max-(501-gVscale)) * PT;   // ðàçäåëèòåëü çàãîëîâêà
      bmv_p = shift + iOpen(Symbol(),Period(),gMdShift) + ((bm_i-500)-gVscale/2) * PT;   // öåíà ìàêñèìàëüíîãî êëàñòåðà ïîêóïîê
      smv_p = shift + iOpen(Symbol(),Period(),gMdShift) + ((sm_i-500)-gVscale/2) * PT;   // öåíà ìàêñ êëàñòåðà ïðîäàæ
      if(min!=1000&&max!=0){
         SetMarketDept(p_min,p_max,cls_p,bmv_p,smv_p,gVscale);
      }
      //----Âûáîðêà è ïîêàç ñòàêàíà
      for(i=0;i<1000;i++){
         if((i-500)%gVscale == 0){
            prpr = shift + iOpen(Symbol(),Period(),gMdShift) + (i-500) * PT;
            if(min <= i && max >= i){SetLevel(prpr,s_summ,b_summ);}
            b_summ = stack[i][0];
            s_summ = stack[i][1];   
         }else{          
            b_summ += stack[i][0];
            s_summ += stack[i][1];            
         }
      }   
   }
   //----Ïèøåì çíà÷åíèÿ áóôåðîâ âî âíåøíèå
   int max_vol = 10;
   ii=0;
   if(!gOwn){ii=1;}
   for(i=ii;i<limit;i++){
      ext_long [i] = long[i]+volu[i];
      ext_short[i] = short[i]+vold[i];
      ext_delta[i] = delta[i];
      if(i<WindowFirstVisibleBar()){if(ext_long[i] > max_vol){max_vol = ext_long[i];}}
   }
   CheckLevels(max_vol,width,gVscale,limit,ext_long,ext_short);
   //----îáùèå-----------------
   CheckMDBox(GetChartScale());
   SetLevels(max_vol);
   WindowRedraw();
	//----
return;}
//+------------------------------------------------------------------+
//|       Description : Ñòàâèò è êîðåêòèðóåò çíà÷êè íà ïðîáèòîì áàðå |
//+------------------------------------------------------------------+
void CheckLevels(int start,int hscale,int scale,int limit, double long[], double short[]){int i,ii,sz,hsz;double pr;string nm,gp = "arrow_";
   if(!ShowLevels_of_Breakdown){return;}
   if(ObjectFind(lLong)<0){SetLevels(start);}
   int max = ObjectGet(lLong ,OBJPROP_PRICE1);
   if(max < 0){ObjectSet(lLong,OBJPROP_PRICE1,1);}
   if(ObjectFind(lShort)<0){SetLevels(start);}
   int min = ObjectGet(lShort,OBJPROP_PRICE1);
   if(min > 0){ObjectSet(lShort,OBJPROP_PRICE1,-1);}
   switch(hscale){
		case  0 :	hsz = 0; break;
		case  1 :	hsz = 0; break;
		case  2 :	hsz = 1; break;
		case  3 :	hsz = 2; break;
		case  6 :	hsz = 3; break;
		default :   hsz = 5; break;
	}
   for(i=0;i<limit;i++){
      nm = gp+"lvol+"+Time[i];
      if(long[i] > max && max > 0){
         sz = long[i]/max;
         pr = High[i] + (20*scale+((12*sz)*scale))*Point;
         ObjectCreate(nm,OBJ_ARROW,0,0,0);
         ObjectSet(nm,OBJPROP_ARROWCODE,108);
         ObjectSet(nm,OBJPROP_PRICE1,pr);
         ObjectSet(nm,OBJPROP_TIME1,Time[i]);
         ObjectSet(nm,OBJPROP_WIDTH,sz*hsz);
         ObjectSet(nm,OBJPROP_STYLE,0);
         ObjectSet(nm,OBJPROP_COLOR,indicator_color6);
         ObjectSet(nm,OBJPROP_BACK,true);
      }else{
         ObjectDelete(nm);
      }
      nm = gp+"svol+"+Time[i];
      if(short[i] < min && min < 0){
         sz = short[i]/min;
         pr = Low[i] + (((2*sz)*scale)-10*scale)*Point;
         ObjectCreate(nm,OBJ_ARROW,0,0,0);
         ObjectSet(nm,OBJPROP_ARROWCODE,108);
         ObjectSet(nm,OBJPROP_PRICE1,pr);
         ObjectSet(nm,OBJPROP_TIME1,Time[i]);
         ObjectSet(nm,OBJPROP_WIDTH,sz*hsz);
         ObjectSet(nm,OBJPROP_STYLE,0);
         ObjectSet(nm,OBJPROP_COLOR,indicator_color7);
         ObjectSet(nm,OBJPROP_BACK,true);
      }else{
         ObjectDelete(nm);
      }
   }
   return;
}
//+------------------------------------------------------------------+
//|      Description : Âîçâðàùàåò íîìåð áàðà âåðòèêàëüíîé îï. ëèíèèè |
//+------------------------------------------------------------------+
int GetMarketDeptBar(int md_start){int i,tm;string nm = hvNm;
   if(!SelectMarketDeptBar){ObjectDelete(hvNm);return(0);}
   if(ObjectFind(nm)<0){
      ObjectCreate(nm,OBJ_VLINE,0,0,0);
      ObjectSet(nm,OBJPROP_TIME1,Time[md_start]);
      ObjectSet(nm,OBJPROP_WIDTH,1);
      ObjectSet(nm,OBJPROP_STYLE,1);
      ObjectSet(nm,OBJPROP_COLOR,DarkViolet);
      ObjectSet(nm,OBJPROP_BACK,true);
      ObjectSetText(nm,"Select Bar for Show his Market Dept",7,"Arial",White);
      return(md_start);
   }else{
      i = iBarShift(Symbol(),Period(),ObjectGet(nm,OBJPROP_TIME1));
      if(!gOwn){
         if(i<1){
            i=1;
            ObjectSet(nm,OBJPROP_TIME1,Time[1]);
         }
      }else{
         if(gDemo){
            
         }
      }
      if(i<=0){
         ObjectDelete(hvNm);
         SelectMarketDeptBar = false;
         return(0);
      }
      
      return(i);
   }
}
//+------------------------------------------------------------------+
//|  Description : Óñòàíàâëèâàåò îïîðíûå ëèíèè ïîðîãà ïîêàçà îáúåìà  |
//+------------------------------------------------------------------+
void SetLevels(int start){int hwd;string nm;if(!ShowLevels_of_Breakdown){return;}
   hwd = WindowFind(iName);
   nm = lLong;
   if(ObjectFind(nm)!=hwd){
      ObjectCreate(nm,OBJ_HLINE,hwd,0,0);
      ObjectSet(nm,OBJPROP_PRICE1,start/2);
      ObjectSet(nm,OBJPROP_COLOR,Silver);
      ObjectSet(nm,OBJPROP_STYLE,2);
      ObjectSet(nm,OBJPROP_WIDTH,1);
      ObjectSet(nm,OBJPROP_BACK,false);
      ObjectSetText(nm,nm,7,"Arial",White);
   }
   nm = lShort;
   if(ObjectFind(nm)!=hwd){
      ObjectCreate(nm,OBJ_HLINE,hwd,0,0);
      ObjectSet(nm,OBJPROP_PRICE1,-start/2);
      ObjectSet(nm,OBJPROP_COLOR,Silver);
      ObjectSet(nm,OBJPROP_STYLE,2);
      ObjectSet(nm,OBJPROP_WIDTH,1);
      ObjectSet(nm,OBJPROP_BACK,false);
      ObjectSetText(nm,nm,7,"Arial",White);
   }
   return;
}
//+------------------------------------------------------------------+
//|                             Description : Óäàëÿåò ñòàêàí ñ ÷àðòà |
//+------------------------------------------------------------------+
void DelText(){
   for(int i=ObjectsTotal()-1;i>=0;i--){
      string nm = ObjectName(i);
      if(StringFind(nm,"step_")>=0){ObjectDelete(nm);}
      if(StringFind(nm,"MARKET_DEPT")>=0){ObjectDelete(nm);}
   }
   WindowRedraw();
   return;
}
//+------------------------------------------------------------------+
//|                                 Function  :int GetWindowHigh([0])|
//|                                 Copyright © 2010, XrustSolution. |
//|                                           mail: xrustx@gmail.com |
//+------------------------------------------------------------------+
//|      Description : Âîçâðàùàåò ðàçìåð ÷àðòà ïî âåðòèêàëè (ïèêñåëè)|
//+------------------------------------------------------------------+
int window[4];
#import "user32.dll"
int  GetWindowDC(int h);
bool GetClientRect(int hWnd,int& Pos[4]);
bool GetWindowRect(int h, int& pos[4]);
int  PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int  ReleaseDC(int hWnd,int hDC);
#import
#import "gdi32.dll"
  int GetPixel(int hDC, int x, int y);
#import
//+------------------------------------------------------------------+
int GetWindowHigh(int wnd=0){int i,x=0,y=0;int window[4];
	double up,dn,pr,pPoint;
	int whd = WindowHandle(Symbol(),Period());
	GetClientRect(whd,window);
	int high = window[3]-window[1];
	int hDC = GetWindowDC(whd);
	int col = GetPixel(hDC, 4, 4);// left side	
	for(i=5;i<high;i++){
		if(GetPixel(hDC, window[2]-41, i)!=col&&
		   GetPixel(hDC, 4, i)!=col){
			if(x>=wnd){
				if(x==0){i-=6;}
				i-=y;
				break;
			}else{
				x++;
				y=i+3;
			}
		}
	}
	ReleaseDC(whd,hDC);
	return(i);
}
//+------------------------------------------------------------------+
//|                            Description : Ñîçäàåò ñòàêàí íà ÷àðòå |
//+------------------------------------------------------------------+
void SetMarketDept(double min,double max,double cls,double bvp,double svp,int clst){string nm = "_MARKET_DEPT";int sft = Period()*GetChartScale(); 
   ObjectCreate(nm,OBJ_RECTANGLE,0,0,0,0,0);
   ObjectSet(nm,OBJPROP_PRICE1,min);
   ObjectSet(nm,OBJPROP_PRICE2,max);
   ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*12);
   ObjectSet(nm,OBJPROP_TIME2,Time[0]+sft*16);
   ObjectSet(nm,OBJPROP_COLOR,DarkSlateGray);
   ObjectSet(nm,OBJPROP_BACK,true);
   ObjectSet(nm,OBJPROP_STYLE,0);
   ObjectSet(nm,OBJPROP_WIDTH,1);
   nm = "MARKET_DEPT";
   ObjectCreate(nm,OBJ_RECTANGLE,0,0,0,0,0);
   ObjectSet(nm,OBJPROP_PRICE1,min);
   ObjectSet(nm,OBJPROP_PRICE2,max);
   ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*12);
   ObjectSet(nm,OBJPROP_TIME2,Time[0]+sft*16);
   ObjectSet(nm,OBJPROP_COLOR,SlateGray);
   ObjectSet(nm,OBJPROP_BACK,false);
   ObjectSet(nm,OBJPROP_STYLE,0);
   ObjectSet(nm,OBJPROP_WIDTH,1);
   nm = "sMARKET_DEPT";
   ObjectCreate(nm,OBJ_RECTANGLE,0,0,0,0,0);
   ObjectSet(nm,OBJPROP_PRICE1,cls);
   ObjectSet(nm,OBJPROP_PRICE2,max);
   ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*12);
   ObjectSet(nm,OBJPROP_TIME2,Time[0]+sft*16);
   ObjectSet(nm,OBJPROP_COLOR,SlateGray);
   ObjectSet(nm,OBJPROP_BACK,false);
   ObjectSet(nm,OBJPROP_STYLE,0);
   ObjectSet(nm,OBJPROP_WIDTH,1);
   nm = "xMARKET_DEPT";
   ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
   if(Show_Volumes_or_Delta){
      ObjectSetText(nm,"Volumes. Cluster sz = "+DoubleToStr(clst,0)+" pt.",8,"Arial narrow",White);
   }else{
      ObjectSetText(nm,"Delta.  Cluster sz = "+DoubleToStr(clst,0)+" pt.",8,"Arial",White);
   }
   ObjectSet(nm,OBJPROP_PRICE1,max);
   ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*14);
   ObjectSet(nm,OBJPROP_COLOR,White);
   int v_time = ObjectGet(hvNm,OBJPROP_TIME1);
   if(v_time == 0){v_time = Time[0];}
   nm = "step_long_vol";
   ObjectCreate(nm,OBJ_ARROW,0,0,0);
   ObjectSet(nm,OBJPROP_ARROWCODE,6);
   ObjectSet(nm,OBJPROP_TIME1,v_time);
   ObjectSet(nm,OBJPROP_PRICE1,bvp);
   ObjectSet(nm,OBJPROP_WIDTH,1);
   ObjectSet(nm,OBJPROP_COLOR,indicator_color6);
   ObjectSet(nm,OBJPROP_STYLE,0);
   ObjectSet(nm,OBJPROP_BACK,false);
   ObjectSetText(nm,"Longs cluster max Volume",8,"Tahoma",White);
   nm = "step_short_vol";
   ObjectCreate(nm,OBJ_ARROW,0,0,0);
   ObjectSet(nm,OBJPROP_ARROWCODE,5);
   ObjectSet(nm,OBJPROP_TIME1,v_time);
   ObjectSet(nm,OBJPROP_PRICE1,svp);
   ObjectSet(nm,OBJPROP_WIDTH,1);
   ObjectSet(nm,OBJPROP_COLOR,indicator_color7);
   ObjectSet(nm,OBJPROP_STYLE,0);
   ObjectSet(nm,OBJPROP_BACK,false);
   ObjectSetText(nm,"Shorts cluster max Volume",8,"Tahoma",White);  
   return;
}
//+------------------------------------------------------------------+
//|      Description : Âîçâðàùàåò ðàçìåð ÷àðòà ïî âåðòèêàëè (ìàñøòàá)|
//+------------------------------------------------------------------+
int VertAutoScale(){
   int pipforwin = (WindowPriceMax()-WindowPriceMin())/Point; 
   int vertscale = pipforwin/GetWindowHigh();
   vertscale++;
   return(vertscale);
}
//+------------------------------------------------------------------+
//|            Description : Êîîðåêòèðóåò ïîëîæåíèå è ðàçìåð ñòàêàíà |
//+------------------------------------------------------------------+
void CheckMDBox(int scale){int i,ii,h_sft,l_sft,r_sft;string nm,pre = "step_"; 
   //---Îïðåäåëÿåì ìíîæèòåëè äëÿ ðàçíîãî ìàñøòàáà ãðàôèêà
   switch(scale){
      case 0: 
         h_sft = 30;
      break;
      case 1: 
         h_sft = 16;
      break;
      case 2: 
         h_sft = 8;
      break;
      case 3: 
         h_sft = 4;
      break;
      case 6: 
         h_sft = 2;
      break;
      default: 
         h_sft = 1;
      break;
      
   }
   //---Îïðåäåëÿåì ìíîæèòåëè äëÿ ðàçíîé øèðèíû ãðàôèêà
   int tm_lbox, tm_rbox, tm_left, tm_center, tm_rigth, mno = Period()*60;
   r_sft = (WindowBarsPerChart()-WindowFirstVisibleBar());
   if(r_sft<=h_sft*4){
      ii = WindowFirstVisibleBar()-h_sft*4;
      r_sft = 0;
      tm_rbox   = Time[ii];
      tm_lbox   = Time[ii+h_sft*4];
      tm_rigth  = Time[ii+h_sft];
      tm_center = Time[ii+h_sft*2];
      tm_left   = Time[ii+h_sft*3]; 
   }else{
      ii = 0;
      r_sft*=mno;
      tm_rbox   = r_sft + Time[ii];
      tm_lbox   = r_sft + Time[ii]-(h_sft*4*mno);
      tm_rigth  = r_sft + Time[ii]-(h_sft*mno);
      tm_center = r_sft + Time[ii]-(h_sft*2*mno);
      tm_left   = r_sft + Time[ii]-(h_sft*3*mno); 
   }
   //---Êîððåêòèðóåì ïîëîæåíèå ñòàêàíà
   for(i=ObjectsTotal()-1;i>=0;i--){
      nm = ObjectName(i);
      if(StringFind(nm,pre+"prc_")>=0){
         ObjectSet(nm,OBJPROP_TIME1,tm_center);//öåíû (ñåðåäèíà)
         continue;
      }
      if(StringFind(nm,pre+"srt_")>=0){
         ObjectSet(nm,OBJPROP_TIME1,tm_left);// ëåâûå öèôðû
         //if(StringFind(nm,"delta")>=0){ObjectSet(nm,OBJPROP_TIME1,tm_lbox);}
         continue;
      }
      if(StringFind(nm,pre+"lng_")>=0){
         ObjectSet(nm,OBJPROP_TIME1,tm_rigth);// ïðàâûå öèôðû
         //if(StringFind(nm,"delta")>=0){ObjectSet(nm,OBJPROP_TIME1,tm_rbox);}
         continue;
      }
      if(StringFind(nm,"MARKET_DEPT")>=0){
         ObjectSet(nm,OBJPROP_TIME1,tm_rbox);// ïðàâûé êðàé áîêñà
         ObjectSet(nm,OBJPROP_TIME2,tm_lbox);// ëåâûé êðàé áîêñà
      }
      if(StringFind(nm,"xMARKET_DEPT")>=0){
         ObjectSet(nm,OBJPROP_TIME1,tm_center);
         continue;
      }
   }
   return;
}
//+------------------------------------------------------------------+
//|                       Description : Çàïîëíÿåò ñòàêàí T&S äàííûìè |
//+------------------------------------------------------------------+
void SetLevel(double pr,int vl,int vs){string nm,gp = "step_";int clr;double pt = Point*5;int sft = Period()*GetChartScale();
   int clr_s = Gray,clr_l = Gray,clr_p = Gray;
   if(pr - Bid> pt){
      clr = Coral;
      if(vl==0){clr=Gray;}
   }else if(Bid - pr > pt){
      clr = DodgerBlue;
      if(vl==0){clr=Gray;}
   }else{
      clr = GreenYellow;
   }
   if(vl!=0){clr_l = Coral;}
   if(vs!=0){clr_s = DodgerBlue;}
   if(vl!=0||vs!=0){
      clr_p = White;
      if(vl>vs){clr_p = Coral;}
      if(vl<vs){clr_p = DodgerBlue;}
   } 
   if(gMdShift==0){
      if(MathAbs(pr-Bid)<=gVscale*Point*4){
         clr_p = GreenYellow;
      }else{
         if(vl!=0||vs!=0){
            clr_p = White;
            if(vl>vs){clr_p = Coral;}
            if(vl<vs){clr_p = DodgerBlue;}
         } 
      }
   }
   nm = gp+"prc_"+DoubleToStr(pr,Digits-1);
   ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
   ObjectSetText(nm,DoubleToStr(pr,Digits-1),7,"Arial",White);
   ObjectSet(nm,OBJPROP_PRICE1,pr);
   ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*14);
   ObjectSet(nm,OBJPROP_COLOR,clr_p);
   
   if(Show_Volumes_or_Delta){
      nm = gp+"srt_"+DoubleToStr(pr,Digits-1);
      int ovl = StrToInteger(ObjectDescription(nm));
      ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
      ObjectSetText(nm,DoubleToStr(vl,0),7,"Arial",White);
      ObjectSet(nm,OBJPROP_PRICE1,pr);
      ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*12);
      ObjectSet(nm,OBJPROP_COLOR,clr_l);
      if(ovl>0){if(ovl!=vl){ObjectSet(nm,OBJPROP_COLOR,LightPink);}}
        
      nm = gp+"lng_"+DoubleToStr(pr,Digits-1);
      ovl = StrToInteger(ObjectDescription(nm));
      ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
      ObjectSetText(nm,DoubleToStr(vs,0),7,"Arial",clr_s);
      ObjectSet(nm,OBJPROP_PRICE1,pr);
      ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*16);
      ObjectSet(nm,OBJPROP_COLOR,clr_s);
      if(ovl>0){if(ovl!=vs){ObjectSet(nm,OBJPROP_COLOR,LightSkyBlue);}}
         
   }else{
      if(vl-vs>0){// Short Side
         nm = gp+"srt_"+DoubleToStr(pr,Digits-1);
         ovl = StrToInteger(ObjectDescription(nm));
         ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
         ObjectSetText(nm,DoubleToStr(vl-vs,0),7,"Arial",White);
         ObjectSet(nm,OBJPROP_PRICE1,pr);
         ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*12);
         ObjectSet(nm,OBJPROP_COLOR,clr_l);
         if(ovl>0){
            if(ovl<(vl-vs)){
               ObjectSetText(nm,DoubleToStr(vl-vs,0),7,"Arial",Pink);
            }else if(ovl>(vl-vs)){
               ObjectSetText(nm,DoubleToStr(vl-vs,0),6,"Arial",Red);
            }
         }
         nm = gp+"lng_"+DoubleToStr(pr,Digits-1);
         ObjectDelete(nm);
      }
      if(vs-vl>0){// Long side
         nm = gp+"lng_"+DoubleToStr(pr,Digits-1);
         ovl = StrToInteger(ObjectDescription(nm));
         ObjectCreate(nm,OBJ_TEXT,0,0,0,0,0);
         ObjectSetText(nm,DoubleToStr(vs-vl,0),7,"Arial",Yellow);
         ObjectSet(nm,OBJPROP_PRICE1,pr);
         ObjectSet(nm,OBJPROP_TIME1,Time[0]+sft*16);
         ObjectSet(nm,OBJPROP_COLOR,clr_s);
         if(ovl>0){
            if(ovl<(vs-vl)){
               ObjectSetText(nm,DoubleToStr(vs-vl,0),7,"Arial",LightSkyBlue);
            }else if(ovl>(vs-vl)){
               ObjectSetText(nm,DoubleToStr(vs-vl,0),6,"Arial",Blue);
            }
         }
         nm = gp+"srt_"+DoubleToStr(pr,Digits-1);
         ObjectDelete(nm);
      }   
   }
   return;
}
//+------------------------------------------------------------------+
//|Description:Îïðåäåëÿåò íàëè÷èå èíñòðóìåíòîâ ôüþ÷åðñîâ â òåðìèíàëå |
//+------------------------------------------------------------------+
int CheckDataFiles(){int i,ii,sz,hd,tm,bars;string sy,prom,dtm,fn,sys[1000];bool real,demo,have,gvcr;
   sz = SymbolsList(sys,false);
   real = false;
   demo = false;
   have = false;
   gvcr = false;
   gDemo= true;
   sy   = Symbol();
   hd   = WindowHandle(Symbol(),Period());
   //----
   if(StringFind(sy,"df")==0){sy = StringSubstr(sy,1);}// ïðèâîäèì çàäåðæàííûé ñèìâîë ê ðåàëüíîìó 
   if(StringFind(sy,"f") < 0){sy = "f"+sy;}// åñëè ñèìâîë íå ôüþ÷åðñ, òî ïðèâîäèì ê ðåàëüíîìó
   //----Ïðîâåðÿåì ñïèñîê èíñòðóìåíòîâ (îáçîð ðûíêà) íà íàëè÷èå ôüþ÷åðñîâ
   for(i=0;i<sz;i++){
      if(StringFind(sys[i], "f")==0){real=true;gOwn=true;}// åñòü ðåàëüíûå ôüþ÷è
      if(StringFind(sys[i],"df")==0){demo=true;gOwn=true;}// åñòü çàäåðæàííûå ôüþ÷è
   }
   if(!real && !demo){// íåò ôüþ÷åé â ñïèñêå èíñòðóìåíòîâ ñîâñåì
      if(StringFind(AccountCompany(),"Financial Arsenal")>=0){
         Print("Please check futures symbols in \"Market watch\", Not have any futures sumbols, system halted.");
         gOwn = true;
         return(0);
      }
      for(i=0;i<ArraySize(Symbols);i++){
         if(StringFind(Symbol(),Symbols[i])>=0){have = true; break;}
      }
      if(!have){return(0);}
      if(StringFind(AccountCompany(),"Financial Arsenal")<0){
         gOwn = false;
         Print("To view the futures volumes in real time please open a trading account Financial Arsenal Ltd.");
         Print("Now you avaible only rights to view the historical data from the downloaded files that you download.");
      }      
   }
   if(real||have){demo=false;gDemo=false;}
   //----Ïðîâåðÿåì ãëîáàëêó íà ïðåäìåò ïðåäâàðèòåëüíîé çàïèñè
   fn   = "PreSymbol"+hd;
   for(i=GlobalVariablesTotal()-1;i>=0;i--){
      prom = GlobalVariableName(i);
      tm   = GlobalVariableGet(prom);
      if(StringFind(prom,fn)>=0){
         //----Ïðèâîäèì ñèìâîë ê êîðíþ
         sy  = Symbol();
         ii  = StringFind(sy,"f");
         if(ii>=0){sy = StringSubstr(sy,ii+1);}
         ii  = StringFind(sy,"_L");
         if(ii> 0){sy = StringSubstr(sy,0,ii);}
         if(StringFind(prom,sy)>=0){// åñëè ñèìâîë òîò æå
            prom = StringSubstr(prom,StringLen(fn));// îáðåçàåì èìÿ
            prom = StringSubstr(prom,StringLen(sy));// îáðåçàåì èìÿ
            ii   = StrToInteger(prom);// êîëè÷åñòâî ôàéëîâ
            if(ii!=0){// åñëè âñå ïîðÿäîê ñ êîëè÷åñòâîì ôàéëîâ
               if(tm == iTime(Symbol(),PERIOD_W1,0)){// åñëè íå ñìåíèëàñü íåäåëÿ
                  return(ii);
               }
            }
         }
      }
   }
   // âî âñåõ îñòàëüíûõ ñëó÷àÿõ
   GlobalVariableDel(prom);// óäàëÿåì ñòàðóþ ãëîáàëêó
   gvcr = true;// äàåì óêàçàíèå ñîçäàòü íîâóþ
   //----
   for(i=0;i<100;i++){// ïîäòÿãèâàåì èñòîðèþ
      RefreshRates();
      iBars(Symbol(),Period());
      if(iBars(Symbol(),PERIOD_W1)>0){break;}
   }
   //----Ïðèâîäèì ñèìâîë ê êîðíþ
   sy  = Symbol();
   ii  = StringFind(sy,"f");
   if(ii>=0){sy = StringSubstr(sy,ii+1);}
   ii  = StringFind(sy,"_L");
   if(ii> 0){sy = StringSubstr(sy,0,ii);}
   //----
   ii=0;
   if(!demo){// åñëè ðåàë
      for(i=0;i<iBars(Symbol(),PERIOD_W1);i++){// ñêàíèì íà ñêîëüêî åñòü áàðîâ
         dtm = TimeToStr(iTime(Symbol(),PERIOD_W1,i),TIME_DATE);
         dtm = StringSetChar(dtm,4,95);
         dtm = StringSetChar(dtm,7,95);
         fn = dtm+"_f"+sy+".vol";
         hd = FileOpen(fn,FILE_BIN|FILE_READ);
         if(hd<1){
            if(!gOwn && i==0){continue;}
            break;
         }
         FileClose(hd);
         ii++;
      }
   }else{// åñëè äåìî ñ çàäåðæêîé
      for(i=0;i<iBars(Symbol(),PERIOD_W1);i++){// ñêàíèì íà ñêîëüêî åñòü áàðîâ
         dtm = TimeToStr(iTime(Symbol(),PERIOD_W1,i),TIME_DATE);
         dtm = StringSetChar(dtm,4,95);
         dtm = StringSetChar(dtm,7,95);
         fn = dtm+"_df"+sy+".vol";
         hd = FileOpen(fn,FILE_BIN|FILE_READ);
         if(hd<1){break;}
         FileClose(hd);
         ii++;
      }
   }
   if(gvcr){// åñëè íàäî  - ñîçäàåì íîâóþ ãëîáàëêó
      hd   = WindowHandle(Symbol(),Period());
      tm   = iTime(Symbol(),PERIOD_W1,0);
      fn   = "PreSymbol"+hd+sy+ii;
      GlobalVariableSet(fn,tm);
   }
   return(ii);
}
//+------------------------------------------------------------------+
//|                      Description : ×èòàåò ôàéë èñòîðèè ôüþ÷åðñîâ |
//+------------------------------------------------------------------+
int ReadDataFile(int fn_i){int i,ii,sz,hd;string sy,fn,txt="";
   string dtm = TimeToStr(iTime(Symbol(),PERIOD_W1,fn_i),TIME_DATE);
   dtm = StringSetChar(dtm,4,95);
   dtm = StringSetChar(dtm,7,95);
   sy  = Symbol();
   
   ii  = StringFind(sy,"f");
   if(ii>=0){sy = StringSubstr(sy,ii+1);}
   ii  = StringFind(sy,"_L");
   if(ii> 0){sy = StringSubstr(sy,0,ii);}
   //----
   bool have = false;
   for(i=0;i<ArraySize(Symbols);i++){
      if(StringFind(Symbol(),Symbols[i])>=0){
         have = true;
         sy = Symbols[i];
         break;
      }
   }
   if(!have){return(0);}
   //----
   fn = dtm+"_f"+sy+".vol";
   if(gDemo){fn = dtm+"_df"+sy+".vol";}
   hd = FileOpen(fn,FILE_BIN|FILE_READ);
   if(hd<1){Print("Data file is not found.");return(0);}
   sz = FileSize(hd);
   ArrayResize(buff,sz);
   ii = FileReadArray(hd,buff,0,sz);
   FileClose(hd);
   ArrayResize(buff,ii/4);
   return(ii/4);
}
//+------------------------------------------------------------------+
//|      Description : Âîçâðàùàåò íàáîð ñèâîëîâ èç îêíà "îáçîð ðûíêà"|
//|                                          Copyright © 2009, Ilnur |
//+------------------------------------------------------------------+
int SymbolsList(string &Symbols[], bool Selected)
{
   string SymbolsFileName;
   int Offset, SymbolsNumber;
   
   if(Selected) SymbolsFileName = "symbols.sel";
   else         SymbolsFileName = "symbols.raw";
   int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
   if(hFile < 0) return(-1);
   if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116;  }
   else         { SymbolsNumber = FileSize(hFile) / 1936;      Offset = 1924; } 
   ArrayResize(Symbols, SymbolsNumber);
   if(Selected) FileSeek(hFile, 4, SEEK_SET);   
   for(int i = 0; i < SymbolsNumber; i++){
      Symbols[i] = FileReadString(hFile, 12);
      FileSeek(hFile, Offset, SEEK_CUR);
   }
   FileClose(hFile);
   return(SymbolsNumber);
}
//+------------------------------------------------------------------+
//|                     Description : Èùåò àëèàñû ñèìâîëîâ ôüþ÷åðñîâ |
//+------------------------------------------------------------------+
bool IsSymbol(string &sy){int i;
   for(i=0;i<ArraySize(Symbols);i++){if(StringFind(Symbol(),Symbols[i])>=0){sy=Symbols[i];return(true);}}
   return(false);
}
//+------------------------------------------------------------------+
//|                           Description : Ñîçäàåò ñèñòåìíûé òàéìåð |
//|                                    Copyright © 2013,  Nav.Alexey | 
//|                                                alemail@yandex.ru |  
//+------------------------------------------------------------------+
int SetMyTimer(int Interval){int TimerId =WindowHandle(Symbol(),Period());    
  int hWnd= WindowHandle(Symbol(),Period());
  int MT4InternMsg= RegisterWindowMessageA("MetaTrader4_Internal_Message");
  int PostMsgAddr= GetProcAddress(GetModuleHandleA("user32.dll"),"PostMessageA");
  if (PostMsgAddr==0 || hWnd==0) return(0);
  // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010;    
  int value[]={ 0x55, 0x8B,0xEC, 0x6A,01, 0x6A,02, 0x68,0000, 0x68,0000, 0xB8,0000, 0xFF,0xD0, 0x5D, 0xC2,0x10 };
  int len[]=  { 1,    1,   1,    1,   1,  1,   1,  1,   4,    1,   4,    1,   4,    1,   1,    1,    1,   2 };
  value[8]=MT4InternMsg;  value[10]=hWnd;  value[12]=PostMsgAddr;
  static int TimerCode[7];  ArrayInitialize(TimerCode,0);
  int byte=0;  
  for (int i=0;  i<ArraySize(value);  i++)
    for (int j=0;  j<len[i];  j++, byte++)
      TimerCode[byte/4] |= value[i]>>(8*j)&0xFF<<(byte%4*8);

  return ( SetTimer(hWnd, TimerId, Interval, TimerCode) );
}
//+------------------------------------------------------------------+
//|                             Description : Óäàëÿåò ñèñòåìíûé òàéìåð |
//|                                    Copyright © 2013,  Nav.Alexey | 
//|                                                alemail@yandex.ru |  
//+------------------------------------------------------------------+
bool KillMyTimer(){return( KillTimer(WindowHandle(Symbol(),Period()), WindowHandle(Symbol(),Period())) );}
//+------------------------------------------------------------------+
//|                       Description : Ôëàã íîâîãî áàðà ìèíóòíîãî ÒÔ|
//+------------------------------------------------------------------+
bool NewM1Bar(){static int pretm;
   if(iTime(Symbol(),PERIOD_M1,0)!=pretm){
      pretm = iTime(Symbol(),PERIOD_M1,0);//Print("dfkgj");
      return(true);
   }
   /*if(Time[0]!=pretm){
      pretm = Time[0];
      Print("sdfgjksdflgj");
      return(true);
   }*/
   return(false);
}
//+------------------------------------------------------------------+
//|          Description: Âîçâðàùàåò øèðèíó ñâå÷è ïî ìàñøòàáó ÷àðòà  |
//+------------------------------------------------------------------+
#import "user32.dll"
  bool GetWindowRect(int h, int& pos[4]);
#import
//+------------------------------------------------------------------+
int GetChartScale(){
	int h = WindowHandle(Symbol(), Period());
	int rect[4];
	if(h==0) return(1);
	GetWindowRect(h, rect);
	int wW  = rect[2] - rect[0]; // øèðèíà îêíà
	int bpc = WindowBarsPerChart();
	if(bpc==0) return(1);
	int scale = MathFloor((wW-48)/bpc);
	switch(scale){
		case  1 :	return(0);
		case  2 :	return(1);
		case  4 :	return(2);
		case  8 :	return(3);
		case 16 :	return(6);
		case 32 :	return(12);
		default :   return(12);
	}
	return(1);
}
//+------------------------------------------------------------------+

Comments