[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 411

 
kolyango:

Как сделать чтобы:

если Условие1 выполнилось, то больше его не проверять при каждом тике, а при следующих тиках проверять Условие2 также и далее Условие3 также до тех пор пока мы все флаги не объявим ложными?

bool проверять_ус1=true;
bool проверять_ус2=true;
bool проверять_ус3=true;
void start(){
      if(проверять_ус1)
         if(Open[0]>Close[1]){//условие 1
            проверять_ус1=false; //заглушка
         }
      if(проверять_ус2)
         if(Open[0]<Close[2]){//условие 1
            проверять_ус2=false; //заглушка
         }
      if(проверять_ус3)
         if(Open[0]==Close[3]){//условие 1
            проверять_ус3=false; //заглушка
         }
      if(!проверять_ус1&&!проверять_ус2&&!проверять_ус3){
            проверять_ус1=true;
            проверять_ус2=true;
            проверять_ус3=true;      
      }
}

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

 
costy_:

он считывает данные уже закрепившегося бара (предыдущего) i+1 уберите. Но алгоритм создателя нарушится (ему виднее, я тоже работаю по опен и сформировавшимся данным +1)


Как создатель говорю, что i+1 только для подкачки данных с другого индикатора, далее идёт проверка условия пробоя, но весь дальнейший расчёт на i.

Дело в том, что индикатор вообще не обновляется автоматически, только с перезагрузкой (изменением ТФ, выводом свойств).

В чём причина не пойму.

Я пробовала использовать просто i, запихав расчёт данных из необходимого индикатора на предыдущем баре, в конец цикла, но не помогло.

 
costy_:

Все равно не понял

на картинке проще объяснять, наверно.


Да, спасибо! Там, где у вас выделенно синим там нужно найти свечу, которая закрылась выше хая на Д1.
 
costy_:

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


Опять же спасибо!
 
LOA:


Как создатель говорю, что i+1 только для подкачки данных с другого индикатора, далее идёт проверка условия пробоя, но весь дальнейший расчёт на i.

Дело в том, что индикатор вообще не обновляется автоматически, только с перезагрузкой (изменением ТФ, выводом свойств).

В чём причина не пойму.

Я пробовала использовать просто i, запихав расчёт данных из необходимого индикатора на предыдущем баре, в конец цикла, но не помогло.

у вас

           int proboy_5_UP = iCustom (NULL,0,"ME_Proboy_F5_For_EX",0,i+1);/*запрос значения индикатора 

я подозреваю что должно быть так

           double proboy_5_UP = iCustom (NULL,0,"ME_Proboy_F5_For_EX",0,i+1);/*запрос значения индикатора 
 
costy_:

у вас

я подозреваю что должно быть так


нет.... берём не значение цены, а показание индикатора (гистограмма), значение которого м.б. равно 1 или -1.
 
costy_:

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


Как переделать условия такого кода, не врублюсь?

static bool Val_max, Cl_dn, Val_min; //static or global
                                        |
//+------------------------------------------------------------------+
int start()
  {
   int j;
   double bid;                                         
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1=Open[1];
double Close_1=Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "Название Польз. Индикатора",0,0);   // Присваиваем пер. Val значение польз. индикатора
if (Условие1)
{
 Val_max=true;                  // 
 Alert("Значение инд. >= Value_max (исп. 1-е усл.)");
}
if (Условие2)
{
 Cl_dn=true;
 Alert("1 бар закрылся падением (исп. 2-е усл.)");
}
if (Условие3 && Cl_dn==true)
{
 Val_min=true;
 Alert("Значение инд. <= Value_min (исп. 3-е усл.)");
}
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }
   
   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 
LOA:

нет.... берём не значение цены, а показание индикатора (гистограмма), значение которого м.б. равно 1 или -1.

я же все равно не могу ответить, где вызываемые инд. что они возвращают int double, действительно могут быть >1 чтобы int присвоился >0 и наоборот (хоть *.ex4)?

ME_Proboy_F5_For_EX

ME_Order_ATR_For_EX

2011.12.07 18:10:42 Cannot open file \experts\indicators\ME_Proboy_F5_For_EX.ex4' on the AUDUSD,M30

заменил все на MACD все работает!

Файлы:
temp_1.mq4  14 kb
 
kolyango:


Как переделать условия такого кода, не врублюсь?

bool проверять_ус1=true;
bool проверять_ус2=true;
bool проверять_ус3=true;
void start(){
      if(проверять_ус1)
         if(Open[0]>Close[1]){//условие 1
            проверять_ус1=false; //заглушка
         }
      if(проверять_ус2)
         if(Open[0]<Close[2]){//условие 1
            проверять_ус2=false; //заглушка
         }
      if(проверять_ус3)
         if(Open[0]==Close[3]){//условие 1
            проверять_ус3=false; //заглушка
         }
      if(!проверять_ус1&&!проверять_ус2&&!проверять_ус3){
            проверять_ус1=true;
            проверять_ус2=true;
            проверять_ус3=true;      
      }
}

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

зачем вам флаги )) можно и без них

   if(Close[i+3]>Open[i+3]&&Close[i+2]>Open[i+3]&&Close[i+2]<Close[i+3]&&Close[i]>Close[i+3]) //открываем бай

 
costy_:

я же все равно не могу ответить, где вызываемые инд. что они возвращают int double, действительно могут быть >1 чтобы int присвоился >0 и наоборот (хоть *.ex4)?

ME_Proboy_F5_For_EX

ME_Order_ATR_For_EX

2011.12.07 18:10:42 Cannot open file \experts\indicators\ME_Proboy_F5_For_EX.ex4' on the AUDUSD,M30

заменил все на MACD все работает!


да, индикатор на истории работает с любым вызываемым индюком.Не работает в реале, проверяла на М1.

если я правильно Вас поняла, то попробую заменить в условиях >0, <0 на ==1 или ==-1.

Причина обращения: