Self-learning the MQL5 language from scratch - page 10

 
SanAlex:

My advice is.

- There are ready-made functions, you just need to understand their application. Ask yourself what you need and look for ready-made functions for your solution.

Thank you, I will take it into consideration.

Regards, Vladimir.

 

I continue studying the MQL5 programming language. The new script is dedicated to creation of an assistant that I will need for deleting all graphical objects from the trading terminal. As I promised earlier, I tried to describe everything in this script for the 1st year pupils of the programming school.

Regards, Vladimir.

//+------------------------------------------------------------------+
//|                                                       Eraser.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
/* В связи с тем, что дальше будем активно работать над созданием различных объектов,
   нам потребуется помощник, который быстро очистит главное окно торгового терминала
   от созданных объектов. Сделаем этого помощника в виде скрипта и назовем его
   "Eraser" (в переводе с английского языка - ластик, резинка для стирания). Нам
   снова потребуется помощь Справочника MQL5. Ищем во вкладке "Содержание" раздел
   с названием "Графические объекты" и кликаем по нему мышкой. С правой стороны
   справочника появится большой перечень функций и описанием их действий. Нас
   интересует функция ObjectsDeleteAll, которая удаляет все объекты указанного типа
   с указанного графика (с указанного подокна графика). Жмем на неё и перед нами
   открывается окно с информацией о том, как нужно пользовться данной функцией.

//+------------------------------------------------------------------+
   ObjectsDeleteAll - удаляет все объекты в указанном графике, указанном подокне
   указанного графика, указанного типа. Существует два варианта функции:

int  ObjectsDeleteAll(
   long  chart_id,            // идентификатор графика
   int   sub_window=-1,       // индекс окна
   int   type=-1              // тип объекта для удаления
   );

Удаляет по префиксу имени в подокне графика все объекты указанного типа.

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   );

   Параметры:

   chart_id - идентификатор графика. Цифра "0" означает текущий график.
   prefix - префикс, по которому будут удалены все объекты, чьи имена начинаются с
   данного набора символов. Префикс можно указывать как 'name' или 'name*' – оба варианта
   работают одинаково. Если в качестве префикса указана пустая строка,
   то будут удалены объекты с любым именем.

   sub_window=-1 - номер подокна графика. Цифра "0" означает главное окно графика,
   "-1" означает все подокна графика, включая главное окно.

   type=-1 - тип объекта. Значение может быть одним из значений перечисления ENUM_OBJECT.
   "-1" означает все типы.
//+------------------------------------------------------------------+

   Решаем для себя, что будем удалять с торгового терминала все созданные нами объекты.
*/

// ПИШЕМ КОД СКРИПТА

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ObjectsDeleteAll(0,-1,-1);
  }
//+------------------------------------------------------------------+

/* Теперь расшифруем, что именно мы создали в программном коде скрипта.
1. Сначала написали ObjectsDeleteAll, потому что хотим удалить все графические объекты.
2. Далее в скобках мы написали "0", т.к. в параметрах требуется указать "chart_id", т.е.
   идентификатор графика. Цифра "0" означает, что хотим всё удалить с текущего графика.
3. Двигаемся дальше. Согласно описания мы должны были вставить "sub_window" - номер подокна графика. 
   Выбираем цифру "-1", т.к. мы хотим очистить все подокна графика, включая главное окно,
   и вставляем её в код.
4. И последнее, что мы вносим в код скрипта, так это "тип объекта", который хотим удалить.
   Раз мы решили удалять все созданные объекты, то поэтому также выбираем цифру "-1".
5. Компилируем и запускаем скрипт для очистки торгового терминала от всех графических объектов.
   Как компилировать и запускать скрипт мы уже узнали, когда создавали предыдущий скрипт New2.mq5.
*/
 

I continue studying the MQL5 programming language. The new script New3.mq5 sets the horizontal line at the price level I need. As promised earlier, I have tried to describe everything in this script for a first-grade student of the programming school.

Regards, Vladimir.

