从头开始自学MQL5语言 - 页 10

 
SanAlex:

我的建议是

- 有现成的功能,你只需要了解它们的应用。问问你自己需要什么,为你的解决方案寻找现成的功能。

谢谢你,我会考虑的。

问候,弗拉基米尔。

 

我继续学习MQL5编程语言。新的脚本是专门用来创建一个助手,我需要这个助手来删除交易终端的所有图形对象。正如我先前所承诺的,我试图在这个脚本中为编程学校一年级的学生描述一切。

问候,弗拉基米尔。

//+------------------------------------------------------------------+
//|                                                       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.
*/
 

我继续学习MQL5编程语言。新的脚本New3.mq5在我需要的价格水平上设置水平线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。

问候,弗拉基米尔。

//+------------------------------------------------------------------+
//|                                                         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.
*/
 

我继续学习MQL5编程语言。新的脚本New4.mq5在我需要的日期和时间上设置了竖线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。

问候,弗拉基米尔。

//+------------------------------------------------------------------+
//|                                                         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.
*/
 

为什么要这样写?

据说这本手册有6000多页,学习曲线会拖得很长:))))。

最好从操作者开始,试着写一些简单的例子。
 

下面是脚本的初始设置。

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

然后阅读操作符的帮助,并尝试将它们一个一个地添加到脚本中,看看会发生什么。

你可能想先从他们开始。

条件性的if-else 语句

自行车操作员

Do-while 循环操作

选择开关 语句

一定要写下代码,以便你能记住它,并确保你能正确理解它。

 
MrBrooklin:

我继续学习MQL5编程语言。新的脚本New3.mq5在我需要的价格水平上设置水平线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。

问候,弗拉基米尔。

你可以在指标的源文件中找到绘图对象的例子,例如

Aliaksandr Hryshyn:

你为什么要这么写呢?

他们说,参考书有6000多页,要想学好就需要太长的时间 :))

最好从操作者开始,试着写一些简单的例子。

操作员更有趣 )

 
Aliaksandr Hryshyn:

下面是脚本的初始设置。

然后阅读操作符的帮助,并尝试将它们一个一个地添加到脚本中,看看会发生什么。

你可能想先从他们开始。

条件性的if-else 语句

自行车操作员

Do-while 循环操作


选择开关 语句

一定要写代码来记忆并检查理解。

谢谢你,亚历山大!我已经制定了一个自学计划,我现在正在坚持。简而言之,自学计划是基于 "从简单到复杂 "的原则。每一个新的脚本任务将变得更加复杂和有趣。请注意,我的年龄不允许我迅速掌握所有的东西,所以我必须为自己拼写好几遍。

非常感谢您的反馈!我会把你的建议记在心里。

真诚的,弗拉基米尔。

 
VVT:

你可以在指标的源文件中找到绘图对象的例子,例如

操作员更有趣 )

你是对的,但采取一个现成的例子或自己写一个独立的代码是两个很大的区别。至少对我来说是这样。非常感谢您的提示!

问候,弗拉基米尔。

 
MrBrooklin:

谢谢你,亚历山大!我已经制定了一个自学计划,现在我坚持执行。简而言之,自学遵循 "从简单到复杂 "的原则。每一个新剧本的任务都会变得更加复杂和有趣。请注意,我的年龄不允许我迅速掌握所有的东西,所以我必须为自己拼写好几遍。

非常感谢您的反馈!我会把你的建议记在心里。

问候,弗拉基米尔。

你有一个错误的教育计划,你从错误的地方开始。

在这里,你已经研究了这个功能。

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

这并不简单,相对而言,需要已经有基本的知识。

为了证实这一点,请尝试回答这个函数上的问题,你可能无法回答,这表明学习的方向是错误的。

为什么 "My_line_2 "有引号而OBJ_VLINE 没有?

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

int,double 在这里是什么意思,它们有什么不同?

为什么要写sub_window,而不是反过来写,有什么意义?

你不需要从帮助中学习函数,你需要的是语言的基本要素,与交易环境、文件、各种数据和其他方面合作的基本原则,这取决于手头的任务。