Помогите написать простенький индикатор

 

Сегодня начал изучай mql4.. и столкнулся с небольшой проблемой
Хотел написать индикатор который будет отмечать на графике точки где цены закрытия двух соседних свечей практически совпадают (то есть их разница будет стремиться к нулю).

И вот что у меня получилось:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Green
#property indicator_width1 2
#property indicator_style1 0

double Buffer1[];

int init()
{
SetIndexBuffer(0,Buffer1);
SetIndexStyle(0,DRAW_LINE);
return(0);
}
int start()
{
int j=0;
for(int i=0;i<Bars;i++)
{
if( (Close[i]-Close[i+1]) <= 3*Point )
{
Buffer1[i]=Close[i];
j++;
}
}
return(0);

}

Нашел какой то урок и немного переделал пример разобранный в нем.
Тут у меня рисуется линия соединяющая эти точки.
А хотелось бы чтобы это была не линия, а к примеру небольшие квадраты подложенные под график в этих точках.
Помогите исправить немного данный код, а то щас получается чтото не совсем то что надо..
ЗЫ: В переменной "Point" ведь хранится 1 пипс? Я с помощью нее хотел указать погрешность выборки точек в 3 пипса.

 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
#property indicator_width1 3


double B[];

int init()
{
SetIndexBuffer(0,B);
SetIndexStyle(0,3);
SetIndexArrow(0,169);
}
int start()
{
int counted_bars=IndicatorCounted();
int limit;if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;

  for(int i=0;i<limit;i++)
    if(MathAbs(Close[i]-Close[i+1])<=3*Point)
         B[i]=Close[i];
}
Файлы:
11_1.mq4  1 kb
 

чтото немного не то рисуется
точек уж слишком много и не там где надо
может погрешность надо поменьше поставить
вот на этом рисунке я указал поменьше, и то точек очень много

if((Close[i]-Close[i+1])<=1*Point)


 
я же тебе написал как правильно, нужно меньше точек ставь меньше разницу в пунктах. вот верный код
if(MathAbs(Close[i]-Close[i+1])<=1*Point)
 

а чему равен Point?

к примеру на EURUSD? там у меня на правой шкале числа вида 1,12345 (5 знаков после запятой)

а что будет если я его добавлю на USDJPY, там у меня 12,123 (2 знака до запятой и 3 после)

чему равен Point в этих двух случаях?

я думаю должно быть для:
EURUSD - 0,00001
USDJPY - 0,001

Или не так? Просто судя по графику выходит что не так..
Так как на картинке стоит щас "1*Point" и точек слиииишком много

 
p4sh0k:

а чему равен Point?

к примеру на EURUSD? там у меня на правой шкале числа вида 1,12345 (5 знаков после запятой)

а что будет если я его добавлю на USDJPY, там у меня 12,123 (2 знака до запятой и 3 после)

чему равен Point в этих двух случаях?

я думаю должно быть для:
EURUSD - 0,00001
USDJPY - 0,001

Или не так? Просто судя по графику выходит что не так..
Так как на картинке стоит щас "1*Point" и точек слиииишком много

правильно думаешь. Ты подправил код где я сказал? MathAbs поставил?
 

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

как будто Point у меня не 0,00001, а какой нибудь 0,01 (написал примерно, но понятно, что на много выше чем надо)

про MathAbs конечно спасибо.. чтото я про него забыл, когда писал в самом начале условие ))

 
p4sh0k:

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

как будто Point у меня не 0,00001, а какой нибудь 0,01 (написал примерно, но понятно, что на много выше чем надо)

про MathAbs конечно спасибо.. чтото я про него забыл, когда писал в самом начале условие ))

ладно, сделай скрин, крупным планом, где на графике ставится значек, а разница явно больше одного пункта
 
опс.. видимо была какая то аппаратная проблемка..
щас прямо физически удалил индикатор из папки метатрейдера
создал новый и забив в него свой код все заработало как надо

спасибо огромное за помощь


Если еще кому то будет интересно вот такой получился индикатор, отмечает на графике Ключевые цены, точки где цены закрытия равны (или почти равны в зависимости от параметра):

extern int PogrPips=3;
extern color Color=Lime;
extern int Width=5;

#property indicator_chart_window
#property indicator_buffers 1

double B[];

int init()
{
SetIndexBuffer(0,B);
SetIndexStyle(0,3,0,Width,Color);
SetIndexArrow(0,159);
}
int start()
{
int counted_bars=IndicatorCounted();
int limit;if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;

for(int i=0;i<limit;i++)
if(MathAbs(Close[i]-Close[i+1])<=PogrPips*Point)
B[i]=Close[i];
}



 
а вот кстати вопросик еще небольшой
когда индикатор добавлен и рисуется новая свеча (как раз на рисунке это видно)
точка появляется сразу же вместе со свечкой, понятно почему..

как можно исключить последнюю еще не построившуюся свечу?

 
p4sh0k:
а вот кстати вопросик еще небольшой
когда индикатор добавлен и рисуется новая свеча (как раз на рисунке это видно)
точка появляется сразу же вместе со свечкой, понятно почему..

как можно исключить последнюю еще не построившуюся свечу?


заменить

for(int i=0;i<limit;i++)

на

for(int i=1;i<limit;i++)
Причина обращения: