0
Views
0
Downloads
0
Favorites
PriceGrid1_Plus
//+------------------------------------------------------------------+
//| PriceGrid1_Plus.mq5 |
//| Copyright © 2016, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2016, Nikolay Kositsin"
//---- ññûëêà íà ñàéò àâòîðà
#property link "farria@mail.redcom.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//----
#property description "Ñåòêà èç êðóãëûõ öåíîâûõ óðîâíåé"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà íå èñïîëüçóþòñÿ áóôåðû
#property indicator_buffers 0
//---- íå èñïîëüçóþòñÿ ãðàôè÷åñêèå ïîñòðîåíèÿ
#property indicator_plots 0
//+-----------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèÿ |
//+-----------------------------------+
enum Number
{
Number_0,
Number_1,
Number_2,
Number_3
};
//+-----------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèÿ |
//+-----------------------------------+
enum WIDTH
{
Width_1=1, //1
Width_2, //2
Width_3, //3
Width_4, //4
Width_5 //5
};
//+-----------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèÿ |
//+-----------------------------------+
enum STYLE
{
SOLID_,//Ñïëîøíàÿ ëèíèÿ
DASH_,//Øòðèõîâàÿ ëèíèÿ
DOT_,//Ïóíêòèðíàÿ ëèíèÿ
DASHDOT_,//Øòðèõ-ïóíêòèðíàÿ ëèíèÿ
DASHDOTDOT_ //Øòðèõ-ïóíêòèðíàÿ ëèíèÿ ñ äâîéíûìè òî÷êàìè
};
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input string SirName="PriceGrid1_Plus"; //Ïåðâàÿ ÷àñòü èìåíè ãðàôè÷åñêèõ îáúåêòîâ
input uint Digits_=2; //ðàçðÿä ñåòêè
input uint Total=200; //êîëè÷åñòâî áëîêîâ ñåòêè ñâåðõó èëè ñíèçó îò öåíû
//----
input color Color_A = clrSlateBlue; //öâåò óðîâíÿ 1
input bool ShowPriceLable_A = true; //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 1 íà öåíîâîì ãðàôèêå
input color Color_AL = clrBlueViolet; //öâåò öåíîâîé ìåòêè 1
input STYLE Style_A = DASHDOTDOT_; //ñòèëü ëèíèè óðîâíÿ 1
input WIDTH Width_A = Width_1; //òîëùèíà ëèíèè óðîâíÿ 1
//----
input color Color_B = clrDarkOrange; //öâåò óðîâíÿ 2
input bool ShowPriceLable_B = true; //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 2 íà öåíîâîì ãðàôèêå
input color Color_BL = clrGold; //öâåò öåíîâîé ìåòêè 2
input STYLE Style_B = DASH_; //ñòèëü ëèíèè óðîâíÿ 2
input WIDTH Width_B = Width_1; //òîëùèíà ëèíèè óðîâíÿ 2
//----
input color Color_C = clrMagenta; //öâåò óðîâíÿ 3
input bool ShowPriceLable_C = true; //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 3 íà öåíîâîì ãðàôèêå
input color Color_CL = clrMagenta; //öâåò öåíîâîé ìåòêè 3
input STYLE Style_C = SOLID_; //ñòèëü ëèíèè óðîâíÿ 3
input WIDTH Width_C = Width_1; //òîëùèíà ëèíèè óðîâíÿ 3
//----
input color Color_D = clrRed; //öâåò óðîâíÿ 4
input bool ShowPriceLable_D = true; //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 4 íà öåíîâîì ãðàôèêå
input color Color_DL = clrRed; //öâåò öåíîâîé ìåòêè 4
input STYLE Style_D = SOLID_; //ñòèëü ëèíèè óðîâíÿ 4
input WIDTH Width_D = Width_1; //òîëùèíà ëèíèè óðîâíÿ 4
//----
input color Color_E = clrLime; //öâåò óðîâíÿ 5
input bool ShowPriceLable_E = true; //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 5 íà öåíîâîì ãðàôèêå
input color Color_EL = clrLime; //öâåò öåíîâîé ìåòêè 5
input STYLE Style_E = SOLID_; //ñòèëü ëèíèè óðîâíÿ 5
input WIDTH Width_E = Width_1; //òîëùèíà ëèíèè óðîâíÿ 5
//----
input uint FontSize = 2; //ðàçìåð öåíîâûõ ìåòîê
input int Shift = 5; //Ñäâèã öåíîâûõ ìåòîê ïî ãîðèçîíòàëè â áàðàõ
input bool ShowLineInfo = true; //îòîáðàæåíèå çíà÷åíèÿ óðîâíÿ íà öåíîâîì ãðàôèêå
//+----------------------------------------------+
color clr,clrl;
STYLE Style;
WIDTH Width;
bool ShowPriceLable;
int middle,size,Normalize;
string ObjectNames[][2];
double PointPow10,PointPow100,PointPow1000,PointPow10000,PointPow100000,PriceGrid[],Price[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ
size=int(Total*2);
ArrayResize(ObjectNames,size);
ArrayResize(PriceGrid,size);
ArrayResize(Price,size);
//---- èíèöèàëèçàöèÿ èì¸í
for(int count=0; count<size; count++) ObjectNames[count][0]=SirName+" PriceLine "+string(count);
for(int count=0; count<size; count++) ObjectNames[count][1]=SirName+" PriceLable "+string(count);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ
PointPow10=_Point*MathPow(10,Digits_);
PointPow100=PointPow10*10;
PointPow1000=PointPow10*100;
PointPow10000=PointPow10*1000;
PointPow100000=PointPow10*10000;
middle=(size/2)-1;
Normalize=int(_Digits-Digits_);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ
for(int count=middle; count<size; count++) PriceGrid[count]=+NormalizeDouble(PointPow10*(count-middle),Normalize);
for(int count=middle-1; count>=0; count--) PriceGrid[count]=-NormalizeDouble(PointPow10*(middle-count),Normalize);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----
for(int count=0; count<size; count++) ObjectDelete(0,ObjectNames[count][0]);
for(int count=0; count<size; count++) ObjectDelete(0,ObjectNames[count][1]);
//----
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[]
)
{
//----
static double res_prev=0.0;
double res=NormalizeDouble(PointPow10*MathCeil(close[rates_total-1]/PointPow10),Normalize);
if(!(res-res_prev)) return(rates_total);
res_prev=res;
for(int count=0; count<size; count++) Price[count]=NormalizeDouble(res+PriceGrid[count],Normalize);
datetime time0=time[rates_total-1]+PeriodSeconds()*Shift;
datetime timeX=time[0];
for(int count=0; count<size; count++)
{
if(!NormalizeDouble(Price[count]-PointPow100000*MathCeil(Price[count]/PointPow100000),Normalize))
{
clr=Color_E;
clrl=Color_EL;
ShowPriceLable=ShowPriceLable_E;
Style=Style_E;
Width=Width_E;
}
else if(!NormalizeDouble(Price[count]-PointPow10000*MathCeil(Price[count]/PointPow10000),Normalize))
{
clr=Color_D;
clrl=Color_DL;
ShowPriceLable=ShowPriceLable_D;
Style=Style_D;
Width=Width_D;
}
else if(!NormalizeDouble(Price[count]-PointPow1000*MathCeil(Price[count]/PointPow1000),Normalize))
{
clr=Color_C;
clrl=Color_CL;
ShowPriceLable=ShowPriceLable_C;
Style=Style_C;
Width=Width_C;
}
else if(!NormalizeDouble(Price[count]-PointPow100*MathCeil(Price[count]/PointPow100),Normalize))
{
clr=Color_B;
clrl=Color_BL;
ShowPriceLable=ShowPriceLable_B;
Style=Style_B;
Width=Width_B;
}
else
{
clr=Color_A;
clrl=Color_AL;
ShowPriceLable=ShowPriceLable_A;
Style=Style_A;
Width=Width_A;
}
string info="";
if(ShowLineInfo) info=ObjectNames[count][0]+" "+DoubleToString(Price[count],Normalize);
SetTline(0,ObjectNames[count][0],0,timeX,Price[count],time0,Price[count],clr,Style,Width,info);
if(ShowPriceLable)
{
if(ShowLineInfo) info=ObjectNames[count][1]+" "+DoubleToString(Price[count],Normalize);
SetRightPrice(0,ObjectNames[count][1],0,time0,Price[count],clrl,FontSize,info);
}
}
//----
ChartRedraw(0);
return(rates_total);
}
//+------------------------------------------------------------------+
//| Ñîçäàíèå òðåíäîâîé ëèíèè |
//+------------------------------------------------------------------+
void CreateTline
(
long chart_id, // èäåíòèôèêàòîð ãðàôèêà
string name, // èìÿ îáúåêòà
int nwin, // èíäåêñ îêíà
datetime time1, // âðåìÿ 1 öåíîâîãî óðîâíÿ
double price1, // 1 öåíîâîé óðîâåíü
datetime time2, // âðåìÿ 2 öåíîâîãî óðîâíÿ
double price2, // 2 öåíîâîé óðîâåíü
color Color, // öâåò ëèíèè
int style, // ñòèëü ëèíèè
int width, // òîëùèíà ëèíèè
string text // òåêñò
)
//----
{
//----
ObjectCreate(chart_id,name,OBJ_TREND,nwin,time1,price1,time2,price2);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
//ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true);
ObjectSetInteger(chart_id,name,OBJPROP_RAY,true);
//ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,true);
//ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,true);
//----
}
//+------------------------------------------------------------------+
//| Ïåðåóñòàíîâêà òðåíäîâîé ëèíèè |
//+------------------------------------------------------------------+
void SetTline
(
long chart_id, // èäåíòèôèêàòîð ãðàôèêà
string name, // èìÿ îáúåêòà
int nwin, // èíäåêñ îêíà
datetime time1, // âðåìÿ 1 öåíîâîãî óðîâíÿ
double price1, // 1 öåíîâîé óðîâåíü
datetime time2, // âðåìÿ 2 öåíîâîãî óðîâíÿ
double price2, // 2 öåíîâîé óðîâåíü
color Color, // öâåò ëèíèè
int style, // ñòèëü ëèíèè
int width, // òîëùèíà ëèíèè
string text // òåêñò
)
//----
{
//----
if(ObjectFind(chart_id,name)==-1) CreateTline(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,text);
else
{
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectMove(chart_id,name,0,time1,price1);
ObjectMove(chart_id,name,1,time2,price2);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);
}
//----
}
//+------------------------------------------------------------------+
//| RightPrice creation |
//+------------------------------------------------------------------+
void CreateRightPrice(long chart_id,// chart ID
string name, // object name
int nwin, // window index
datetime time, // price level time
double price, // price level
color Color, // price color
int fontsize, // price size
string text // òåêñò
)
//----
{
//----
ObjectCreate(chart_id,name,OBJ_ARROW_RIGHT_PRICE,nwin,time,price);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,fontsize);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
//----
}
//+------------------------------------------------------------------+
//| RightPrice reinstallation |
//+------------------------------------------------------------------+
void SetRightPrice(long chart_id,// chart ID
string name, // object name
int nwin, // window index
datetime time, // price level time
double price, // price level
color Color, // price color
int fontsize, // price size
string text // òåêñò
)
//----
{
//----
if(ObjectFind(chart_id,name)==-1) CreateRightPrice(chart_id,name,nwin,time,price,Color,fontsize,text);
else
{
ObjectMove(chart_id,name,0,time,price);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
}
//----
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---