//+------------------------------------------------------------------+
//|                                                         New3.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
/* Ранее в скрипте New2.mq5 мы научились создавать горизонтальную линию на текущем графике 
   главного окна терминала MetaTrader 5 с привязкой к значению идентификатора SYMBOL_BIDHIGH
   (что переводится, как максимальный Bid за день). А если нам потребуется привязать горизонтальную линию 
   к конкретной ценовой координате, как быть в такой ситуации? Снова воспользуемся информацией
   имеющейся в Справочнике MQL5. 

//+------------------------------------------------------------------+
bool  ObjectCreate(
   long         chart_id,      // идентификатор графика
   string       name,          // имя объекта
   ENUM_OBJECT  type,          // тип объекта
   int          sub_window,    // индекс окна
   datetime     time1,         // время первой точки привязки
   double       price1,        // цена первой точки привязки
   ...
   datetime     timeN=0,       // время N-ой точки привязки
   double       priceN=0,      // цена N-ой точки привязки
   ...
   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
   );

Параметры:
   ...
   price1 - ценовая координата первой точки привязки. Это обязательный параметр, 
   т.к. фактически используется только координата по оси цены.
   ...
//+------------------------------------------------------------------+

   В прошлом пример скрипта New2.mq5 мы указали привязку первой точки к значению идентификатора SYMBOL_BIDHIGH.
   Теперь вместо него зададим конкретный уровень цены в привязке к ценовой координате, например, 1.17475.
*/

// ПИШЕМ КОД СКРИПТА

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ObjectCreate(0,"Моя_линия_1",OBJ_HLINE,0,0,1.17475,0,0);

  }
//+------------------------------------------------------------------+

/* Теперь расшифруем, что именно мы создали в программном коде скрипта. 
1. Сначала написали ObjectCreate, потому что хотим создать графический объект.
2. Далее в скобках мы написали "0", т.к. в параметрах требуется указать "chart_id", т.е.
   идентификатор графика. Цифра "0" означает, что хотим создать линию на текущем графике.
3. Затем мы указали уникальное имя объекта "name", а именно "Моя_линия_1".
4. После этого мы задали "type" (тип объекта), а именно OBJ_HLINE (объект горизонтальная линия). 
5. Потом согласно описания мы должны были вставить "sub_window" - номер подокна графика. 
   Цифра "0" означает, что мы размещаем эту линию в главном окне графика. Вставляем!
6. Следующий параметр - это "time1", т.е. временнАя координата первой привязки нашей линии.
   Так как мы не планировали привязываться к определенным координатам времени, поэтому тоже ставим "0".
7. Переходим к "price1", т.е. к ценовой координате первой точки привязки. Вот здесь вместо значения 
   SYMBOL_BIDHIGH (что переводится, как максимальный Bid за день) мы вставляем тот уровень цены, 
   который и планировали, т.е. 1.17540.
8. Для time2 (время 2-ой точки привязки) и price2 (цена 2-ой точки привязки) указываем значения, равные "0".
9. Компилируем и запускаем скрипт. Как компилировать и запускать скрипт мы уже узнали, когда создавали скрипт New2.mq5.
*/
 

I continue studying the MQL5 programming language. The new script New4.mq5 sets the vertical line at the date and time I need. As promised earlier, I have tried to describe everything in this script for a first-grade student of the programming school.

Regards, Vladimir.

//+------------------------------------------------------------------+
//|                                                         New4.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
/* Ранее в скрипте New3.mq5 мы научились создавать горизонтальную линию на текущем графике 
   главного окна терминала MetaTrader 5 с привязкой к нужной нам ценовой координате.
   Теперь попробуем создать вертикальную линию с привязкой к конкретной временной координате,
   для чего снова воспользуемся информацией имеющейся в Справочнике MQL5.

//+------------------------------------------------------------------+
bool  ObjectCreate(
   long         chart_id,      // идентификатор графика
   string       name,          // имя объекта
   ENUM_OBJECT  type,          // тип объекта
   int          sub_window,    // индекс окна
   datetime     time1,         // время первой точки привязки
   double       price1,        // цена первой точки привязки
   ...
   datetime     timeN=0,       // время N-ой точки привязки
   double       priceN=0,      // цена N-ой точки привязки
   ...
   datetime     time30=0,      // время 30-й точки привязки
   double       price30=0      // цена 30-точки привязки
   );

Параметры:
   ...
   time1 - ВременнАя координата первой привязки.
   ...
//+------------------------------------------------------------------+

   Сначала изменим "type" (тип объекта) на OBJ_VLINE (объект вертикальная линия). Кроме того,
   нам нужно будет задать временнУю координату первой привязки.
*/

// ПИШЕМ КОД СКРИПТА

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ObjectCreate(0,"Моя_линия_2",OBJ_VLINE,0,D'2020.10.02 06:00',0,0,0);

  }
//+------------------------------------------------------------------+

