Вопрос знатокам MQL - страница 3

 
Благодарю, granit77
 
granit77:

Да, как бы вот так, если считать, что имя индикатора hilo.mq4:

extern int iR=3;
extern int SignalBar=1;
//.......
//---получение значения  HighBuffer 
double buy =  iCustom( NULL,0, "hilo",
                      iR,
                      0, // № буффера
                      SignalBar ); // № бара    
 
//---получение значения  LowBuffer
double sell =  iCustom( NULL,0, "hilo",
                      iR,
                      1, // № буффера
                      SignalBar ); // № бара

Небольшая проблема. Советник по индикатору работает. Но.... Только с реализацией коротких сделок!

т.е. при номере буфера=1 и значениях на нулевом и первом барах

if  (   (sell_0>Bid)  &&   (sell_1<=Bid))

условие для продажи работает безупречно.

Но вот покупать эксперт не хочет! Не пойму, в чем дело! Вроде условие ставлю правильно. Номер буфера=0

(  (buy0>=Ask)  &&      (buy1<Ask)  )

Не покупает! Или покупает оч. редко и от "фонаря !

Хотя линии индикатора на графике визуального режима строятся вроде правильно!


В чем тут может быть проблема?

 
rid:
granit77:

Да, как бы вот так, если считать, что имя индикатора hilo.mq4:

extern int iR=3;
extern int SignalBar=1;
//.......
//---получение значения  HighBuffer 
double buy =  iCustom( NULL,0, "hilo",
                      iR,
                      0, // № буффера
                      SignalBar ); // № бара    
 
//---получение значения  LowBuffer
double sell =  iCustom( NULL,0, "hilo",
                      iR,
                      1, // № буффера
                      SignalBar ); // № бара

Небольшая проблема. Советник по индикатору работает. Но.... Только с реализацией коротких сделок!

т.е. при номере буфера=1 и значениях на нулевом и первом барах

if  (   (sell_0>Bid)  &&   (sell_1<=Bid))

условие для продажи работает безупречно.

Но вот покупать эксперт не хочет! Не пойму, в чем дело! Вроде условие ставлю правильно. Номер буфера=0

(  (buy0>=Ask)  &&      (buy1<Ask)  )

Не покупает! Или покупает оч. редко и от "фонаря !

Хотя линии индикатора на графике визуального режима строятся вроде правильно!


В чем тут может быть проблема?

Ни у каво нет идей? меня тоже интересует данный вопрос ))

 

Работая с кастомным индикатором заметил что:


// так РАБОТАЕТ !!!
int FATLsB=iCustom(NULL,0,"FATLs",0,0);
int FATLsS=iCustom(NULL,0,"FATLs",1,0);

// а вот так НЕТ ...
double FATLsB=iCustom(NULL,0,"FATLs",0,0);
double FATLsS=iCustom(NULL,0,"FATLs",1,0);


// если потом в коде есть сранвнение с 0 или 1, например
if (FATLsB==1) {CloseSell(); SetBuy(); }
 
kombat:

Работая с кастомным индикатором заметил что:


// так РАБОТАЕТ !!!
int FATLsB=iCustom(NULL,0,"FATLs",0,0);
int FATLsS=iCustom(NULL,0,"FATLs",1,0);

// а вот так НЕТ ...
double FATLsB=iCustom(NULL,0,"FATLs",0,0);
double FATLsS=iCustom(NULL,0,"FATLs",1,0);


// если потом в коде есть сранвнение с 0 или 1, например
if (FATLsB==1) {CloseSell(); SetBuy(); }

В первом случае перед операцией присваивания происходит приведение к целевому типу int. Поэтому условие сравнения работает корректно.

Для второго случая перед сравнением необходимо округлять числа с плавающей запятой до указанной точности с помощью функции

NormalizeDouble(double value, int digits)



 

Сорри...

Мой вышепривёденый пример основан на ошибке.

Которая заключалась в том, что присваивание было на возращаемой цене индикатором FATLs.

И на паре EURUSD этого не заметил, приняв "появление стрелок" за булл 0 и 1


Впрочем этот вариант исправил ситуацию:


bool FATLsB=iCustom(NULL,0,"FATLs",0,0)>0;
bool FATLsS=iCustom(NULL,0,"FATLs",1,0)>0;
//--- открытие БАЙ закрытие СЕЛЛ ------------------
   if (FATLsB==1 && TotalBuy()==0) {CloseSell(); SetBuy(); }
 

Добрый день всем!

Пож. подскажите.

Предположим, У меня на графике пересеклись медленная МА и быстрая МА. На первом баре.

Пусть потом прошло еще несколько баров.

Как мне определить - на каком баре в прошлом произошло последнее пересечение заданных МА?

-----------------------------

Никак не соображу даже - как мне подойти к решению проблемы?

 
Rita:

Предположим, У меня на графике пересеклись медленная МА и быстрая МА. На первом баре.

Пусть потом прошло еще несколько баров.

Как мне определить - на каком баре в прошлом произошло последнее пересечение заданных МА?

А в чем для Вас принципиальная разница? Пересечение на первом баре смотрится/ищется также как и на любом другом. Организовываете цикл (например от нулевого бара до Bars) в котором просматриваете значения значения машек и анализируете их. Не могу понять суть вопроса....
 

Мне нужно на текущем баре узнать.

Сколько баров прошло с момента последнего пересечения двух машек - МА_1 и МА_2.

Как организавать такой цикл?

if (МА_1>МА_2) {

 
Rita:

Мне нужно на текущем баре узнать.

Сколько баров прошло с момента последнего пересечения двух МА_1 МА_2.

Как организавать такой цикл?

идите от текущего бара до момента смены МА местами. и считайте.