MQL5 dilini sıfırdan kendi kendine öğrenme - sayfa 10

 
SanAlex :

Benim tavsiyem -

- zaten hazır fonksiyonlar var, sadece uygulamalarını anlamanız gerekiyor. Kendinize bir görev belirleyin - neye ihtiyacınız var - ve çözümünüz için hazır işlevler arayın.

Teşekkürler, not alacağım.

Saygılarımla, Vladimir.

 

MQL5 programlama dilini öğrenmeye devam ediyorum. Yeni komut dosyası, ticaret terminalinden tüm grafik nesneleri kaldırmam gerekecek bir asistan oluşturmaya adanmıştır. Bu senaryoda, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisi için erişilebilir bir sunumda her şeyi boyamaya çalıştım.

Saygılarımla, 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.
*/
 

MQL5 programlama dilini öğrenmeye devam ediyorum. Yeni New3.mq5 betiği yatay çizgiyi ihtiyacım olan fiyat düzeyine ayarlıyor. Bu senaryoda, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisi için erişilebilir bir sunumda her şeyi boyamaya çalıştım.

Saygılarımla, 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.
*/
 

MQL5 programlama dilini öğrenmeye devam ediyorum. Yeni komut dosyası New4.mq5, dikey çizgiyi ihtiyacım olan tarih ve saate ayarlıyor. Bu senaryoda, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisi için erişilebilir bir sunumda her şeyi boyamaya çalıştım.

Saygılarımla, 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.
*/
 

Neden böyle yazıyorsun?

Referans kitabının 6000 sayfadan fazla olduğunu söylüyorlar, eğitim gecikecek :)))

Operatörlerle daha iyi başlayın, basit örnekler yazmaya çalışın.
 

İşte senaryonun ilk hazırlığı:

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

Ardından operatörlerle ilgili yardımı okuyun ve komut dosyasına birer birer eklemeye çalışın ve ne olduğunu görün

Önce onlarla başlayabilirsiniz:

Koşullu if-else ifadesi

döngü ifadesi için

do while döngüsü ifadesi

Hatırlamak ve anlamanın doğruluğunu kontrol etmek için kod yazdığınızdan emin olun.

 
MrBrooklin :

MQL5 programlama dilini öğrenmeye devam ediyorum. Yeni New3.mq5 betiği yatay çizgiyi ihtiyacım olan fiyat düzeyine ayarlıyor. Bu senaryoda, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisi için erişilebilir bir sunumda her şeyi boyamaya çalıştım.

Saygılarımla, Vladimir.

Göstergelerin kaynak dosyalarında çizim nesnelerinin örneklerini bulabilirsiniz, örneğin

Aliaksandr Hryshyn :

Neden böyle yazıyorsun?

Referans kitabının 6000 sayfadan fazla olduğunu söylüyorlar, eğitim gecikecek :)))

Operatörlerle daha iyi başlayın, basit örnekler yazmaya çalışın.

Operatörler daha ilginç)

 
Aliaksandr Hryshyn :

İşte senaryonun ilk hazırlığı:

Ardından operatörlerle ilgili yardımı okuyun ve komut dosyasına birer birer eklemeye çalışın ve ne olduğunu görün

Önce onlarla başlayabilirsiniz:

Koşullu if-else ifadesi

döngü ifadesi için

do while döngüsü ifadesi


Hatırlamak ve anlamanın doğruluğunu kontrol etmek için kod yazdığınızdan emin olun.

Teşekkürler İskender! Kendi kendime çalışma planım vardı ve şimdi buna uyuyorum. Kısaca plan hakkında, sonra kendi kendine öğrenme "basitten karmaşığa" ilkesine göre gider. Her yeni komut dosyası ile görevler daha karmaşık hale gelecek ve daha ilginç hale gelecektir. Lütfen yaşımın her şeyi anında kavramama izin vermediğini dikkate alın, bu yüzden birkaç kez kendim çiğnemek zorundayım.

Cevabınız için çok teşekkür ederim! tavsiyeni dikkate alacağım.

Saygılarımla, Vladimir.

 
VVT :

Göstergelerin kaynak dosyalarında çizim nesnelerinin örneklerini bulabilirsiniz, örneğin

Operatörler daha ilginç)

Bu doğru, ancak sadece hazır bir örnek almak veya bağımsız kod yazmak iki büyük farktır. En azından benim için. Ve tavsiye için çok teşekkürler!

Saygılarımla, Vladimir.

 
MrBrooklin :

Teşekkürler İskender! Kendi kendime çalışma planım vardı ve şimdi buna uyuyorum. Kısaca plan hakkında, sonra kendi kendine öğrenme "basitten karmaşığa" ilkesine göre gider. Her yeni komut dosyası ile görevler daha karmaşık hale gelecek ve daha ilginç hale gelecektir. Lütfen yaşımın her şeyi anında kavramama izin vermediğini dikkate alın, bu yüzden birkaç kez kendim çiğnemek zorundayım.

Cevabınız için çok teşekkür ederim! tavsiyeni dikkate alacağım.

Saygılarımla, Vladimir.

Doğru antrenman planın yok, yanlış yerden başlıyorsun.

İşte incelediğiniz fonksiyon:

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

Bu nispeten basit değildir ve zaten temel bilgi gerektirir.

Bunu doğrulamak için, bu fonksiyonla ilgili soruları cevaplamaya çalışın, muhtemelen cevaplayamayacaksınız, bu da yanlış öğrenme yönünü gösterir:

Neden "My_line_2" tırnak içinde ama OBJ_VLINE değil ?

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

int , double burada ne anlama geliyor ve nasıl farklılar?

Neden sub_window yazılıyor ve başka türlü yazılmıyor, ne anlamı var?

Yardımdan işlevleri öğrenmeniz gerekmez, dilin temel öğelerine, ticaret ortamıyla çalışmanın temel ilkelerine, dosyalarla, çeşitli verilerle ve çözülmekte olan görevlere bağlı olarak diğerlerine ihtiyacınız vardır.