Miscellaneous
2
Views
0
Downloads
0
Favorites
price_channel_central
//+------------------------------------------------------------------+
//| Price Channel Central.mq4 |
//| Yuriy Tokman (YTG) |
//| http://ytg.com.ua/ |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link "http://ytg.com.ua/"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Blue
#property indicator_width1 2
#property indicator_width2 2
//----
extern int Bars_Count=32;
//---- buffers
double B0[];
double B1[];
double B2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
int shift_begin=Bars_Count;
IndicatorShortName("Price Channel Central ("+DoubleToStr(Bars_Count,0)+")");
SetIndexBuffer(0,B0);
SetIndexBuffer(1,B1);
SetIndexBuffer(2,B2);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexDrawBegin(0,shift_begin);
SetIndexDrawBegin(1,shift_begin);
SetIndexDrawBegin(2,shift_begin);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ArrowRightPriceDelete(0,"RightPrice1");
ArrowRightPriceDelete(0,"RightPrice2");
ArrowRightPriceDelete(0,"RightPrice3");
ArrowRightPriceDelete(0,"Label");
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
int limit=rates_total-prev_calculated;
if(prev_calculated==0)limit--;
else limit++;
double hi=0,lo=0,ce=0;
for(int i=0; i<limit && !IsStopped(); i++)
{
hi = High[iHighest(Symbol(),0,MODE_HIGH,Bars_Count,i+1)];
lo = Low[iLowest(Symbol(),0,MODE_LOW,Bars_Count,i+1)];
ce = (hi+lo)/2;
B0[i]=hi;
B1[i]=lo;
B2[i]=ce;
}
color colir=clrBlue; string sig="NONE";
if(Bid>B2[0]){colir=clrGreen; sig = "BUY";}
if(Ask<B2[0]){colir=clrRed; sig = "SELL";}
//---
LabelCreate(sig+" SIGNALS",colir);
//---
ArrowRightPriceCreate(0,"RightPrice1",0,Time[0],B0[0],clrRed,STYLE_SOLID,2);
ArrowRightPriceCreate(0,"RightPrice2",0,Time[0],B1[0],clrGreen,STYLE_SOLID,2);
ArrowRightPriceCreate(0,"RightPrice3",0,Time[0],B2[0],clrBlue,STYLE_SOLID,2);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Ñîçäàåò ïðàâóþ öåíîâóþ ìåòêó |
//+------------------------------------------------------------------+
bool ArrowRightPriceCreate(long chart_ID=0, // ID ãðàôèêà
string name="RightPrice", // èìÿ öåíîâîé ìåòêè
int sub_window=0, // íîìåð ïîäîêíà
datetime time=0, // âðåìÿ òî÷êè ïðèâÿçêè
double price=0, // öåíà òî÷êè ïðèâÿçêè
color clr=clrRed, // öâåò öåíîâîé ìåòêè
ENUM_LINE_STYLE style=STYLE_SOLID, // ñòèëü îêàéìëÿþùåé ëèíèè
int width=1) // ðàçìåð öåíîâîé ìåòêè
{
ArrowRightPriceDelete(chart_ID,name);
//--- ñáðîñèì çíà÷åíèå îøèáêè
ResetLastError();
//--- ñîçäàäèì öåíîâóþ ìåòêó
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price))
{
Print(__FUNCTION__,
": íå óäàëîñü ñîçäàòü ïðàâóþ öåíîâóþ ìåòêó! Êîä îøèáêè = ",GetLastError());
return(false);
}
//--- óñòàíîâèì öâåò ìåòêè
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- óñòàíîâèì ñòèëü îêàéìëÿþùåé ëèíèè
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- óñòàíîâèì ðàçìåð ìåòêè
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- óñïåøíîå âûïîëíåíèå
return(true);
}
//+------------------------------------------------------------------+
//| Óäàëÿåò ïðàâóþ öåíîâóþ ìåòêó ñ ãðàôèêà |
//+------------------------------------------------------------------+
bool ArrowRightPriceDelete(long chart_ID=0, // ID ãðàôèêà
string name="RightPrice") // èìÿ ìåòêè
{
if(ObjectFind(chart_ID,name)<0)return(false);
//--- ñáðîñèì çíà÷åíèå îøèáêè
ResetLastError();
//--- óäàëèì ìåòêó
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": íå óäàëîñü óäàëèòü ïðàâóþ öåíîâóþ ìåòêó! Êîä îøèáêè = ",GetLastError());
return(false);
}
//--- óñïåøíîå âûïîëíåíèå
return(true);
}
//+------------------------------------------------------------------+
//| Ñîçäàåò òåêñòîâóþ ìåòêó |
//+------------------------------------------------------------------+
bool LabelCreate(string text="Label", // òåêñò
color clr=clrRed, // öâåò
long chart_ID=0, // ID ãðàôèêà
string name="Label", // èìÿ ìåòêè
int sub_window=0, // íîìåð ïîäîêíà
int x=10, // êîîðäèíàòà ïî îñè X
int y=10, // êîîðäèíàòà ïî îñè Y
ENUM_BASE_CORNER corner=CORNER_RIGHT_UPPER, // óãîë ãðàôèêà äëÿ ïðèâÿçêè
ENUM_ANCHOR_POINT anchor=ANCHOR_RIGHT_UPPER, // ñïîñîá ïðèâÿçêè
string font="Arial", // øðèôò
int font_size=10) // ðàçìåð øðèôòà
{
ArrowRightPriceDelete(chart_ID,name);
//--- ñáðîñèì çíà÷åíèå îøèáêè
ResetLastError();
//--- ñîçäàäèì òåêñòîâóþ ìåòêó
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": íå óäàëîñü ñîçäàòü òåêñòîâóþ ìåòêó! Êîä îøèáêè = ",GetLastError());
return(false);
}
//--- óñòàíîâèì êîîðäèíàòû ìåòêè
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- óñòàíîâèì óãîë ãðàôèêà, îòíîñèòåëüíî êîòîðîãî áóäóò îïðåäåëÿòüñÿ êîîðäèíàòû òî÷êè
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- óñòàíîâèì òåêñò
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- óñòàíîâèì øðèôò òåêñòà
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- óñòàíîâèì ðàçìåð øðèôòà
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- óñòàíîâèì ñïîñîá ïðèâÿçêè
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- óñòàíîâèì öâåò
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- óñïåøíîå âûïîëíåíèå
return(true);
}
//+------------------------------------------------------------------+
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
---