/* Теперь расшифруем, что именно мы создали в программном коде скрипта. 
1. Сначала написали ObjectCreate, потому что хотим создать графический объект.
2. Далее в скобках мы написали "0", т.к. в параметрах требуется указать "chart_id", т.е.
   идентификатор графика. Цифра "0" означает, что хотим создать линию на текущем графике.
3. Затем мы указали уникальное имя объекта "name", а именно "Моя_линия_2".
4. После этого мы задали "type" (тип объекта), а именно OBJ_VLINE (объект вертикальная линия). 
5. Потом согласно описания мы должны были вставить "sub_window" - номер подокна графика. 
   Цифра "0" означает, что мы размещаем эту линию в главном окне графика. Вставляем!
6. Следующий параметр - это "time1", т.е. временнАя координата первой привязки нашей линии.
   
   Сделаем небольшое отступление и разберемся, где нам взять эту временнУю координату. Открываем
   справочник и во вкладке "Поиск" пишем поисковое слово datatime. Почему именно datatime, да
   потому что перед "time1" указан его тип, а именно datatime. В открывшейся вкладке мы видим, 
   что временнАя координата записывается в формате D'1980.07.19 12:30:27', т.е. 19 июля 1980 года,
   12 часов, 30 минут, 27 секунд. Значит и нам следует задать временнУю координату первой привязки 
   нашей линии. В моем примере такой координатой будет D'2020.10.02 09:00'. Если кто-то захочет 
   применить данный скрипт, то обязательно измените временнУю координату на нужную дату и время.
   
7. Переходим к "price1", т.е. к ценовой координате первой точки привязки. Здесь мы указываем значение, 
   равное "0", т.к. в данном скрипте мы не планировали привязываться к ценовой координате.
8. Для time2 (время 2-ой точки привязки) и price2 (цена 2-ой точки привязки) также указываем значения, равные "0".
9. Компилируем и запускаем скрипт. Как компилировать и запускать скрипт мы уже узнали, когда создавали скрипт New2.mq5.
*/
 

Why write like that?

The handbook is said to be over 6,000 pages long, it will take a long time to learn :)))

Better start with operators, try writing simple examples.
 

Here's the initial setup for the script:

input int a=8;
input int b=3;
input int c=3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int d=a+b+c;
   Print(d);
  }

Then read the help with the operators and try to add them one by one to the script, and see what happens.

You may want to start with them first:

Conditional if-else statement

Cycle operator for

Do-while loop operator

Select switch statement

Be sure to write the code so you can memorize it and make sure you understand it correctly.

 
MrBrooklin:

I continue studying the MQL5 programming language. The new script New3.mq5 sets the horizontal line at the price level I need. As promised earlier, I have tried to describe everything in this script for a first-grade student of the programming school.

Regards, Vladimir.

Examples of drawing objects you can find in the source files of indicators, for example

Aliaksandr Hryshyn:

Why do you need to write so?

They say that there are more than 6000 pages in the reference book, it would take too long to learn :)))

Better start with operators, try writing simple examples.

Operators are more interesting )

 
Aliaksandr Hryshyn:

Here's the initial setup for the script:

Then read the help with the operators and try to add them one by one into the script, and see what happens.

You may want to start with them first:

Conditional if-else statement

Cycle operator for

Do-while loop operator


Select switch statement

Be sure to write code to memorize it and check understanding.

Thank you, Alexander! I have made a plan of self-study which I am sticking to now. In brief, the self-study plan is based on "from simple to complex" principle. With each new script tasks will become more complicated and interesting. Please note that my age doesn't allow me to quickly grasp everything on the fly, so I have to spell it out for myself several times.

Thank you very much for your feedback! I will take your advice to heart.

Sincerely, Vladimir.

 
VVT:

Examples of drawing objects you could find in the source files of the indicators for example

Operators are more interesting )

All is right, but just take a ready-made example or write your own code - that's two big differences. At least for me. Thank you very much for the tip!

Regards, Vladimir.

 
MrBrooklin:

Thank you, Alexander! I've made a self-study plan, which I now stick to. In short, self-study follows the principle "from simple to complex". With each new script tasks will become more complicated and interesting. Please note that my age doesn't allow me to quickly grasp everything on the fly, so I have to spell it out for myself several times.

Thank you very much for your feedback! I will take your advice to heart.

Regards, Vladimir.

You have a wrong education plan, you start from the wrong place.

Here you have studied the function:

ObjectCreate(0,"Моя_линия_2",OBJ_VLINE,0,D'2020.10.02 09:00',0,0,0);

This is not simple, relatively, and requires basic knowledge already.

To confirm this, try to answer the questions on this function, you probably won't be able to, which indicates the wrong direction of learning:

Why is "My_line_2" in quotes and OBJ_VLINE without?

   int          sub_window,    // индекс окна
   datetime     time1,         // время первой точки привязки
   double       price1,        // цена первой точки привязки

What does int, double mean here, and how are they different?

Why is sub_window written and not the other way around, what's the point?

You don't need to learn functions from the help, you need basic elements of the language, the basic principles of working with the trading environment, with files, miscellaneous data, and others, it depends on the task at hand.