Перейти к содержимому


Новый MQL4

Классы ООП build 600+ C++ MQL4/MQL5

  • Please log in to reply
3 ответы в этой теме

#1 Guest_Кир.илл_*

Guest_Кир.илл_*
  • Гости

Отправлено 26 March 2014 - 10:00 AM

Приветствую друзья,
 

В этой ветке мы будем изучать новый язык программирования MQL4.

 

Начальный MQL4-курс расположен тут: g02.ru/topic/584-курс-mql4/

Если Вы новичок, тогда Вам надо туда. В том базовом курсе объяснены все основы и азы программирования MQL4, которые мы не будем повторять в курсе "Новый MQL4".

 

В данном курсе мы будем разбирать более продвинутые темы как классы и объектно-ориентированное программирование. Начиная с 600-го билда MQL4 был кардинально изменен и от этого никуда не денешься. Я решил создать данный курс, чтобы показать, что новые концепции вовсе не являются сложными или страшными. 

 

Уверен, что за несколько уроков Вы поймете и полюбите новый MQL4. Вопросы продолжаем задавать в ветку "Общие Вопросы".

 

Поехали!

 

Кирилл



#2 Guest_Кир.илл_*

Guest_Кир.илл_*
  • Гости

Отправлено 26 March 2014 - 10:36 AM

Урок 1 - Создание нового советника

 

Всем привет.

 

Для начала, создадим новый советник и назовем его "EAforTests", здесь мы будем тестировать разные концепции ООП. На рисунке представлен результат, который мы получим, если воспользуемся Wizard:

 

L1-1.GIF

 

Как видите, автоматом вставляется ссылка на mql5.com, что говорит нам о том, что новый MQL4 очень похож на MQL5. Цитата от metaquotes на эту тему: "мы разработали единый компилятор, который автоматически поддерживает оба языка MQL4 и MQL5. MetaEditor тоже становится единым для обеих платформ MetaTrader 4 и MetaTrader 5".

 

Выделенные функции заменяют те, к которым мы привыкли в старом MQL4:

 

Init() -> OnInit()

Deinit() -> OnDeinit()

Start() -> OnTick()

 

На этом остановимся - я буду стараться делать уроки нового курса краткими и разбирать по одному кирпичику за раз.

 

До встречи на следующем уроке!
 
© Kirill. [email protected]


#3 Guest_Кир.илл_*

Guest_Кир.илл_*
  • Гости

Отправлено 17 April 2014 - 06:43 AM

Лекция 2 - Ваш первый класс
 
Всем привет,

Сегодня мы создадим наш первый класс.

По аналогии с предыдущим уроком, создайте новый советник и назовите его, например, Lecture_2.
 
Удалите все ненужные комментарии и в конец советника скопируйте код следующий код:
 
class Person   {


   public:
      string name;
      int    age;
            
};
 
Это добавит в Ваш советник класс под названием Person. Новый класс содержит две публично-доступные переменные: name и age. В предстоящих уроках мы еще обсудим подробней, что такое класс; однако, на данный момент нам достаточно следующего объяснения: класс - это новый тип данных, который Вы создаете сами. Класс может содержать существующие типы переменных - так, в нашем случае, класс Person содержит переменную типа string (name) и переменную типа int (age).
 
Давайте создадим новую переменную типа Person. Точно так же, как и в случае, с заранее существующими типами данных int, double, string, bool, и тд. (которые называются примитивными типами, но об этом позже) - для объявления новой переменной выбранного типа необходимо записать следующую конструкцию:
Person person1;
Сделали. Отлично. Теперь давайте зададим нашему человеку имя и возраст. Обращение к внутренним публично-доступным переменным класса производится через точку "." (как на чтение, так и на запись):
 

person1.name = "David White";
person1.age = 37;
Предлагаю Вам самостоятельно создать второго человека аналогичным образом.
 
Используйте Alert() или Print() для проверки результатов. В итоге, Ваш код должен выглядеть примерно так:
 

//+------------------------------------------------------------------+
//|                                                    Lecture_2.mq4 |
//|                                           Copyright 2014, Kirill |
//|                                          [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Kirill"
#property link      "[email protected]"
#property version   "1.00"
#property strict


int OnInit()   {

   return(INIT_SUCCEEDED);
}
  
void OnDeinit(const int reason)  {

}

void OnTick()  {

   Person person1;
   person1.name = "David White";
   person1.age = 37;
   
   Person person2;
   person2.name = "Mary Smith";
   person2.age = 20;
   
   Alert(person1.name, " ", person1.age);
   
}
//+------------------------------------------------------------------+

