MQL5 언어를 처음부터 자가 학습 - 페이지 10

 
SanAlex :

내 조언 -

- 이미 기성품 기능이 있으므로 해당 응용 프로그램을 이해하기만 하면 됩니다. 필요한 작업을 스스로 설정하고 솔루션에 대한 기성 기능을 찾으십시오.

감사합니다. 참고하겠습니다.

안부 인사를 전합니다. 블라디미르.

 

계속해서 MQL5 프로그래밍 언어를 공부하고 있습니다. 새 스크립트는 거래 터미널에서 모든 그래픽 개체를 제거하는 데 필요한 도우미를 만드는 데 사용됩니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.

안부 인사를 전합니다. 블라디미르.

 //+------------------------------------------------------------------+
//|                                                       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는 수평선을 내가 필요한 가격 수준으로 설정합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.

안부 인사를 전합니다. 블라디미르.

 //+------------------------------------------------------------------+
//|                                                         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는 수직선을 필요한 날짜와 시간으로 설정합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.

안부 인사를 전합니다. 블라디미르.

 //+------------------------------------------------------------------+
//|                                                         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 문

for 루프 문

do-while 루프

기억하고 이해의 정확성을 확인하는 코드를 작성하십시오

 
MrBrooklin :

계속해서 MQL5 프로그래밍 언어를 공부하고 있습니다. 새로운 New3.mq5 스크립트는 수평선을 내가 필요한 가격 수준으로 설정합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.

안부 인사를 전합니다. 블라디미르.

예를 들어 표시기의 소스 파일에서 그리기 개체의 예를 찾을 수 있습니다.

알리악산드르 흐리신 :

왜 그런 글을 쓰는가?

참고서에는 6000페이지가 넘고 교육이 지연된다고 합니다. :)))

연산자로 시작하는 것이 좋습니다. 간단한 예제를 작성해 보세요.

연산자가 더 흥미롭습니다)

 
Aliaksandr Hryshyn :

스크립트의 초기 준비는 다음과 같습니다.

그런 다음 연산자에 대한 도움말을 읽고 스크립트에 하나씩 추가하고 어떤 일이 발생하는지 확인하십시오.

다음과 같이 먼저 시작할 수 있습니다.

조건부 if-else 문

for 루프 문

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 가 작성되고 그렇지 않은 이유는 무엇입니까?

도움말에서 기능을 배울 필요는 없으며 해결되는 작업에 따라 언어의 기본 요소, 거래 환경에서 작업하는 기본 원칙, 파일, 다양한 종류의 데이터 등이 필요합니다.