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


Вопросы по новому MQL4


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

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

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

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

Всем привет,

 

В этой ветке задаем и разбираем вопросы касающиеся нового MQL4 (билды МТ4 600+).

 

Не стесняйтесь задавать вопросы. Вместе всегда проще разбираться.

 

Курс по новому MQL4: g02.ru/topic/23155-новый-mql4/

 

Кирилл



#2 Miko

Miko

    кандидат финансовых наук

  • Пользователь
  • 154 Сообщений:
  • Пол:Женщина

Отправлено 26 March 2014 - 04:37 PM

Kirill Здравствуйте, раз уж вы открыли тему по новых обновлениям в коде, надеюсь вопросы приветствуются. Вопрос первый. Вроде как совместимость осталась  c start и onstart, и так далее с остальными. Тогда объясните почему раз и навсегда стоит отказаться с просто start. Какие преимущества? Назрел вопрос номер два. Что бы не бегать по джунглям, скажите и желательно поподробней, зачем нужен класс. p/s Жду ответов, как соловей лета.smile.png


Сообщение отредактировал Miko: 26 March 2014 - 04:38 PM


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

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

Отправлено 28 March 2014 - 12:03 PM

Kirill Здравствуйте, раз уж вы открыли тему по новых обновлениям в коде, надеюсь вопросы приветствуются. Вопрос первый. Вроде как совместимость осталась  c start и onstart, и так далее с остальными. Тогда объясните почему раз и навсегда стоит отказаться с просто start. Какие преимущества? Назрел вопрос номер два. Что бы не бегать по джунглям, скажите и желательно поподробней, зачем нужен класс. p/s Жду ответов, как соловей лета.smile.png

 

Приветствую Miko,

 

Спасибо за интересный вопрос. Как бывает со всеми транзициями, MetaQuotes решили оставить совместимость старого синтаксиса. Тем не менее, новый синтаксис и функционал языка являются более стандартизированными. Поэтому, если Вы будете продолжать использовать start(), то Ваш код не будет монолитным, что будет усложнять его восприятие. 

 

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

 

Про классы мы обязательно поговорим подробно в ближайщих уроках курса "Новый MQL4". Если коротко, то сам вопрос поставлен неверно. Класс - это не надстройка над язык прогаммирования; класс - это основа нового MQL4. Зачем он нужен - он нужен для всего, что только можно придумать. Теперь, все будет разбито на классы. В простейшем приближении Вы можете себе представить класс как переменную, которая умеет делать действия. Предлагаю дождаться соответствующих уроках, где все будет детально объяснено.

 

С уважением,

Кирилл



#4 Miko

Miko

    кандидат финансовых наук

  • Пользователь
  • 154 Сообщений:
  • Пол:Женщина

Отправлено 28 March 2014 - 02:53 PM

Приветствую Miko,

 

Спасибо за интересный вопрос. Как бывает со всеми транзициями, MetaQuotes решили оставить совместимость старого синтаксиса. Тем не менее, новый синтаксис и функционал языка являются более стандартизированными. Поэтому, если Вы будете продолжать использовать start(), то Ваш код не будет монолитным, что будет усложнять его восприятие. 

 

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

 

Про классы мы обязательно поговорим подробно в ближайщих уроках курса "Новый MQL4". Если коротко, то сам вопрос поставлен неверно. Класс - это не надстройка над язык прогаммирования; класс - это основа нового MQL4. Зачем он нужен - он нужен для всего, что только можно придумать. Теперь, все будет разбито на классы. В простейшем приближении Вы можете себе представить класс как переменную, которая умеет делать действия. Предлагаю дождаться соответствующих уроках, где все будет детально объяснено.

 

С уважением,

Кирилл

 

Спасибо. Будем ждать.



#5 _Serg_

_Serg_

    xочу быть полезным

  • Пользователь
  • 43 Сообщений:

Отправлено 18 April 2014 - 12:21 PM

