После изменения советника стал торговать в одну сторону

[Удален]  

Здравствуйте, уважаемые!

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

int tradeDirection;


double iTmpUP, iTmpDN;

if(BrainTrend1StopLine==true)
{

iTmpUP = iCustom(NULL,0,"BrainTrend1StopLine",1,1);
iTmpDN = iCustom(NULL,0,"BrainTrend1StopLine",0,1);

if (iTmpUP>0) tradeDirection = 1;
if (iTmpDN>0) tradeDirection =-1;

}
else
tradeDirection=0;
return(tradeDirection);

после чего советник стал торговать только в одну сторону. Подскажите, в чем ошибка. В программировании полный профан, все по аналогии и некоторого опыта.

Заранее спасибо!

 

Во-первых, вы не передаете параметр, который принимает на вход это индикатор. Но это не является причиной.

А причина следующая:

Индикатор рисуется на графике только в местах, где это необходимо, а там, где он не должен отображаться в массив значений индикатора записывается значение EMPTY_VALUE, что в языке MQL4 равно 0x7FFFFFFF или  2147483647. По-этому оба условия всегда срабатывают, а т.к. проверка значения iTmpDN делается последней, то всегда присваиваеися tradeDirection =-1 (т.е. всегда вниз).

Так же в советнике, который вы используете есть такой параметр, как ReverseDirection, который, скорее всего, у вас имеет значение true и эксперт "переворачивает" показния индикаторов. Таким образом вы всегда получаете сигнал на покупку и ниодного сигнала на продажу.

Правильно проверять было бы приблизительно так:

if (iTmpUP != EMPTY_VALUE) tradeDirection = 1;
if (iTmpDN != EMPTY_VALUE) tradeDirection =-1;


С уважением.

[Удален]  
Lemyx:

Во-первых, вы не передаете параметр, который принимает на вход это индикатор. Но это не является причиной.

А причина следующая:

Индикатор рисуется на графике только в местах, где это необходимо, а там, где он не должен отображаться в массив значений индикатора записывается значение EMPTY_VALUE, что в языке MQL4 равно 0x7FFFFFFF или 2147483647. По-этому оба условия всегда срабатывают, а т.к. проверка значения iTmpDN делается последней, то всегда присваиваеися tradeDirection =-1 (т.е. всегда вниз).

Так же в советнике, который вы используете есть такой параметр, как ReverseDirection, который, скорее всего, у вас имеет значение true и эксперт "переворачивает" показния индикаторов. Таким образом вы всегда получаете сигнал на покупку и ниодного сигнала на продажу.

Правильно проверять было бы приблизительно так:

if (iTmpUP != EMPTY_VALUE) tradeDirection = 1;
if (iTmpDN != EMPTY_VALUE) tradeDirection =-1;

С уважением.

Спасибо за помощь, все работает.

Желаю удачи!