someBody wrote:Не могу понять в чем причина странной прорисовки гистограммы - иногда при переключении инструмента пропадает пару столбиков, но если переключить на другой инструмент и опять на проблемный то все на месте.
someBody wrote:но наткнулся на проблеммы при переключении на меньшие ТФ и не нашел хорошего способа обойти ее (мне ведь нужно отсчитать количество баров за каждый день, и нарисовать гистограмму одной величины на протяжении дня, и так далее).
void drawRectangle(string name, datetime time1, double price1, datetime time2, int counter)
{
int startpos = iBarShift(NULL,0,time1);
int stoppos = iBarShift(NULL,0,time2);
while(startpos >=stoppos){
buf1[startpos] = volarr[counter]*100/volmax;
startpos--;
}
//+------------------------------------------------------------------+
//| eVOLution-dvoid.mq4 |
//| 2012, someBody |
//| http://trading-evolution.com/ |
//+------------------------------------------------------------------+
#property copyright " 2012, someBody"
#property link "http://trading-evolution.com/"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 105
#property indicator_color1 Silver
extern int depth = 20;
extern string FileNamePruductCode = "";
//extern int barsToProcess=100;
extern color barColor = PowderBlue, oiColor=Purple;
extern bool showOI = true;
extern bool showHeader = true;
extern color HeaderColor=DarkGreen;
extern int FontSize = 8;
extern int textXshift = 10;
extern int textYshift = 13;
string folder = "/evolution-dvoid/",objpref="evo-dvoid_";
int control, vol0, oi0, vol1, oi1;
string currency,currency1, date0, date1,headertext1,headertext2;
bool cur=TRUE,cross=FALSE;
int a,b,objwidth=4;
double tempvol,tempoi,volmax,oimax,oimin,oirange;
string ddate;
double volarr[], oiarr[];
bool initFinished=false;
color back_ground;
int windowIndex;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
initFinished=false;
//----
return(0);
}
void drawRectangle(string name, datetime time1, double price1, datetime time2, int counter)
{
string oiname;
windowIndex=WindowFind("trading-evolution.com : eVOLution-dvoid");
oiname=objpref+"_oi_"+name;
name=objpref+"_vol_"+name;
if (Period()<1440)
ObjectCreate(name, OBJ_RECTANGLE, windowIndex, time1, price1, time2, volarr[counter]*100/volmax);
else
ObjectCreate(name, OBJ_TREND, windowIndex, time1, price1, time1, volarr[counter]*100/volmax);
ObjectSet(name, OBJPROP_COLOR, barColor);
ObjectSet(name, OBJPROP_BACK, true);
ObjectSet(name, OBJPROP_RAY, false);
ObjectSet(name, OBJPROP_WIDTH,objwidth);
ObjectSetText(name, "Volume="+DoubleToStr(volarr[counter],0));
if (showOI)
{
if (oiarr[counter+1]>1 && oirange>0)
// ObjectCreate(oiname,OBJ_TREND,windowIndex,time1-10,oiarr[counter+1]*100/oimax,time2,oiarr[counter]*100/oimax);
ObjectCreate(oiname,OBJ_TREND,windowIndex,time1-10,(oiarr[counter+1]-oimin)*100/oirange,time2,(oiarr[counter]-oimin)*100/oirange);
ObjectSet(oiname, OBJPROP_COLOR, oiColor);
ObjectSet(oiname, OBJPROP_BACK, true);
ObjectSet(oiname, OBJPROP_RAY, false);
ObjectSet(oiname, OBJPROP_WIDTH,2);
ObjectSetText(oiname, "OI="+DoubleToStr(oiarr[counter],0));
}
}
int Explode(string str, string levelrun, string& arr[])
{
int i = 0;
int po = (StringFind(str, levelrun));
while(po != -1)
{
if(po == 0) arr[i] = "0"; else arr[i] = StringSubstr(str, 0, po);
i++;
str = StringSubstr(str, po+StringLen(levelrun));
po = StringFind(str, levelrun);
if(po == -1 || str == "0") break;
}
arr[i] = str;
return(i+1);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
deinition();
//----
return(0);
}
void deinition()
{
int total = ObjectsTotal();
int count = 0;
string prefixline = objpref;
for (int i = total - 1; i >= 0; i--)
{
string prefix1 = ObjectName(i);
if (StringFind(prefix1,prefixline) == 0)
{ObjectDelete(prefix1);count++;}
}
}
void drawonce()
{
int counted_bars=IndicatorCounted();
string voldiff,oidiff;
//----
if (!initFinished)
{
IndicatorShortName("trading-evolution.com : eVOLution-dvoid");
if(cur==FALSE){Alert("Currency is not supported");return(0);}
color tempColor;
int total = ObjectsTotal();
int count = 0;
//product list from database: -EC -J1 -AD -BP -C1 -RY -NE -E1 -YM -NQ -ES -ZW -ZS -ZC -CL -SI -GC
if (FileNamePruductCode =="") {
currency =StringSubstr( Symbol(),0,2);
currency1 = StringSubstr( Symbol(),0,6);
if(currency =="6E" || currency1 =="EURUSD")
{currency = "ec";}
else if(currency =="6B" || currency1=="GBPUSD")
{currency = "bp";}
else if(currency =="ES" || currency1 =="S&P_50")
{currency = "es";}
else if(currency == "NQ" || currency1 == "Nasdaq")
{currency ="nq";}
else if(currency == "YM" || currency1 == "DowJon")
{currency ="ym";}
else if(currency=="J1" || currency1=="USDJPY")
{currency ="j1";}
else if(currency == "AD" || currency1 == "AUDUSD")
{currency ="ad";}
else if(currency == "GC" || currency1 == "XAGUSD")
{currency ="gc";}
else if(currency == "SI" || currency1 == "XAUUSD")
{currency ="si";}
else if(currency == "CL" || currency1 == "_CL")
{currency ="cl";}
else if(currency == "6S" || currency1 =="USDCHF")
{currency ="e1";}
else if(currency == "6C" || currency1 =="USDCAD")
{currency ="c1";}
else if(currency == "6N" || currency1 =="NZDUSD")
{currency ="ne";}
else if(currency == "6R" || currency1 =="EURJPY")
{currency ="ry";}
else if(currency == "ZS" || currency1 =="_ZS")
{currency ="zs";}
else if(currency == "ZC" || currency1 =="_ZC")
{currency ="zc";}
else if(currency == "ZW" || currency1 =="_ZW")
{currency ="zw";}
else{cur=FALSE;return(0);}
}
else currency=FileNamePruductCode ;
string temp[10000],asd[4];
int FileHandler = FileOpen( folder+"dvoid-"+currency+".csv", FILE_BIN|FILE_READ);
if(FileHandler <0){
if (GetLastError() == 4103/* CANNOT_OPEN_FILE */) Alert("No such file ");
else Alert("Error opening file ");
return (0);}
a=FileReadArray(FileHandler, temp, 0,10000);
if (a<1) {Alert("Error opening file ");return(0);}
FileClose(FileHandler);
ArrayResize(temp,a);
ArrayResize(volarr,a);
ArrayResize(oiarr,a);
if(GlobalVariableGet(Symbol()+"_"+currency) != control){deinition();}
for(b=0;b<a;b++)
{
Explode(temp[b],",",asd);
volarr[b]=StrToInteger(asd[1]);
oiarr[b]=StrToInteger(asd[2]);
}
//getting maximum value from array
volmax=volarr[(ArrayMaximum(volarr,depth))];
oimax=oiarr[(ArrayMaximum(oiarr,depth))];
oimin=oiarr[(ArrayMinimum(oiarr,depth))];
oirange=oimax-oimin;
for(b=0;b<a;b++)
{
Explode(temp[b],",",asd);
ddate=StringSubstr(asd[0],0,4)+"."+StringSubstr(asd[0],4,2)+"."+StringSubstr(asd[0],6,2);
drawRectangle(ddate,StrToTime(ddate+" 00:00"),0,StrToTime(ddate+" 23:59"),b);
}
//----- getting last two days data to display header text
Explode(temp[0],",",asd);
date0=StrToInteger(asd[0]);
vol0=StrToInteger(asd[1]);
oi0=StrToInteger(asd[2]);
Explode(temp[1],",",asd);
date1=StrToInteger(asd[0]);
vol1=StrToInteger(asd[1]);
oi1=StrToInteger(asd[2]);
//---- displaying header here
if (showHeader)
{
if (vol0>vol1)
{
voldiff = "+"+(vol0-vol1);
} else voldiff = vol0-vol1;
if (oi0>oi1)
{
oidiff = "+"+(oi0-oi1);
} else oidiff = oi0-oi1;
headertext1=date0+" V="+vol0+" OI="+oi0+" : Vol-D= "+voldiff+" OI-D= "+oidiff;
headertext2=date1+" V="+vol1+" OI="+oi1;
windowIndex=WindowFind("trading-evolution.com : eVOLution-dvoid");
string headername0=objpref+"header0";
string headername1=objpref+"header1";
ObjectCreate(headername0, OBJ_LABEL, windowIndex, 0, 0, 0, 0);
ObjectSet(headername0, OBJPROP_XDISTANCE, textXshift);
ObjectSet(headername0, OBJPROP_YDISTANCE, textYshift);
ObjectSetText(headername0, headertext1, FontSize, "Arial", HeaderColor);
ObjectCreate(headername1, OBJ_LABEL, windowIndex, 0, 0, 0, 0);
ObjectSet(headername1, OBJPROP_XDISTANCE, textXshift);
ObjectSet(headername1, OBJPROP_YDISTANCE, FontSize*1.6+textYshift);
ObjectSetText(headername1, headertext2, FontSize, "Arial", HeaderColor);
}
//----
initFinished=true;
WindowRedraw();
}
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
drawonce();
WindowRedraw();
return(0);
}
//+----------
Herzog wrote:Я для себя изменил нормировку при отрисовке ОИ, чтобы изменения были лучше видны. Для этого же добавил параметр - глубина данных, по которым вычисляется нормировка. Этот параметр работает и для объёмов. Ну и цвета изменил, под белый фон. Картинку хотел вставить, но сюда залить кажется нельзя, а искать куда залить для ссылки времени нет. Поэтому просто исходник выкладываю, а если админ решит что это неинтересно то можно вообще пост потереть, ничего не имею против.
Zer0k wrote:Доброго времени суток)
Подскажите, есть ли возможность добавить в данный индикатор Индекс доллара? При торговле валютными фьючерсами он для меня просто не заменим. А где его смотреть не могу найти((
Return to Ресурсы на eVOLution
Users browsing this forum: No registered users and 12 guests