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

 
WinProject:
Спасибо!) Из вашего ответа я делаю вывод, что на каждый вид объекта нужно делать отдельную функцию. Думал, что как-то можно сделать, что бы по отдельности запускать  функции по построению объектов, вложенных в цикл While главной функции по чтению файла. Может Switch?

Я наверное не достаточно вник в суть вопроса.

Первое построение всех графических объектов не вызывает никаких затруднений и вопросов. А вот вторую я видимо не так понял. Видимо вопрос был не в том, чтобы как-то организовать работу одной кнопкой по многим типам объектов, а одна кнопка на один тип объектов. В таком случае, я-бы сделал структуру с параметрами объектов и несколько массивов структур по одному массиву на каждый тип объектов. И соответственно привязал-бы эти массивы структур к кнопкам соответствующих типов.

Затем нажимая кнопку, происходит удаление соответствующего типа объектов. А при отжатии кнопки объекты восстанавливаются по имеющимся в массиве структур параметрам.

Так-что читать файл будет необходимость только один раз при загрузке.

 
Alexey Viktorov:

Я наверное не достаточно вник в суть вопроса.

Первое построение всех графических объектов не вызывает никаких затруднений и вопросов. А вот вторую я видимо не так понял. Видимо вопрос был не в том, чтобы как-то организовать работу одной кнопкой по многим типам объектов, а одна кнопка на один тип объектов. В таком случае, я-бы сделал структуру с параметрами объектов и несколько массивов структур по одному массиву на каждый тип объектов. И соответственно привязал-бы эти массивы структур к кнопкам соответствующих типов.

Затем нажимая кнопку, происходит удаление соответствующего типа объектов. А при отжатии кнопки объекты восстанавливаются по имеющимся в массиве структур параметрам.

Так-что читать файл будет необходимость только один раз при загрузке.

Спасибо большое за ответ, постараюсь сделать оба варианта, через флаги как подсказал STARIJ и Ваш вариант тоже интересно попробовать.  Постараюсь при этом задавать поменьше вопросов, это счастье, что на них отвечают!)
 
STARIJ:

Флаги - это переменные. Или bool:  false=опущен, true=поднят  или int - тогда в одном числе сразу много флагов: 0 - все опущены, 1=поднят первый, 2=поднят второй, 3=подняты первый и второй, 4=поднят третий, 5=поднят третий и первый, 6=поднят третий и второй, 7=подняты первый, второй, третий,  8=поднят четвертый.... Ну это в двоичном коде. А как узнать?

Спасибо, вроде нашел в сети неплохое объяснение, буду пробовать. Странно, что на этом сайте ни в документации, ни в учебнике ничего подобного нет, наверное подразумевается, что все кто сюда пришел уже имеют навыки программирования.
 
WinProject:
Спасибо большое за ответ, постараюсь сделать оба варианта, через флаги как подсказал STARIJ и Ваш вариант тоже интересно попробовать.  Постараюсь при этом задавать поменьше вопросов, это счастье, что на них отвечают!)

C флагами может и не плохо, но упускается главное в вопросе

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

WinProject, 2018.01.26 18:17

Добрый вечер! И снова я за помощью. У моего советника главная Функция в OnInit, которая читает файл, и тут же по разным условиям строит разные графические объекты. Еще на графике есть кнопки, при нажатии на которые работает функция по удалению этих объектов, например текстовых меток. Как сделать, что бы после того как нажатием кнопки удалил текстовые метки, при отжатии кнопки можно было запустить не всю Функцию целиком, которая полностью построит все объекты, а построить только текстовые метки. Единственное, что приходит в голову - это отдельно на  каждый вид объекта  создать аналог главной функции со всеми действиями, связанными с открытием и чтением файла, но хочется использовать какое-то умное решение, но не знаю какое и как, в главной функции или в функциях кнопок?

В этом случае проще вынести чтение файла в отдельную пользовательскую функцию и её вызывать несколько раз, чтобы не плодить один и тот-же код несколько раз. Но как ни старайся, а чтение файла при использовании флагов останется. И никакой разницы нет что проверять при создании удалённых объектов - их отсутствие или состояние флага по типу объекта. Ведь тип объектов определяется кнопкой привязанной к конкретному типу, это и есть флаг.
 

Подскажите, как на MQL5 получить значение текущего часа? 
Я создал объект структуры MqlDateTime, там hour ничего не дает

 
Roman Sharanov:

Подскажите, как на MQL5 получить значение текущего часа? 
Я создал объект структуры MqlDateTime, там hour ничего не дает

Структуру нужно заполнить датой-временем. 
 
Artyom Trishkin:
Структуру нужно заполнить датой-временем. 

использовать TimeCurrent()? только не пойму как

 
Roman Sharanov:

использовать TimeCurrent()? только не пойму как

TimeToStruct()
 
Artyom Trishkin:
TimeToStruct()

а, все понял, заработало, спасибо!

 

https://docs.mql4.com/ru/basis/types/casting

Предпоследний примерчик, цвет в представлении RGB в виде строки. "приведение двух структур путем копирования содержимого" не работает.

#property script_show_inputs
input color          testColor=clrBlue;// задайте цвет для тестирования
//--- структура для представления цвета в RGB
struct RGB
  {
   uchar             blue;          // синяя составляющая цвета
   uchar             green;         // зеленая составляющая цвета
   uchar             red;           // красная составляющая цвета
   uchar             empty;         // этот байт не используется
   string            toString();    // функция для получения в виде строки
  };
//--- функция для вывода цвета в виде строки
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }
//--- структура для хранения встроенного типа color 
struct builtColor
  {
   color             c;
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменная для хранения в RGB
   RGB colorRGB;
//--- переменная для хранения типа color
   builtColor test;
   test.c=testColor;
//--- приведение двух структур путем копирования содержимого
   colorRGB=test;
   Print("color ",test.c," = ",colorRGB.toString());
//---
  }

Компилятор выдаёт вот такую ошибку... ( '=' - illegal operation use test.mq4 34 12 )

Я чего то не правильно скопировал, а может в примерчике ошибка??? Подскажите пожалуйста.

Приведение типов - Типы данных - Основы языка - Справочник MQL4
Приведение типов - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL4 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
Причина обращения: