Обработать сетку фибоначчи

 
Подскажите, как можно реализовать в советнике обработку уровней Фибоначчи. Уровни Фибоначчи натягиваю на график руками. И только после этого советник должен определить уровни и дать сигнал. Либо же где можно читнуть про это? Спасибо!!
 
drziv:
Подскажите, как можно реализовать в советнике обработку уровней Фибоначчи. Уровни Фибоначчи натягиваю на график руками. И только после этого советник должен определить уровни и дать сигнал. Либо же где можно читнуть про это? Спасибо!!

Ищите на графике объект, в имени которого присутствует "Fibo" - МТ присваивает имена для сетки Fibo как Fibo ХХХХХ, где ХХХХХ - произвольное число

Когда объект будет найден, берите с него данные:

ObjectGet("Имя найденного объекта Fibo", OBJPROP_FIRSTLEVEL+n); 

где n - порядковый номер линии фибо от 0 до 31. Количество линий можно узнать через:

ObjectGet("Имя найденного объекта Fibo", OBJPROP_FIBOLEVELS); 

вернёт число от 1 до 32.

 
Спасибо! С этим все ясно. Вы очень помогли. Но вот беда: Я натянул сетку на график и увидел название сетки Fibo 33295. В советнике вбил название сетки и все нормально нашлось. Но со временем когда цена уйдет, нужно будет старую сетку фибо удалить, а новую натянуть и номер уже будет другой. Как можно будет либо номер оставить сетки либо же чтобы советник сам определял номера? Такое возможно? Спасибо!
 
Вроде допер. Можно с помощью ObjectsTotal(); Я правильно мыслю? Но вот если будет несколько объектов на графике, то уже наверно не выбрать нужный
 
Создавайте сетку при помощи скрипта, будет возможность формировать имя по своим правилам. Можно сделать весьма удобно https://www.mql5.com/ru/forum/146112.
 

Отличное решение. Спасибо. Но вот для собственной образованности интересуюсь ручным способом нанесения сетки и дальнейшей обработки её советником.

 
А вообще лучше в советнике вбейте формулами уровни фибоначи (потом на другие уровни легче перейти будет)
 

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

if (Ask < ObjectGet (name,OBJPROP_FIRSTLEVEL+4)

{

Alert ("сообщение");

}

как бы не двигал сетку выше уровня или ниже уровня цены Алерт не срабатывает. И это понятно, потому что цена - 1,3300 больше, чем уровень фибо 0,618 как бы я не передвигал сетку по графику. Нужно чтобы уровни фибо равнялись ценам на которых они расположены, что бы условие стало истинным. Можно ли такое организовать? Спасибо.

 
drziv:

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

if (Ask < ObjectGet (name,OBJPROP_FIRSTLEVEL+4)

{

Alert ("сообщение");

}

как бы не двигал сетку выше уровня или ниже уровня цены Алерт не срабатывает. И это понятно, потому что цена - 1,3300 больше, чем уровень фибо 0,618 как бы я не передвигал сетку по графику. Нужно чтобы уровни фибо равнялись ценам на которых они расположены, что бы условие стало истинным. Можно ли такое организовать? Спасибо.

Да тут у Вас вообще ошибка...Навскидку так лучше:

if (Ask < NormalizeDouble(ObjectGet (name,OBJPROP_FIRSTLEVEL))+4*Point) 
 
drziv:
Спасибо! С этим все ясно. Вы очень помогли. Но вот беда: Я натянул сетку на график и увидел название сетки Fibo 33295. В советнике вбил название сетки и все нормально нашлось. Но со временем когда цена уйдет, нужно будет старую сетку фибо удалить, а новую натянуть и номер уже будет другой. Как можно будет либо номер оставить сетки либо же чтобы советник сам определял номера? Такое возможно? Спасибо!

Для поиска части имени в имени объекта используйте StringSubstr(); Также сетки фибо можно идентифицировать по времени и значению их точек 0 и 100 на графике. Можно использовать только одну сетку фибо для советника: когда вы её натягиваете на график, в поле её имени введите своё, ну или удалите из её имени число, оставив только "Fibo".


По сути-то вариантов множество. И каждый в большей/меньшей степени подходит под конкретные требования ТС

 
artmedia70:

Для поиска части имени в имени объекта используйте StringSubstr();

Еще лучше StringFind()