//+------------------------------------------------------------------+//| 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 |//+------------------------------------------------------------------+voidOnStart()
{
//---ObjectsDeleteAll(0,-1,-1);
}
//+------------------------------------------------------------------+/* Теперь расшифруем, что именно мы создали в программном коде скрипта.
1. Сначала написали ObjectsDeleteAll, потому что хотим удалить все графические объекты.
2. Далее в скобках мы написали "0", т.к. в параметрах требуется указать "chart_id", т.е.
идентификатор графика. Цифра "0" означает, что хотим всё удалить с текущего графика.
3. Двигаемся дальше. Согласно описания мы должны были вставить "sub_window" - номер подокна графика.
Выбираем цифру "-1", т.к. мы хотим очистить все подокна графика, включая главное окно,
и вставляем её в код.
4. И последнее, что мы вносим в код скрипта, так это "тип объекта", который хотим удалить.
Раз мы решили удалять все созданные объекты, то поэтому также выбираем цифру "-1".
5. Компилируем и запускаем скрипт для очистки торгового терминала от всех графических объектов.
Как компилировать и запускать скрипт мы уже узнали, когда создавали предыдущий скрипт New2.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 |//+------------------------------------------------------------------+voidOnStart()
{
//---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.
*/
//+------------------------------------------------------------------+//| 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 |//+------------------------------------------------------------------+voidOnStart()
{
//---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.
*/
我的建议是
- 有现成的功能,你只需要了解它们的应用。问问你自己需要什么,为你的解决方案寻找现成的功能。
谢谢你,我会考虑的。
问候,弗拉基米尔。
我继续学习MQL5编程语言。新的脚本是专门用来创建一个助手,我需要这个助手来删除交易终端的所有图形对象。正如我先前所承诺的,我试图在这个脚本中为编程学校一年级的学生描述一切。
问候,弗拉基米尔。
我继续学习MQL5编程语言。新的脚本New3.mq5在我需要的价格水平上设置水平线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。
问候,弗拉基米尔。
我继续学习MQL5编程语言。新的脚本New4.mq5在我需要的日期和时间上设置了竖线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。
问候,弗拉基米尔。
为什么要这样写?
据说这本手册有6000多页,学习曲线会拖得很长:))))。
最好从操作者开始,试着写一些简单的例子。下面是脚本的初始设置。
然后阅读操作符的帮助,并尝试将它们一个一个地添加到脚本中,看看会发生什么。
你可能想先从他们开始。
条件性的if-else 语句
自行车操作员
Do-while 循环操作
选择开关 语句
一定要写下代码,以便你能记住它,并确保你能正确理解它。
我继续学习MQL5编程语言。新的脚本New3.mq5在我需要的价格水平上设置水平线。正如前面所承诺的,我试图为一个编程学校的一年级学生描述这个脚本中的一切。
问候,弗拉基米尔。
你可以在指标的源文件中找到绘图对象的例子,例如
你为什么要这么写呢?
他们说,参考书有6000多页,要想学好就需要太长的时间 :))
最好从操作者开始,试着写一些简单的例子。操作员更有趣 )
下面是脚本的初始设置。
然后阅读操作符的帮助,并尝试将它们一个一个地添加到脚本中,看看会发生什么。
你可能想先从他们开始。
条件性的if-else 语句
自行车操作员
Do-while 循环操作
选择开关 语句
一定要写代码来记忆并检查理解。
谢谢你,亚历山大!我已经制定了一个自学计划,我现在正在坚持。简而言之,自学计划是基于 "从简单到复杂 "的原则。每一个新的脚本任务将变得更加复杂和有趣。请注意,我的年龄不允许我迅速掌握所有的东西,所以我必须为自己拼写好几遍。
非常感谢您的反馈!我会把你的建议记在心里。
真诚的,弗拉基米尔。
你可以在指标的源文件中找到绘图对象的例子,例如
操作员更有趣 )
你是对的,但采取一个现成的例子或自己写一个独立的代码是两个很大的区别。至少对我来说是这样。非常感谢您的提示!
问候,弗拉基米尔。
谢谢你,亚历山大!我已经制定了一个自学计划,现在我坚持执行。简而言之,自学遵循 "从简单到复杂 "的原则。每一个新剧本的任务都会变得更加复杂和有趣。请注意,我的年龄不允许我迅速掌握所有的东西,所以我必须为自己拼写好几遍。
非常感谢您的反馈!我会把你的建议记在心里。
问候,弗拉基米尔。
你有一个错误的教育计划,你从错误的地方开始。
在这里,你已经研究了这个功能。
这并不简单,相对而言,需要已经有基本的知识。
为了证实这一点,请尝试回答这个函数上的问题,你可能无法回答,这表明学习的方向是错误的。
为什么 "My_line_2 "有引号而OBJ_VLINE 没有?
int sub_window, // индекс окна datetime time1, // время первой точки привязки double price1, // цена первой точки привязки
int,double 在这里是什么意思,它们有什么不同?
为什么要写sub_window,而不是反过来写,有什么意义?
你不需要从帮助中学习函数,你需要的是语言的基本要素,与交易环境、文件、各种数据和其他方面合作的基本原则,这取决于手头的任务。