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

なぜ、そのような書き方をするのか?

ハンドブックは6,000ページ以上あると言われており、学習曲線は引きずられることになります :)))

まずは演算子から始めて、簡単な例を書いてみるのがよいでしょう。
 

スクリプトの初期設定はこんな感じです。

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は、私が必要とする価格水準に水平線を設定します。先ほどの約束通り、このスクリプトの内容は、プログラミングスクールの小学1年生を対象に、すべてを説明するようにしました。

ウラジミールさん、ありがとうございます。

描画オブジェクトの例は、例えば、インジケーターのソースファイルにあります。

Aliaksandr Hryshyn:

なぜそう書く必要があるのですか?

参考書は6000ページ以上あるそうです、覚えるのに時間がかかりすぎますね :)))

まずは演算子から始めて、簡単な例を書いてみるのがよいでしょう。

演算子はもっと面白い )

 
Aliaksandr Hryshyn:

スクリプトの初期設定はこんな感じです。

そして、演算子のヘルプを読んで、スクリプトに一つずつ追加してみて、どうなるかを確認してください。

まずは、それらから始めてみてはいかがでしょうか。

条件付きif-else

サイクルオペレーター

Do-while ループ演算子


セレクトスイッチ

必ずコードを書いて暗記し、理解度を確認すること。

アレクサンダーさん、ありがとうございます!自習の計画を立てて、今、それを実行しています。簡単に言うと、「シンプルからコンプレックスへ」というプランです。新しいスクリプトが増えるたびに、タスクはより複雑になり、面白くなっていくでしょう。なお、年齢的にすべてをその場ですぐに把握することはできないので、何度も自分で綴っています。

ご感想をお寄せいただき、誠にありがとうございました。アドバイスを参考にさせていただきます。

敬具 ウラジミール

 
VVT:

描画オブジェクトの例は、例えば、インジケーターのソースファイルにあります。

演算子はもっと面白い )

しかし、既成の例を使うか、自分でコードを書くか、それが2つの大きな違いです。少なくとも私にとっては。ありがとうございました。

ウラジミールさん、ありがとうございます。

 
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が 書かれていて、その逆はないのか、その理由は?

ヘルプから関数を覚える必要はなく、言語の基本的な要素、取引環境、ファイル、雑多なデータなどを扱う基本原則が必要で、それは目の前のタスクに依存します。