Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 852

 
Как найти максимальное значение High[] среди нескольких баров?
 

Лучше всего воспользоваться новыми возможностями mql4 CopyHigh и математической функцией MathMax

Или iHighest

 

Доброе утро, подскажите где ошибка. 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////

  //////////////////////////////////Зона консолидации/////////////////////////////////////////////////

  ///////////////////////////////////////////////////////////////////////////////////////////////////

  if(Hour()>=10)

  {

   for(x9=2; x9<=5; x9++)

   {

    x10=Hour()-x9;//x10 -номер свечи от которой считаем восемь свечей назад

    if(x10>=0)

    {

     int Minn=iLowest(NULL, PERIOD_H1, MODE_LOW , x10+8, x10);

     int Maxx=iHighest(NULL, PERIOD_H1, MODE_HIGH, x10+8, x10);

     z11 =iHigh(NULL,PERIOD_H1,Maxx);

     z12 =iLow(NULL, PERIOD_H1,Minn);

     ZPB     =iTime(NULL,PERIOD_H1,x10+8);

     ZPB1     =iTime(NULL,PERIOD_H1,x10);

     if(z11-z12<=z10)

     {

      y4=ObjectCreate("Зона консолидации",OBJ_RECTANGLE,0,0,0,0,0);

      y4=ObjectSet("Зона консолидации",OBJPROP_WIDTH,2);

      y4=ObjectSet("Зона консолидации",OBJPROP_COLOR,Blue);

      y4=ObjectSet("Зона консолидации",OBJPROP_BACK,true);

      y4=ObjectMove("Зона консолидации",0,ZPB,z11);

      y4=ObjectMove("Зона консолидации",1,ZPB1,z12);

     }

    }

   }

  }

  ////////////////////////////////////////////////////////////////////////////////////////////////////

По задумке при каждой итерации код должен проверить ширину канала и если она меньше либо равна текущему значению (z11-z12<=z10), нужно нарисовать прямоугольник, но на выходе получается, что сначала проходят все итерации, а потом идёт проверка на соответствие.
 
AlexeyVik:

Лучше всего воспользоваться новыми возможностями mql4 CopyHigh и математической функцией MathMax

Или iHighest

Если CopyHigh, то тогда уж ArrayMaximum, ИМХО...
 

Подскажите пожалуйста, как справиться с ошибкой номер 1 (ERR_NO_RESULT Нет ошибки, но результат неизвестен) ?

На паре EURUSD при условии, что ордер в убытке более чем на 1$ (100 пунктов при лоте 0,01), эксперт пытается модифицировать ордер (поставить TakeProfit ордера на цену его открытия).

Выдает эту ошибку, что делать? 

 
evillive:
Если CopyHigh, то тогда уж ArrayMaximum, ИМХО...
Ага, я об этом и думал... Бывают и очепятки и недодумки. Месяца полтора назад был такой-же вопрос на пятом форуме. Так там я и говорил именно об ArrayMaximum, а вот тут чуток попутал...
 

Здравствуйте, работаю со скользящими средними(MA) в количестве 2000 шт.

Задача, подсчитать количества повторений цены МА на Close[1]. 

- Каким образом можно реализовать, данную задачу, при минимальных затрат ресурсов.

 
Top2n:

Здравствуйте, работаю со скользящими средними(MA) в количестве 2000 шт.

Задача, подсчитать количества повторений цены МА на Close[1]. 

- Каким образом можно реализовать, данную задачу, при минимальных затрат ресурсов.

 

Если не использовать период 1 по ценам закрытия, то количество повторений будет ноль. Но если считать попадание в какой-то диапазон, то задача может быть решаемой и более интересной. Как вариант находим максимальное и минимальное значение. Разность делим на диапазон. Потом по каждому мувингу определяем диапазон в который попадает (тут речь пойдет о массиве, который соответствует нашим диапазонам или интервалам). Индекс массива набравший максимальное количество попаданий является победителем. Может не совсем понятно выразился. Лучше задачу решать в отдельном топике. Вариантов решения может быть несколько. И в будущем может кому-то понадобиться. А здесь и концов потом не найдут
 

Здравствуйте, читаю учебник, добрался до GV переменных. Не могу понять принцип их работы. К примеру, в учебнике говорится, что GV переменные могут иметь только тип double. Ну ладно, double так double). Но потом при перечислении функций GlobalVariableSet(), GlobalVariableGet(), GlobalVariableDel() пишут, что одна из них  возвращает время, вторая bool и т.д. В голове произошла путаница, не могу вообще понять вообще как они устроены. К тому же начал изучать MQL4 недавно, в голове много новой информации. Если возможно, объясните на примере задачи, которая есть в учебнике(или на каком нибудь своем):

Задача 24. В терминале одновременно работают несколько экспертов. Сумма депозита составляет $10 000. Общая стоимость всех открытых ордеров не должна превышать 30% от суммы депозита. Каждому эксперту должно быть выделено равное количество денежных средств. Составить программу эксперта, содержащую расчёт суммы, выделенной для торговли. 

int    Experts;                                 // Колич. экспертов

double Depo=10000.0,                            // Заданный депозит

       Persent=30,                              // Заданный процент    

       Money;                                   // Искомые средства

string Quantity="GV_Quantity";                  // Имя GV-переменной

//--------------------------------------------------------------------

int init()                                      // Спец. функция init

  {

   Experts=GlobalVariableGet(Quantity);         // Получим тек. знач.

   Experts=Experts+1;                           // Колич. экспертов

   GlobalVariableSet(Quantity, Experts);        // Новое значение

   Money=Depo*Persent/100/Experts;                // Средства для эксп.

   Alert("Для эксперта в окне ", Symbol()," выделено ",Money);

   return;                                      // Выход из init()

  }

//--------------------------------------------------------------------

int start()                                     // Спец. функция start

  {

   int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.

   if (Experts!=New_Experts)                    // Если изменилось

     {

      Experts=New_Experts;                      // Теперь текущ. такое

      Money=Depo*Persent/100/Experts;             // Новое знач. средств

      Alert("Новое значение для эксперта ",Symbol(),": ",Money);

     }

   /*

   ...

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

   в котором используется значение переменной Money

   ...

   */

   return;                                      // Выход из start()

  }

//--------------------------------------------------------------------

int deinit()                                    // Спец. ф-ия deinit

  {

   if (Experts ==1)                             // Если эксперт один..

      GlobalVariableDel(Quantity);              //..удаляем GV-перемен

   else                                         // А иначе..

      GlobalVariableSet(Quantity, Experts-1);   //..уменьшаем на 1

   Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузке

   return;                                      // Выход из deinit()

  } 

  

 
Vinin:
Если не использовать период 1 по ценам закрытия, то количество повторений будет ноль. Но если считать попадание в какой-то диапазон, то задача может быть решаемой и более интересной. Как вариант находим максимальное и минимальное значение. Разность делим на диапазон. Потом по каждому мувингу определяем диапазон в который попадает (тут речь пойдет о массиве, который соответствует нашим диапазонам или интервалам). Индекс массива набравший максимальное количество попаданий является победителем. Может не совсем понятно выразился. Лучше задачу решать в отдельном топике. Вариантов решения может быть несколько. И в будущем может кому-то понадобиться. А здесь и концов потом не найдут

Надо подумать, Спасибо. 

отдельный топик - https://forum.mql4.com/ru/66882&nbsp;

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