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

 

Здравствуйте.

Подскажите, какие изменения надо внести в код. Чтоб гистограмма отображала значения только по медвежьим барам.

Сам индикатор https://www.mql5.com/ru/code/8920

int start()
{
    if (OpenTime != iOpen(Symbol(), PERIOD_M1, 0))
    {
        OpenTime = iOpen(Symbol(), PERIOD_M1, 0);

        int n, MaxVolume;
        double max = iHigh(Symbol(), PERIOD_M1, iHighest(Symbol(), PERIOD_M1, MODE_HIGH, MinutesCount, 0));
        double min = iLow(Symbol(), PERIOD_M1, iLowest(Symbol(), PERIOD_M1, MODE_LOW, MinutesCount, 0));
        int items = MathRound((max-min) / PricePoint);

        if (max == 0)
        {
            Alert("There is no minutes data. Please download M1.");
            return (0);
        }

        ArrayResize(Hist, items);      
        ArrayInitialize(Hist, 0);
        for (int i = 1; i <= MinutesCount; i++)
        {
            n = MathRound((iClose(Symbol(), PERIOD_M1, i)-min) / PricePoint);
            Hist[n] += (iVolume(Symbol(), PERIOD_M1, i));    
        }

        MaxVolume = Hist[ArrayMaximum(Hist)];
        DeleteObjects();
        for (i = 0; i <= items; i++)
        {
            DrawLine(i, min + i*PricePoint, Hist[i], MaxVolume);
        }
    }
        return(0);
}
 

Доброго времени суток. Вопрос по файловому указателю... В книге по MQL4, к-я находится на MQL4.community в главе "Стандартные функции", в разделе "Файловые операции" приведен пример скрипта timetablenews.mq4, к-й предназначен для считывания данных из файла и отображения графических объектов в окне финансового инструмента:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Ниже, при анализе данного скрипта в Книге по MQL4 приведена следующая фраза: "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект. И лишь после этого сработает условие окончания цикла while и управление будет передано в блок 8-9"

Правильно ли я понимаю???... Файловый указатель находится НЕ МЕЖДУ СИМВОЛАМИ ТЕКСТА (напр.: тек|ст, где | — файловый указатель), а является указателем С ВЫДЕЛЕНИЕМ, напр.: текст, где к — символ "к", к-й выделен файловым указателем. Этим и объясняется необходимость наличия строк (см. стр.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

Действительно. На предпоследней итерации, после создания ПОСЛЕДНЕГО объекта

2007.05.11 18:30;JPY Промышленное производство

файловый указатель находится в позиции последнего объекта, т.е.:

2007.05.11 18:30;JPY Промышленное производство

(где о — символ "о", к-й выделен файловым указателем). Тогда при передаче упра­вления в заголовок оператора while, функция FileIsEnding(handle), очевидно вернет true, т.к. файловый указатель находится НЕ В КОНЦЕ файла, а на ПОСЛЕДНЕМ СИМВОЛЕ этого файла. Тогда при выполнении первых двух строк файловый указатель переместится на ПУСТОЕ место и при отсутствии строк

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

скрипт создаст графический (т.е. линию) с пустым описанием и координатой времени, к-я соответствует 0. Это и имеется в виду во фразе: "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект."

Вопрос: правильно ли я понимаю:

а) определение файлового указателя;

б) смысл фразы "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект. И лишь после этого сработает условие окончания цикла while и управление будет передано в блок 8-9"

P.S. Чтобы не захламлять форум, заранее благодарю за ответ

 
Люди!!!Дайте пожалуйста функцию открытия часового бара (надо определить Опен предыдущей свечи) а то if (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) почему то не работает ставлю m=1 n=1 ну очень прошу, кому не жалко...
 
stater:
Люди!!!Дайте пожалуйста функцию открытия часового бара (надо определить Опен предыдущей свечи) а то if (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) почему то не работает ставлю m=1 n=1 ну очень прошу, кому не жалко...
https://docs.mql4.com/ru/series
 
спасибо за отклик, только я не понял с помощью какой функции узнать что часовая свеча открылась....
 
stater:
спасибо за отклик, только я не понял с помощью какой функции узнать что часовая свеча открылась....

iTime
 
Советник все время выдает ошибку 0, подскажите - как проверить из-за чего он её выдает, как найти это место?
 
FAQ:

iTime
Благодарю за терпение!
 
Egori4:
Советник все время выдает ошибку 0, подскажите - как проверить из-за чего он её выдает, как найти это место?

Ошибка 0 это что ошибок нету.

Перестаньте делать Print (alert) =)

 

как сократить написание формулы, если одно уравнение повторяеться несколько раз?

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