Полезные функции от KimIV - страница 99

 
TarasBY писал(а) >>
В функции TypeNearPos заметил косяк при выполнении условия:
цена рынка = цене открытия ордера, то этот ордер функцией уже не учитывается.
Пришлось добавить в код это простенькое условие.
Это условие поможет и в аналогичных функциях TypeNearPos() и PriceOpenNearPos().


Логичнее, в условии сравнивать с нулём не pp, a ti

if (ti==0 || pp>MathAbs(OrderOpenPrice()-mi)/p)
{
   pp=MathAbs(OrderOpenPrice()-mi)/p;
   ti=OrderTicket();
}
Если же оставить условие как есть, то из цикла лучше выходить не по return, а по break.
if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p)
{
   pp=MathAbs(OrderOpenPrice()-mi)/p;
   ti=OrderTicket();
   if (pp==0)
      break;
}
 
Здравствуйте, Игорь, Здравствуйте все.
Игорь, обращаюсь к вам как к прекрасному специалисту и знатоку своего дела.
Суть моей проблемы заключена в следующем:
В своей ТС я использую пять индикаторов, один из них - TRAP. Он очень хорошо удаляет все ненужные "шумы", да загвоздка в нём не менее "хороша". Имеет три буфера рисования: 0 для сигнальной линии, 1 и 2 для двухцветной диаграммы. Когда сигнальная линия TRAP опускается и имеет под собою диаграмму красного цвета - Селл. Когда сигнальная линия поднимается и диаграмма синяя - Бай.
Вручную всё замечательно, но при попытке получения его данных из советника начинаются пытки, продолжающиеся по сей день.
Конструкция...
   TRAPsig0=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,0,0);  // Сигнальная линия,       0 бар
   TRAPsig1=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,0,1);  // Сигнальная линия,       1 бар
   TRAPmnR0=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,1,0);  // Буфер цвета 1 (красн.), 0 бар
   TRAPmnR1=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,1,1);  // Буфер цвета 1 (красн.), 1 бар
   TRAPmnB0=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,2,0);  // Буфер цвета 2 (син.),   0 бар
   TRAPmnB1=iCustom(NULL,0,"TRAP",12,5,0,4,0.5,2,1);  // Буфер цвета 2 (син.),   1 бар
...данные считывает, но эти данные представляют собою совсем не ожидаемое мною. Пытался считывать данные из всех трёх буферов для баров 0 - 7 и выводить их на экран. Нулевой бар содержит 2147483647, первый бар цену, второй бар цену, третий цену, четвёртый опять 2147483647 и т.д. При этом все данные меняются не потиково, а когда как. Когда через достаточно длинный промежуток времени, когда быстро и меняют содержимое своё по странной, так и не разгаданной мною системе. Если сначала там цена, то потом уже может быть это загадочное число, а может быть уже другая цена или та же (хотя линия поднимается и цена должна увеличиваться) и т.д. ...
Короче, все мои попытки систематизации сиих показаний привели к тому, что мои мозги уже нужно отдавать на систематизацию санитарам.... :)
Я взываю о помощи... Игорь, может вы мне посоветуете как победить этого индикатора?
Или кто-нибудь из гуру, уже сталкивающихся с данной проблемой.
Помогите, пожалуйста, вся работа стоит...
Спасибо заранее!
Сам индикатор в прицепе:
Файлы:
trap.ex4  4 kb
 
не используйте нулевой бар.... Он только формируется, а значит, значение индикатора меняется с каждым тиком....
 

Кстати - где сам Игорь? Его не видно месяцев 4-5!

 
kharko >>:
не используйте нулевой бар.... Он только формируется, а значит, значение индикатора меняется с каждым тиком....

Да дело всё в том, что и первый и второй и третий и... испробовал все бары до седьмого на всех буферах. Сигналы не верные. Сигнал, показывающий цену, допустим 1.3478 при падении цены может удерживаться вплоть до следующего подъёма на уровне 1.3478, а потом резко стать 1.3486, либо вообще цена пропадает и появляется непонятное значение 2147483647, которое может кочевать из показаний всех трёх буферов от одного бара к другому... Причём, как Бог на душу положит... Порою оно присутствует в показаниях всех трёх буферов у разных баров и с изменением цены одного бара это показание перемещается на другой бар, либо буфер... Я не смог победить его логику...

 
artmedia70 >>:

вообще цена пропадает и появляется непонятное значение 2147483647...

2147483647 - это 0x7FFFFFFF.

Специальные константы, используемые для указания состояния параметров и переменных. Mогут быть следующими величинами:

EMPTY_VALUE 0x7FFFFFFF Значение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах
 
artmedia70 писал(а) >>

Да дело всё в том, что и первый и второй и третий и... испробовал все бары до седьмого на всех буферах. Сигналы не верные. Сигнал, показывающий цену, допустим 1.3478 при падении цены может удерживаться вплоть до следующего подъёма на уровне 1.3478, а потом резко стать 1.3486, либо вообще цена пропадает и появляется непонятное значение 2147483647, которое может кочевать из показаний всех трёх буферов от одного бара к другому... Причём, как Бог на душу положит... Порою оно присутствует в показаниях всех трёх буферов у разных баров и с изменением цены одного бара это показание перемещается на другой бар, либо буфер... Я не смог победить его логику...


откройте окно данных (Ctrl+D), поводите мышью по своему индикатору и посмотрите что он имеет в барах. На нулевом баре он не рассчитан, а про EMPTY_VALUE Вам уже написали.

 
PapaYozh >>:


откройте окно данных (Ctrl+D), поводите мышью по своему индикатору и посмотрите что он имеет в барах. На нулевом баре он не рассчитан, а про EMPTY_VALUE Вам уже написали.

Во блин! Век живи - век учись! А я цпецом делал неторгующего эксперта, который мне эти данные на график выводил... :))) Чайник, да ещё и кипящий конкретно... :)
Всё так просто оказалось... Спасибо огроменное!!!!

 
PapaYozh >>:


Логичнее, в условии сравнивать с нулём не pp, a ti

Если же оставить условие как есть, то из цикла лучше выходить не по return, а по break.

Объясните почему: "из цикла лучше выходить не по return, а по break." ???
По return я выхожу из функции, а по break только из цикла. В чём прикол???

 

Помогите, пожалуйста... Уже все перепробовала... Не могу....=( нужно найти пересечение индикаторов.. Все подсказки, которые мне давали - мне не помогли..=( может быть, Вы сможете помочь..

Файлы:
lastlast.mq4  13 kb
Причина обращения: