помогите разобраться с функцией....

 

в советнике есть такое условие ....

if(hcci[1]>-5 && hcci[2]>hcci[3] && hcci[1]>hcci[2] && hcci[0]<hcci[1] &&

Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) prodaza();

При этом в тестере советник показывает определенные результаты.

НО если это условие разбиваю на ДВЕ ЧАСТИ

if(hcci[1]>-5 && hcci[2]>hcci[3] && hcci[1]>hcci[2] && hcci[0]<hcci[1]) fs_cci = 1;
 if(Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) fs_ss = 1;
if(fs_ss == 1 && fs_cci == 1) prodaza();

то в тестере получаю совершенно ДРУГИЕ результаты при прочих равных условиях ?????

 

У вас в первом случае if (x1&&x2&&x3&&y1&&y2&&y3){} а во втором if((x1&&x2&&x3)&&(y1&&y2&&y3)){}

 
xrust >>:

У вас в первом случае if (x1&&x2&&x3&&y1&&y2&&y3){} а во втором if((x1&&x2&&x3)&&(y1&&y2&&y3)){}

Смотрел на эту загадку (не скажу от какого слова :-)).

&& - он до первого false.

Дык суть-то ИМХО в том, что false дожен по-любому всплыть, как ни крути.

 

Хотя... что это мы с вами словами разговариваем?

Топикстартер, а выдайте публике результаты прогона вот этого скрипта:

int start()
{
    int косяков = 0;
    for(int y = 0; y <= 255; y++)
    {
        string неДоверяю =
            "" + 
            y + " | " +
            (y&1 != 0) +
            (y&2 != 0) +
            (y&4 != 0) +
            (y&8 != 0) +
            (y&16 != 0) +
            (y&32 != 0);
        Alert(неДоверяю);
    
        bool r1 = false;
        if( 
            (y&1 != 0) &&
            (y&2 != 0) &&
            (y&4 != 0) &&
            (y&8 != 0) &&
            (y&16 != 0) &&
            (y&32 != 0)
            ) r1 = true;

        bool r2 = false;
        int d1 = 0;
        int d2 = 0;
        if( 
            (y&1 != 0) &&
            (y&2 != 0) &&
            (y&4 != 0)) d1 = 1;

        if(
            (y&8 != 0) &&
            (y&16 != 0) &&
            (y&32 != 0)) d2 = 1;

        if(d1 == 1 && d2 == 1)
        {
            r2 = true;
        }
    
        if(r1 != r2)
        {
            косяков++;
            Alert("Маймуно веришвили!!");
        }
    }
    
    Alert("Герр программист, испытание закончил! Косяков " + косяков + " !");
}
А какое у Вас рено?
 
renoshnik >>:

...

НО если это условие разбиваю на ДВЕ ЧАСТИ

if(hcci[1]>-5 && ...


Добавьте еще одну строку
fs_cci = 0; fs_ss = 0;

if(hcci[1]>-5 && ...

 
prorab >>:


Добавьте еще одну строку
fs_cci = 0; fs_ss = 0;

if(hcci[1]>-5 && ...



Такое конечно же пробовал.......   Вот почти весь блок советника..... Пытаюсь ОДНО "условие" разбить на несколько фильтров чтобы их подключать раздельно....  

extern string block_05 = " блок управления фильтрами";

extern string st1="::: Первое торговое условие :::";
extern int filter_cci = 1; // Использовать ли первое условие в торговле

extern string st2="::: Второе торговое условие :::";
extern int filter_ss = 1; // Использовать ли первое условие в торговле

//***************************************************************************************************  
//***************************************************************************************************

//------- Глобальные переменные советника -------------------------------------+
int fs_cci=0; int fs_ss=0; int fb_cci=0; int fb_ss=0;  

// ========================================================
// ============ ИЩЕМ ВОЗМОЖНОСТЬ ОТКРЫТЬ ОРДЕР ============
// ========================================================
void raschet() {
RefreshRates();

//***************************************************************************************************
//****** ЗОНА ФИЛЬТРОВ *** ЗОНА ФИЛЬТРОВ *** ЗОНА ФИЛЬТРОВ *** ЗОНА ФИЛЬТРОВ *** ЗОНА ФИЛЬТРОВ ******
//***************************************************************************************************
 
 // условие продажи 
if(hcci[1]>-5 && hcci[2]>hcci[3] && hcci[1]>hcci[2] && hcci[0]<hcci[1]) fs_cci = filter_cci;
if(Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) fs_ss = filter_ss;
 
if(fs_ss == 1 && fs_cci == 1) prodaza();

 // условие покупки 
if(lcci[1]<5 && lcci[2]<lcci[3] && lcci[1]<lcci[2] && lcci[0]>lcci[1]) fb_cci = filter_cci;
if(Open[2]>Close[2] && Open[1]>Close[1] && Open[0]<Close[0] && Open[1]<Close[0]) fb_ss = filter_ss;
 
if(fb_ss == 1 && fb_cci == 1) pokypka();
 
//***************************************************************************************************
 // условие продажи 
//if(hcci[1]>-5 && hcci[2]>hcci[3] && hcci[1]>hcci[2] && hcci[0]<hcci[1] &&
//Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) prodaza();
// условие покупки 
//if(lcci[1]<5 && lcci[2]<lcci[3] && lcci[1]<lcci[2] && lcci[0]>lcci[1] &&
//Open[2]>Close[2] && Open[1]>Close[1] && Open[0]<Close[0] && Open[1]<Close[0]) pokypka();
//*************************************************************************************************** 
return(0);
}


2jartmailru______ R25

 

renoshnik писал(а) >>

Такое конечно же пробовал.......   Вот почти весь блок советника..... Пытаюсь ОДНО "условие" разбить на несколько фильтров чтобы их подключать раздельно

....  

//------- Глобальные переменные советника -------------------------------------+
int fs_cci=0; int fs_ss=0; int fb_cci=0; int fb_ss=0;

Я думал вы меня поймете.
Результат вычисления условия может быть не только "True", как вы расчитывали,
поэтому правильно будет так:

// условие покупки
if(hcci[1]>-5 && hcci[2]>hcci[3] && hcci[1]>hcci[2] && hcci[0]<hcci[1]) fs_cci = filter_cci;
else fs_cci = 0;
 ... и т.д. аналогично для остальных условий.

Я просто показал вам упрощенную запись, обнуляем перед расчетом условия, чтобы не писать "else ..."

// условие покупки
fs_cci = 0; fs_ss = 0;
if(hcci[1]>-5 && ...

Удачи!