Лекция 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;
            
};
Проверка результатов на графике:
 

attachicon.gifL2-1.GIF

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

 

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

© Kirill. [email protected]

 

Массивы вместо переменных также работают в классах? Если сортировать один из массивов объявленных в классе, остальные при этом также бужут отсортированы относительно индекса основного массива?



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

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

Отправлено 19 April 2014 - 04:24 AM

 

Массивы вместо переменных также работают в классах? Если сортировать один из массивов объявленных в классе, остальные при этом также бужут отсортированы относительно индекса основного массива?

 

 

 


Приветсвтую _Serg_,

Благодарю за интересный вопрос.

 

Верно - класс может содержать массив или даже несколько. Однако, сортировка массивов будет независимая, если Вы иначе не организуете через функции класса. Об этом мы поговорим подробней в самом курсе.

 

Кирилл



#7 _Serg_

_Serg_

    xочу быть полезным

  • Пользователь
  • 43 Сообщений:

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

Kirill, перед классами, может более подробно расскажите о структурах, а то абстрактный расказ про возраст "David White", ну както не очень интересен.

   Конкретные примеры - конкретные результаты.

Опять же актуальны вопросы с сортировками "структур-массивов" по включенным в них элементам.

Поскольку кроме ArraySort() по первому измерению, для сортировок ничего и нет, приходиться изголяться, но в структуре  хранятся разнотипные данные, итут уж без полёта фантазии совсем грустно.

Можно и без сортировок, но в перборах элементов легко  запутаться.


Сообщение отредактировал _Serg_: 02 May 2014 - 03:56 AM


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

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

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

Kirill, перед классами, может более подробно расскажите о структурах, а то абстрактный расказ про возраст "David White", ну както не очень интересен.

   Конкретные примеры - конкретные результаты.

Опять же актуальны вопросы с сортировками "структур-массивов" по включенным в них элементам.

Поскольку кроме ArraySort() по первому измерению, для сортировок ничего и нет, приходиться изголяться, но в структуре  хранятся разнотипные данные, итут уж без полёта фантазии совсем грустно.

Можно и без сортировок, но в перборах элементов легко  запутаться.

 

Приветствую,

 

Благодарю за конструктивную критику. Однако, я не совсем согласен с Вами. Поясню:

 

1. В целом, в ООП классы важней структур - поэтому начинаем с них. А раз уж начали с классов, то структуры проще объяснить после того, в разумной мере освоим (познакомимся с) классы. 

 

2. С моей точки зрения, абстрактные примеры проще для понимания нежели конкретные FOREX-задачи. 

 

Вы увидите - через несколько уроков все станет на свои места, и Вы сможете насладиться курсом в полной мере.

 

Пишите, если будут вопросы.

 

Кирилл



#9 _Serg_

_Serg_

    xочу быть полезным

  • Пользователь
  • 43 Сообщений:

Отправлено 13 July 2014 - 05:29 AM

Kirill, смотрю в "классах" у нас затишье. А как бы в процессе изучения классов, рассмотреть пример сортировки по возрастанию/убыванию  символьных данных, например названий инструментов, а то ArraySort() с таким типом данных не работает. (MQL однако.)

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

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

Отправлено 13 July 2014 - 02:18 PM

Kirill, смотрю в "классах" у нас затишье. А как бы в процессе изучения классов, рассмотреть пример сортировки по возрастанию/убыванию  символьных данных, например названий инструментов, а то ArraySort() с таким типом данных не работает. (MQL однако.)

 

Приветствую Serg,

 

Интересная идея. Однако хотел бы уточнить, что ты подразумеваешь. Имеется ввиду создания класса, который бы сортировал существующие массивы или же имплементация полноценного класса для хранения массивов символьных данных и работы с ними (в т.ч. и сортировка) ?
 

Кирилл



#11 Azad Mamedov

Azad Mamedov
  • Пользователь
  • 1 Сообщений:

Отправлено 22 October 2014 - 10:37 AM

