#property indicator_chart_window //Назначаем окно для вывода графика (там, где бары)
#property indicator_buffers 5 //Выделяем для индикатора три буфера
#property indicator_color1 DodgerBlue //Назначаем цвет для отображения данных 1 буфера
#property indicator_color2 DodgerBlue //Назначаем цвет для отображения данных 2 буфера
#property indicator_color3 DodgerBlue //Назначаем цвет для отображения данных 3 буфера
#property indicator_color4 Red //Назначаем цвет для up стрелки
#property indicator_color5 Yellow //Назначаем цвет для Down стрелки
//---- input parameters //объявление вводимых внешних параметров
extern int Range=14; //по умолчанию вводимое значение равно 14
extern int Distance_to_the_arrow=10;//Расстояние до стрелки
extern int Size_arrow=3;//Размер стрелки
extern bool Alerts=true;//ВКЛ/Выкл Алерт.
extern bool Emails=true;//ВКЛ/Выкл Email.
extern int Shift=0;//Смещение сигнала
extern int Proboi_Punkts=5;
//---- buffers
double UpBuffer[]; //обявление переменной UpBuffer типа "массив с плавающей точкой"
double DnBuffer[]; //обявление переменной DnBuffer типа "массив с плавающей точкой"
double MdBuffer[]; //обявление переменной MdBuffer типа "массив с плавающей точкой"
double G_ibuf_92[];
double G_ibuf_96[];
int Barr;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() //инициализация переменных
{
if (Digits == 3 || Digits == 5)
{
Proboi_Punkts=Proboi_Punkts*10;
}
string short_name; //обявление переменной short_name типа "строковый"
//---- indicator line
SetIndexStyle(0,DRAW_LINE,1,2); //установка стиля для первого значения индикатора
SetIndexStyle(1,DRAW_LINE,1,2); //установка стиля для второго значения индикатора
SetIndexStyle(2,DRAW_LINE,2); //установка стиля для третьего значения индикатора
SetIndexBuffer(0,UpBuffer); //значение записываемое в 0 буфер равно переменной UpBuffer
SetIndexBuffer(1,DnBuffer); //значение записываемое в 1 буфер равно переменной DnBuffer
SetIndexBuffer(2,MdBuffer); //значение записываемое в 2 буфер равно переменной MdBuffer
SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, Size_arrow);
SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, Size_arrow);
SetIndexArrow(4, 233);
SetIndexArrow(3, 234);
SetIndexBuffer(4, G_ibuf_92);
SetIndexBuffer(3, G_ibuf_96);
//---- name for DataWindow and indicator subwindow label
short_name="PriceChannel("+Range+")"; //переменной short_name присваиваем строковое
//значение равное выражению
IndicatorShortName(short_name); //для отображения на графике присвоим индикатору краткое
//наименование
SetIndexLabel(0,"Up Channel"); //для отображения на графике присвоим метке отображающей
//значения 0 буфера имя Up Channel
SetIndexLabel(1,"Down Channel"); //для отображения на графике присвоим метке отображающей
//значения 1 буфера имя Down Channel
SetIndexLabel(2,"Middle Channel"); //для отображения на графике присвоим метке отображающей
//значения 2 буфера имя Middle Channel
//----
SetIndexDrawBegin(0,0); //установка начальной точки прорисовки для 0 буфера
SetIndexDrawBegin(1,0); //установка начальной точки прорисовки для 1 буфера
SetIndexDrawBegin(2,0); //установка начальной точки прорисовки для 2 буфера
//----
return(INIT_SUCCEEDED); //возврат из секции инициализации
}
//+------------------------------------------------------------------+
//| PriceChannel |
//+------------------------------------------------------------------+
int start() //начало программы (расчета)
{
int i; //объявление целочисленной переменной i,k,sch
//----
for(i=Bars-1;i>=0;i--)
{
UpBuffer[i]=High[Highest(NULL,0,MODE_UPPER,Range,i)];
DnBuffer[i]=Low[Lowest(NULL,0,MODE_LOWER,Range,i)];
MdBuffer[i]=(UpBuffer[i]+DnBuffer[i])/2;
if(Iminn(i+Shift)<DnBuffer[i+Shift] &&DnBuffer[i+Shift]-Iminn(i+Shift)>=Proboi_Punkts*Point )G_ibuf_92[i]=Iminn(i)-Distance_to_the_arrow*Point;
if(Imaxx(i+Shift)>UpBuffer[i+Shift] &&Imaxx(i+Shift)-UpBuffer[i+Shift]>=Proboi_Punkts*Point)G_ibuf_96[i]=Imaxx(i)+Distance_to_the_arrow*Point;
}
if(Iminn(Shift)<DnBuffer[Shift]&&DnBuffer[Shift]-Bid>=Proboi_Punkts*Point)
{
G_ibuf_92[0]=Iminn(0)-Distance_to_the_arrow*Point;
if(Barr!=Bars)
{
string Comm=Symbol()+";"+f0_0(Period())+";"+"UP ";
if(Alerts)Alert(Comm);
if(Emails)SendMail(Comm,Comm+Close[0]);
Barr=Bars;
}
}
if(Imaxx(Shift)>UpBuffer[Shift]&&Bid-UpBuffer[Shift]>=Proboi_Punkts*Point)
{
G_ibuf_96[0]=Imaxx(0)+Distance_to_the_arrow*Point;
if(Barr!=Bars)
{
Comm=Symbol()+";"+f0_0(Period())+";"+"Down ";
if(Alerts)Alert(Comm);
if(Emails)SendMail(Comm,Comm+Close[0]);
Barr=Bars;
}
}
return(0);
}
//+------------------------------------------------------------------+
string f0_0(int Ai_0) {
if (Ai_0 == 1) return ("M1");
if (Ai_0 == 5) return ("M5");
if (Ai_0 == 15) return ("M15");
if (Ai_0 == 30) return ("M30");
if (Ai_0 == 60) return ("H1");
if (Ai_0 == 240) return ("H4");
if (Ai_0 == 1440) return ("D1");
if (Ai_0 == 10080) return ("W1");
if (Ai_0 == 43200) return ("MN1");
return ("");
}
double Imaxx(int Per)
{double perr;
perr = NormalizeDouble (iHigh(Symbol(),0,Per),Digits);
return (perr);
}
//---Миниму--//
double Iminn(int Per)
{double perr;
perr = NormalizeDouble (iLow(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена открытия--//
double Cotkr(int Per)
{double perr;
perr = NormalizeDouble (iOpen(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена закрытия--//
double Czakr(int Per)
{double perr;
perr = NormalizeDouble (iClose(Symbol(),0,Per),Digits);
return (perr);
}
наращиваем объем по тренду
(Сумма тел положительных свечей)^(1/Н)
Всё определяет цена и надёжность соединения с интеренетом )))
work2it