Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 794

 
007yurik:

Друзья, помогите чайнику. Замысел следующий: При достижении переменной "Ind" заданного уровня переходим к ожиданию смены направления "Value" при этом во время ожидания "Ind" больше не сверяем.


   if(Ind[0]<=-0.7)
     {
      while(Value[3]>Value[2]<Value[1])
        {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0)
           {
            Recount=true;
            return;
           }
        }
      if(BuyPosOpen) BUY_Open=true;
     }


Как правильно сделать???

   if(Ind[0]<=-0.7)
     {

заменить на

   bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
     {
      pravda=true;
 
007yurik:

...


pivomoe:

...


Пожалуйста вставляйте код правильно: Правильно вставляем код на форуме

 
007yurik:

Друзья, помогите чайнику. Замысел следующий: При достижении переменной "Ind" заданного уровня переходим к ожиданию смены направления "Value" при этом во время ожидания "Ind" больше не сверяем.

Как правильно сделать???

Мне кажется здесь ошибка :

while(Value[3]>Value[2]<Value[1])

Должно быть:

while(Value[3]>Value[2] §§ Value[2]<Value[1])
 
Ivan Ivanov:

Мне кажется здесь ошибка :

Должно быть:

Это где-же на клавиатуре символ параграф? Я думал его совсем отключили...

while(Value[3]>Value[2] §§ Value[2]<Value[1])
 
Ivan Ivanov:

Мне кажется здесь ошибка :

Должно быть:

В целом дело не в этом, можно обойтись  и
while(Value[2]<Value[1])
 
pivomoe:

заменить на

Если я правильно сделал (что сомнительно) то зависает,видимо из цикла не выходит.
 bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
   pravda=true;
   
   {   
      
      while(Value[2]<Value[1])
         {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0) {Recount=true; return;}                 
          }
          
         if(BuyPosOpen) BUY_Open=true;     
                                                  
         if(SellPosClose) SELL_Close=true;
         UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
         }
 
007yurik:
Если я правильно сделал (что сомнительно) то зависает,видимо из цикла не выходит.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
Пробовал,тож самое.При выходе Ind за уровень-виснет.
 
1
007yurik:
Пробовал,тож самое.При выходе Ind за уровень-виснет.

1. Сделайте bool pravda глобалной. (https://www.mql5.com/ru/docs/basis/variables/global)

2. Замените while на if.

3. Когда if (из т.2) сработает, верните pravda=false.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
007yurik:

Друзья, помогите чайнику. Замысел следующий: При достижении переменной "Ind" заданного уровня переходим к ожиданию смены направления "Value" при этом во время ожидания "Ind" больше не сверяем.




Как правильно сделать???

А вы уверены что индикатор пересчитывается во время выполнения цикла while?
Причина обращения: