CME_FUTURES_VOLUME

Author: Copyright � 2012�2013, Financial Arsenal LTD
Price Data Components
Series array that contains open prices of each barSeries array that contains tick volumes of each bar Series array that contains close prices for each barSeries array that contains open time of each bar
Miscellaneous
Implements a curve of type %1Uses files from the file systemIt reads information from a fileIt reads information from a file
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