ÿþ
#property strict
#property version "1.0"
#property copyright "Roman."
#property link "qwer1234_4@bk.ru"
#property description "If you like the indicator, you can thank the author"
#property description "Webmoney: Z330494414179, R222585888867"
#property description " "
#property description "Thank you very much."
#property indicator_chart_window
extern color LowColorMon = C'0x25,0x00,0x00';
extern color HighColorMon = C'0x25,0x00,0x25';
extern color LowColorTu = clrBlack;
extern color HighColoTu = C'0x25,0x25,0x00';
extern color LowColorWe = C'0x00,0x25,0x00';
extern color HighColorWe = clrBlack;
extern color LowColorTh = clrBlack;
extern color HighColorth = C'0x00,0x25,0x25';
extern color LowColorFr = C'0x00,0x25,0x50';
extern color HighColorFr = C'0x50,0x25,0x00';
extern bool WeekRew = false;
struct Colors
{
uint UpBitmap[],DnBitmap[];
string Name[2];
uchar StartR, StartG, StartB, EndR, EndG, EndB;
};
Colors Storage[5];
int OnInit()
{
color IC[5][2];
IC[0][0] = LowColorMon;
IC[0][1] = HighColorMon;
IC[1][0] = LowColorTu;
IC[1][1] = HighColoTu;
IC[2][0] = LowColorWe;
IC[2][1] = HighColorWe;
IC[3][0] = LowColorTh;
IC[3][1] = HighColorth;
IC[4][0] = LowColorFr;
IC[4][1] = HighColorFr;
for(int i = 0; i < 5; i ++)
{
Storage[i].Name[0] = "::Up" + IntegerToString(i);
Storage[i].Name[1] = "::Dn" + IntegerToString(i);
Storage[i].StartR = (uchar)IC[i][0];
Storage[i].StartG = (uchar)(IC[i][0]>>8);
Storage[i].StartB = (uchar)(IC[i][0]>>16);
Storage[i].EndR = (uchar)IC[i][1];
Storage[i].EndG = (uchar)(IC[i][1]>>8);
Storage[i].EndB = (uchar)(IC[i][1]>>16);
}
return(INIT_SUCCEEDED);
}
void Draw()
{
int Y=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS),
X=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS),
F=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR),
Prev = 0, k = F, Cx, Cy, CxP, Cxp, sub;
while(k >= 0)
{
if(TimeDayOfWeek(Time[k])!=TimeDayOfWeek(Time[k+1]))
{
if(Prev!=0)
break;
Prev = k;
}
k--;
}
if(Prev==0||k<0)
return;
ChartTimePriceToXY(0,0,Time[k],Low[k],Cx,Cy);
ChartTimePriceToXY(0,0,Time[Prev],Low[Prev],CxP,Cy);
int New = Cx - CxP;
ChartTimePriceToXY(0,0,Time[F],Low[F],Cx,Cy);
ChartTimePriceToXY(0,0,Time[F+1],Low[F+1],Cxp,Cy);
int CpC = Cx - Cxp;
for(int i = 0; i < 5; i ++)
{
ArrayResize(Storage[i].UpBitmap,Y*New);
ArrayResize(Storage[i].DnBitmap,Y*New);
};
ObjectsDeleteAll(0,"map");
for(int i = 0; i * New + CxP < X + 2 * New; i ++)
{
datetime time;
double p;
if(!ChartXYToTimePrice(0,i * New + CxP - New,0,sub,time,p))
time=Time[F];
int DW = TimeDayOfWeek(time);
DW = DW < 2? 0:DW > 4? 4: DW - 1;
string D = "map" + IntegerToString(i) + "up";
ObjectCreate(0,D,OBJ_BITMAP_LABEL,0,0,0);
ObjectSetString(0,D,OBJPROP_BMPFILE,WeekRew?(i%2!=1?Storage[DW].Name[0]:Storage[DW].Name[1]):Storage[DW].Name[0]);
ObjectSetInteger(0,D,OBJPROP_XDISTANCE,i * New + CxP - New - CpC/2);
ObjectSetInteger(0,D,OBJPROP_YDISTANCE,0);
ObjectSetInteger(0,D,OBJPROP_BACK,true);
}
for(int j = 0; j < 5; j ++)
{
double dR = Storage[j].StartR!=Storage[j].EndR?(((double)(Storage[j].StartR-Storage[j].EndR)/(double)(Y))):0;
double dG = Storage[j].StartG!=Storage[j].EndG?(((double)(Storage[j].StartG-Storage[j].EndG)/(double)(Y))):0;
double dB = Storage[j].StartB!=Storage[j].EndB?(((double)(Storage[j].StartB-Storage[j].EndB)/(double)(Y))):0;
for(int i = 0; i < Y; i++)
{
uint a = 0xFF000000 +
((uint(Storage[j].EndR+(dR!=0?(double(i)*dR):0)))<<16)+
((uint(Storage[j].EndG+(dG!=0?(double(i)*dG):0)))<<8)+
(uint(Storage[j].EndB+(dB!=0?(double(i)*dB):0)));
ArrayFill(Storage[j].UpBitmap, New * i, New, a);
ArrayFill(Storage[j].DnBitmap, New * (Y-1-i), New, a);
}
ResourceFree(Storage[j].Name[0]);
ResourceCreate(Storage[j].Name[0],Storage[j].UpBitmap,New,Y,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);
ResourceFree(Storage[j].Name[1]);
ResourceCreate(Storage[j].Name[1],Storage[j].DnBitmap,New,Y,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);
}
ChartRedraw();
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_CHART_CHANGE)
Draw();
}
Comments