Примеры: Язык MQL4 для "чайников". Пользовательские индикаторы (часть 2) - страница 2

 

А где 4 часть я чтото пропустил.

 
sumkin:

А где 4 часть я чтото пропустил.

Четвертая статья:
http://articles.mql4.com/ru/articles/1500
 

Учусь по Вашему учебнику. 

Уважаемый автор, подскажите, что я не так сделал в коде? Почему выдает ошибку - '\end_of_program' - unbalanced left parenthesis C:\Program Files\X-Trader 4 UA\experts\indicators\d.mq4 (67, 1)

 

//+------------------------------------------------------------------+
//|                                                            d.mq4 |
//|                                            Copyright © 2008, Baz |
//|                                           e-mail: baz_fx@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Baz"
#property link      "e-mail: baz_fx@ukr.net"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Aqua
//---- input parameters
extern int       DIPeriod=13;
//---- buffers
double UPBuffer1[];
double DownBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  string short_name;
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,UPBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DownBuffer2);
 
//---- name for DataWindow and indicator subwindow label
   short_name="DI("+DIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,DIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    
   int    counted_bars=IndicatorCounted();
   int limit;
   //----
   limit=Bars-counted_bars;
  
   for(int i=0;i<limit;i++)
 
 
 double P;
 double ATR;
 
 ATR=iATR(NULL, 0, DIPeriod, i);
 P=(3+Close[i])/ATR;
 
 UPBuffer1[i]=((Volume[i]/(Volume[i]/P))/100000;
 
 DownBuffer2[i]=((Volume[i]/P)/Volume[i])/100000;
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Уважаемый Олег.

Как сделать чтобы индикатор над определенной свечей

оставлял определенную надпись.

Например: если на графике цен есть "молот", то сколько

их есть на графике, что-бы надпись была над каждым. 

//"молот" или "повешенный"
 //направление тренда не учтено
 
    double k = (High[1]-Low[1])/3;
     if((Open[1]>(Low[1]+2*k))&&(Close[1]>(Low[1]+2*k))
       {
        string name = "молот";
       }
 
2 baz:

У вас ошибка в этой строке:
UPBuffer1[i]=((Volume[i]/(Volume[i]/P))/100000;
правильно так:
UPBuffer1[i]=(Volume[i]/(Volume[i]/P))/100000

А еще не забудьте указать тело цикла, похоже, вы про него забыли:
   for(int i=0;i<limit;i++)
{

double P;
double ATR;

ATR=iATR(NULL, 0, DIPeriod, i);
P=(3+Close[i])/ATR;

UPBuffer1[i]=(Volume[i]/(Volume[i]/P))/100000;
DownBuffer2[i]=((Volume[i]/P)/Volume[i])/100000;

}
 
2 satop:
Вам нужно написать цикл, который будет "проходиться" по всем барам и проверять условия. В вашем случае условия для свечи-молота
и повешенной свечи. Если условие истинно, то вы создаете объект типа OBJ_TEXT, с соответствующей надписью. Этот тип объекта
использует 1 координату. Используйте отдельную переменную, чтобы подсчитать количество свечей каждого типа. Когда одно из условий
выполняется, просто увеличивайте соответствующую переменную на 1.
 
banderass:
2 satop:
Вам нужно написать цикл, который будет "проходиться" по всем барам и проверять условия. В вашем случае условия для свечи-молота
и повешенной свечи. Если условие истинно, то вы создаете объект типа OBJ_TEXT, с соответствующей надписью. Этот тип объекта
использует 1 координату. Используйте отдельную переменную, чтобы подсчитать количество свечей каждого типа. Когда одно из условий
выполняется, просто увеличивайте соответствующую переменную на 1.


Ув. Олег

Немогли бы вы показать какой-то пример

По вашим примерам все получаеться

А реализовать свое нехватает опыта

Спасибо зарание

 
Олег, а когда следующая статья выйдет???  Хотелось бы уже перейти к написанию советников....  ))))
 
satop писал(а):

Ув. Олег

Немогли бы вы показать какой-то пример


По вашим примерам все получаеться


А реализовать свое нехватает опыта


Спасибо зарание

Прошу меня простить, но у меня нет времени. Попробуйте перечитать статьи, там находится весь необходимый материал, чтобы решить вашу проблему. Почитайте также официальный учебник, если какие-то моменты остаются непонятными, в нем очень много полезного материала, начиная с самых основ. Попробуйте разбирать код индикаторов из Code Base, чтобы набраться опыта.

slayer:
Олег, а когда следующая статья выйдет???  Хотелось бы уже перейти к написанию советников....  ))))
У меня пока скупой опыт в написании советников, поэтому я еще не готов писать статьи про них. Наберусь опыта, а потом напишу. Не хочу, чтобы статья получилась "сырой". Советую вам почитать официальный учебник.
 

Очень полезная статья, спасибо.

По поводу примера с рисованием горизонтальных линий.

Если кинуть на график несколько индикаторов, то линия нарисуется только в первом.