class Person   {

   public:
      string name;
      int    age;
            
};
Проверка результатов на графике:
 

L2-1.GIF

Рис.1 - Проверка

 

Надеюсь, Вы сегодня узнали что-то новое. Если остались вопросы - пишите.
До встречи на следующей лекции!

© Kirill. [email protected]
  • KOTMAKC это понравилось

#4 Guest_Кир.илл_*

Guest_Кир.илл_*
  • Гости

Отправлено 03 May 2014 - 09:57 AM

Лекция 2 - Методы в классах
 
Всем привет,
 
Сегодня мы поговорим про методы. Мы сначала обратимся к коду, а затем обсудим его. Итак, в имеющийся класс Person Вам необходимо дописать несколько строк, чтобы он  выглядел вот так:
 

class Person{
   //variables
   public:
      string name;
      int age;
   
   //methods
   public:
      void speak(){
         Alert("Hello there!");
      }
      
      void sayIntro(){
         Alert("My name is: ", name, " and I am ", age, " years old");
      }
}; 
 
 
Что мы изменили?

 
Мы добавили в наш класс два новых метода: speak() и sayIntro(). Методы позволяют объектам нашего класса выполнять "действия". В этом заключается одно из основных отличий классов от стандартных типов переменных: классы позволяют своим объектам выполнять действия. Разберем подробней:
 
Методы действуют как функции. Например, метод speak() просто-напросто выводит на экран фразу "Hello there!":
 
      void speak(){
         Alert("Hello there!");
      }
 

Но в отличие от функций, методы имеют доступ к внутренним переменным класса. Метод sayIntro() использует переменные name и age, чтобы создать персонализированное приветствие. Т.е. выдаваемое сообщение будет напрямую зависеть от того, какие параметры мы зададим выбранному объекту класса Person:
 

      void sayIntro(){
         Alert("My name is: ", name, " and I am ", age, " years old");
      }
 

Если сейчас вызвать скрипт, то результат будет тот же, что и в предыдущей лекции. Почему? Потому что, хоть мы и добавили в класс методы, мы их еще нигде не использовали в теле скрипта. Поэтому давайте изменим наш скрипт следующим образом:
 

//+------------------------------------------------------------------+
//|                                                   Tutorial03.mq4 |
//|                                   Copyright, Kirill - Forex Boat |
//|                                         http://www.forexboat.com |
//+------------------------------------------------------------------+
#property copyright "Copyright, Kirill - Forex Boat"
#property link      "http://www.forexboat.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int   myInteger1; //declaration
   myInteger1  = 15; //initialisation
   
   Person   myPerson1;  //declaration
   myPerson1.name = "John";   //initialisation
   myPerson1.age  = 37;       //initialisation
   myPerson1.speak();
   myPerson1.sayIntro();
   
   Person   myPerson2;
   myPerson2.name = "Jane";
   myPerson2.age  = 22;
   myPerson2.speak();
   myPerson2.sayIntro();
   
   //Alert("myPerson1: ", myPerson1.name, ", age: ", myPerson1.age);
   //Alert("myPerson2: ", myPerson2.name, ", age: ", myPerson2.age);


  }
//+------------------------------------------------------------------+


class Person{
   //variables
   public:
      string name;
      int age;
   
   //methods
   public:
      void speak(){
         Alert("Hello there!");
      }
      
      void sayIntro(){
         Alert("My name is: ", name, " and I am ", age, " years old");
      }
}; 

Как видите, вызов методов класса производится точно так же, как обращение к его внутренним переменным - через точку "." Однако, в отличие от переменных, в случае методов необходимо ставить круглые скобки после имени метода. Например:


   myPerson1.speak();
   myPerson1.sayIntro();

Итак, запустим наш тестовый скрипт в МТ4 и посмотрим, что он нам выдаст:
 

L2-1.GIF

Рис.1 - Методы отработали

 
Как видите, оба объекта вывели на экран персонализированные приветствия. Заметьте, что в данном примере используются другие значения, нежели чем в предыдущей лекции.

Надеюсь, что про методы на данный момент все понятно. В качестве тренировки Вы можете попробовать создать свои методы
.
До встречи на следующей лекции!

© Kirill. [email protected]





Also tagged with one or more of these keywords: Классы, ООП, build 600+, C++, MQL4/MQL5

1 человек читают эту тему

0 пользователей, 0 гостей, 0 скрытых пользователей


    Alexa (1)