Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 527

 
novichok2018:  Спасибо! Про условности понял, учту. А вот чтобы разобраться в предложенном скрипте, увы, моих знаний мкл4 недостаточно. Простите :( .

Все эксперименты провожу с помощью скриптов. Запустите скрипт в своем терминале. Изменяйте какие-то строчки или выбрасывайте. Смотрите, что будет

 

Хочу найти Min Max данных индикатора, вроде делал "все как по учебнику", но такое ощущение что данные индикатора в массив не записываются.  Профи MQL подскажите где я ошибся. 

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Хочу найти Min Max данных индикатора, вроде делал "все как по учебнику", но такое ощущение что данные индикатора в массив не записываются.  Профи MQL подскажите где я ошибся. 

Значение переменной limit больше нуля. Поэтому ни один из циклов не выполнится. В итоге ArrayGreen и ArrayRad останутся незаполненными.

Если же установить значение limit равным нулю или меньше, то программа зациклится на первом цикле.

Таким образом, нужно переделать условие циклов. Скорее всего, нужно сделать так:

 for (int i = 0; i < limit; i++)
 
Corvin85:

Хочу найти Min Max данных индикатора, вроде делал "все как по учебнику", но такое ощущение что данные индикатора в массив не записываются.  Профи MQL подскажите где я ошибся. 

Еще, в  iCustom(...........); последний передаваемый параметр  i 

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

  как то так.

 
Спасибо! все заработало!
 

Добрый день!


Для удобства тестирования хочу вытащить кнопку включить и выключить условие, чтобы каждый раз не лезть в код и это условие не переделывать в текст, чтобы оно не действовало.

То есть сейчас включаю так:

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

Выключаю так:

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

Пытался вытащить включение и выключение в настройки input bool Y=True; (Где Y это условие), присвоить Y условию, и разделить ветки если условие выполняется или не выполняется через else if. Но что-то не вышло.

Подскажите, как правильно в таких случаях поступать?

 
YanSay:

Добрый день!


Для удобства тестирования хочу вытащить кнопку включить и выключить условие, чтобы каждый раз не лезть в код и это условие не переделывать в текст, чтобы оно не действовало.

То есть сейчас включаю так:

Выключаю так:

Пытался вытащить включение и выключение в настройки input bool Y=True; (Где Y это условие), присвоить Y условию, и разделить ветки если условие выполняется или не выполняется через else if. Но что-то не вышло.

Подскажите, как правильно в таких случаях поступать?

Можно так

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Можно так

В Вашем варианте получается, что при значении

input bool FLAG =False;

алгоритм дальше не идет, а надо, чтобы при False это условие игнорировалось и шло к следующим условиям.

В моем случае, единственный вариант это только прописывать 2 ветки?:

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

Или как-то проще можно?

 
YanSay:

В Вашем варианте получается, что при значении

алгоритм дальше не идет, а надо, чтобы при False это условие игнорировалось и шло к следующим условиям.

В моем случае, единственный вариант это только прописывать 2 ветки?:

Или как-то проще можно?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

В Вашем варианте получается, что при значении

алгоритм дальше не идет, а надо, чтобы при False это условие игнорировалось и шло к следующим условиям.

В моем случае, единственный вариант это только прописывать 2 ветки?:

Или как-то проще можно?

Только так

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))
Причина обращения: