//+------------------------------------------------------------------+
//| CME_FUTURES_VOLUME.mq4 |
//| Copyright © 20122013, Financial Arsenal LTD |
//| http://www.arsenal-forex.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 20122013, 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