Всем привет,

 

В этой ветке задаем и разбираем вопросы касающиеся нового MQL4 (билды МТ4 600+).

 

Не стесняйтесь задавать вопросы. Вместе всегда проще разбираться.

 

Курс по новому MQL4: g02.ru/topic/23155-новый-mql4/

 

Кирилл

вы не могли бы сказать в чем у меня тут проблема ? я только что изучил глобальные переменные и хотел протестировать программу из книги(программа должен делит 30% от общего депозита равно между экспертами )
код такой

int Experts;
double Depo=10000.0,
Persent=30, Money;
string Quantity="GV_Quatity";
//+------------------------------------------------------------------+
int init() {
Experts =GlobalVariableGet(Quantity);
Experts=Experts+1;
GlobalVariableSet(Quantity,Experts);
Money=Depo*Persent/100/Experts;
Alert(Symbol(),"cutluyu ucun",Money,"qeder vesait ayrilmiwdir","aktiv eksperlerin sayi",Experts);
return(0);
}
//+-----------------------------------------------------------------------------
int start() 
{
int New_expert=GlobalVariableGet(Quantity);
if(Experts!=New_expert)
{
Experts=New_expert;
Money=Depo*Persent/100/Experts;
Alert(Symbol(),"cutluyu ucun",Money,"vesait ayr;lmiwdir","aktiv eksperlerin sayi",Experts);
}
return(0);
}
//+-----------------------------------------------------------------------------
int deinit()
{
Experts=GlobalVariableGet(Quantity);
if(Experts==1)
GlobalVariableDel(Quantity);
else
GlobalVariableSet(Quantity,Experts-1);
Alert("Ekspert pencereden cixarilib");
return(0);
} 
пишет ошибку
possible loss of data due to type conversion test9.mq4 19 9
possible loss of data due to type conversion test9.mq4 29 15
possible loss of data due to type conversion test9.mq4 41 8
 

Сообщение отредактировал Azad Mamedov: 22 October 2014 - 10:41 AM


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

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

Отправлено 22 October 2014 - 02:02 PM

 

вы не могли бы сказать в чем у меня тут проблема ? я только что изучил глобальные переменные и хотел протестировать программу из книги(программа должен делит 30% от общего депозита равно между экспертами )
код такой

 

...

 

пишет ошибку
possible loss of data due to type conversion test9.mq4 19 9
possible loss of data due to type conversion test9.mq4 29 15
possible loss of data due to type conversion test9.mq4 41 8
 

 

 

Приветсвтую Azad,

 

Я скопировал Ваш код, чтобы проверить. Компилируется отлично! Ошибок не выдает, даже нет предупреждений.

 

Логику работы с глобальными переменными Вы написали правильно. Вот результат:

 

global_var.png

 

Более того, если нажать F3, появится список глобальных переменных, где мы видим Вашу:

 

global_var2.png

 

Думаю, что глобальные переменные Вы практически освоили!

 

Кирилл



#13 _Serg_

_Serg_

    xочу быть полезным

  • Пользователь
  • 43 Сообщений:

Отправлено 21 November 2014 - 01:23 PM

Приветствую Serg,

 

Интересная идея. Однако хотел бы уточнить, что ты подразумеваешь. Имеется ввиду создания класса, который бы сортировал существующие массивы или же имплементация полноценного класса для хранения массивов символьных данных и работы с ними (в т.ч. и сортировка) ?
 

Кирилл

С имплементацией  полноценного  или   просто класса, пока ничего не скажу, не знаю. А знаю, что ArraySort(), символы не сортирует, а надо.

Вопрос хранения символьных данных, например наименований инструментов, опять-же косо-криво решен, даже с учётом изменения их перечня, для формирования  "красивых" отчётов, анализа. Философия.....

 

Надо:  "Создание класса, который бы сортировал существующие символьные массивы. (Или по первому измерению символьного типа.)"

Всё, на сегодня мысль (Одна.) закончилась.






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

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