Самообучение языку MQL5 с полного нуля - страница 29

 
Реter Konow:
Закидали новичка бесполезной для него информацией.)) 

Полезна информация или нет решит новичок

Vasiliy Sokolov:

Хорошо сказал, познавательно, спасибо

 
Alexey Viktorov:

Это говорит о том, что не надо так афишировать свои желания. С таким-же успехом Владимир мог задавать вопросы конкретно о той или иной функции и получать полезные советы, а не бред «специалистов» типа учи С++ или учи ассемблер. Можно начать с изучения перфокарт.

Я за то, чтобы ТС учился по своему плану и не "прыгал" выше головы. Всему свое время. А учить, конечно же, нужно MQL и в правильном порядке. Вся изложенная выше философия (Василием и мною) может помочь структурировать знания, но не пустоту. А пока ученик в самом начале обучения, ему приходится пытаться структурировать пустоту по нашим филосовским нотациям.

Вернутся к учебнику и пока забыть о всяких высоких материях - вот что нужно.
 
Vasiliy Sokolov:

Продолжаем:

  • Раз событий много, то много и обработчиков событий. Раз события вызываются непоследовательно, то и их обработчики вызываются непоследовательно. Раз существует непоследовательность вызова, обработчики событий не могут зависть друг от друга, и от данных друг друга они тоже зависеть не могут. Единственной конструкцией, которая удовлетворяет этим жестким требованиям является функция.
  • Функции не зависят друг от друга. Если одна функция возвращает сумму a+b, а вторая возвращает произведение a*b, то результат у этих двух функций не будет зависеть от последовательности из вызова. Мы можем вызвать первую функцию с аргументами 3 и 5 и получить 8. Затем вторую функцию с этими же аргументами и получить 24. Затем поменять местами их вызов. Результаты будут теме жи. Функция сложения всегда будет возвращать 8 при ее аргументах 3 и 5. Функция умножения всегда будет возвращать 24 при этих же аргументах. 
  • Именно из сказанного выше, становится понятно, что обработчиком событий может быть только функция. Если произошло событие новый тик - то его обрабатывает специальная для этого функция OnTick. Если произошло событие Start (единоразовый запуск скрипта) - то его обрабатывает специальная для этого функция OnStart.
  • Функция универсальна. Она может обрабатывать не только события. Функция может возвращать что-то полезное, например текущее время. Функция может делать сложные вычисления с переданными ею аргументами и возвращать конечный результат этих вычислений в виде одного единственного значения. Наконец функция может быть провайдером данных: Вы вызываете функцию и получаете из нее нужные Вам данные, например котировки. 
  • MetaTrader изнутри состоит из тысяч разных функций, примерно 1500 тысячи из которых любезно предоставлены пользователям. Это очень полезные функции. Они позволяют узнать системное время, через них можно получить данные по нужному инструменту. Через функции происходит отправка торговых приказов. Вы можете открыть справочник МКЛ и убедится что он весь состоит из функций и аргументов к ним. Т.е. MetaTrader с точки зрения пользовательских программ - это один большой набор функций.
  • Универсальных функций не хватает. Сколько бы новых функций не появлялось в системе, всегда будет их дефицит. Происходит это, по той причине, что потребности у всех разные. Нет универсальной функции на все случае жизни. Самые общие и универсальные функции уже включены в МетаТрейдер и любезно предоставлены нам. Однако пользовательские потребности бесконечны. MetaQuotes не может удовлетворить индивидуальные потребности 100 000 пользователей их терминала. Вместо этого они поступили более гибко: дали возможность пользователям создавать нужные им функции самим. Пользователи от этого только в выигрыше. Вместо того что бы использовать не совсем подходящую им системную функцию, они могут написать свою собственную функцию, идеально решающую именно их задачу. Ни одна системная функция не идеальна в силу ее универсальности. 
  • То на сколько хорошо умеет пользователь писать свои функции и понимает суть их работы и говорит о том, на сколько программист квалифицированный. Если он понимает, что программа - это разрозненный набор обработчиков (в виде функций) которые не последовательно обрабатывают поступающие события - это хорошо. Если он умеет писать свои функции - еще один плюсик. Если он может объединять работу нескольких функций (как своих так и системных) в общий алгоритм - это еще один плюс ему. 
  • Если понять что В МетаТрейдер (и четвертом и пятом) все так или иначе связано на функциях, основано на функция, работает на функциях - то вдруг все становится ясно. Справка представляется уже не как толстый талмуд с набором разрозненных отрывков кодов, а как справочник по доступным функциями и тому что они делают. Все остальное вроде типов данных, массивов, структур, классов - не важно. Все это для поддержки функций, что бы они могли что-то возвращать и что-то принимать.

(пока все)

Класс!!! Василий, у Вас прирождённый талант учителя. Всё доходчиво и понятно, особенно для тех, кто на полном нуле. Не задумывались написать книгу по типу того, как написал "Учебник MQL4" Сергей Ковалёв, только теперь бы он назывался "Учебник MQL5" Василия Соколова?

Может быть данная тема даст толчок такому начинанию, как Вы считаете, Василий?

С уважением, Владимир.

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

Да, Василий написал очень неплохо, но слегка "перекошено" его субьективным пониманием. 

Я ведь не говорю "учитесь у меня, я знаю как правильно!", я говорю: "учитесь по учебнику и получите нужную базу, а не мои, наспех сформулированные концепты того, что меня сейчас волнует в теме".

П.С. Впрочем, дело Ваше.
 
Реter Konow:
Василий лишь зацикливает Ваше внимание на некоторых отдельных аспектах, считая что они важнее других. Например, Функция или Событие. Почитайте о функциях у С.Ковалева и найдете не менее (и даже более) подробное и доступное обьяснение, но без акцентирования на них внимания в ущерб остальным темам. Поэтому, нужно читать учебник.

Да, Василий написал очень неплохо, но слегка "перекошено" его субьективным пониманием. 

Я ведь не говорю "учитесь у меня, я знаю как правильно!", я говорю: "учитесь по учебнику и получите нужную базу, а не мои, наспех сформулированные концепты того, что меня сейчас волнует в теме".

П.С. Впрочем, дело Ваше.

Петер, могу предложить Вам и Василию совместными усилиями сделать доброе дело и написать такую книгу по MQL5.

Написать книгу - это самый лучший способ оставить о себе след в истории человечества, в частности, в истории программирования. Подумайте!

С уважением, Владимир.

 
MrBrooklin:

Петер, могу предложить Вам и Василию совместными усилиями сделать доброе дело и написать такую книгу по MQL5.

Написать книгу - это самый лучший способ оставить о себе след в истории человечества, в частности, в истории программирования. Подумайте!

С уважением, Владимир.

Спасибо за предложение, но Василий легко "уделает" меня по части классического подхода, который и нужен в такой книге. От себя могу предложить только абстрактное понимание Обьекта и Среды в их динамичном взаимодействии через призму программирования, но, это будет заключительная глава.))))
 
Реter Konow:
Спасибо за предложение, но Василий легко "уделает" меня по части классического подхода, который и нужен в такой книге. От себя могу предложить только абстрактное понимание Обьекта и Среды в их динамичном взаимодействии через призму программирования, но, это будет заключительная глава.))))

Понятно. Теперь хочется узнать мнение Василия по поводу моего предложения по написанию книги.

Сейчас, как раз изучаю его статью" Универсальный торговый эксперт: Работа с пользовательскими трейлинг-стопами (часть 6)".

С уважением, Владимир.

 

Продолжение

Из поста выше было понятно, что основное внимание уделяется функциям. Все было посвящено им, и ничему кроме них. Можно посчитать что это явный субъективный перекос или некая заумная "философия". Однако никакой философии здесь нет. И такое внимание к функциям не случайно. Дело в том, что в программировании, функция имеет фундаментальное значение. Более того, в математике функция также очень важное и фундаментальное понятие. В 20-ых годах прошлого века Алонзо Черчем была разработана система исчисления основанная на функциях. Она была названа лямбда-исчислением. Эта система формализовала понятие вычислимости и плотно связывала компьютерные вычисления и математику.  На основе лямбда-исчисления ведущими программистами мира были разработаны так называемые функциональные языки программирования, в которых функции отводится ведущее место. Например в функциональном языке программирования Haskell нет даже цикла for или чего-то подобного. Вместо этого предлагается вызывать функцию специальным образом, рекурсивно, для вычисления нужного значения. Можно доказать, что имея в наличии только функции и запрет на присваивание, можно написать тьюринг-полный язык программирования. Это такой язык на котором было бы возможно написать все, что возможно на любой другом тьюринг-полном языке, вроде процедурного или ООП языка.

MQL не функциональный язык, а скорее процедурный, расширяемый классами, со строгой типизацией и богатым предметно-ориентированным API (в виде тех же функций, о неожиданность). С другой стороны, теория функций базируется на прочном математическом фундаменте, предлагает простые и действенные паттерны использования любого языка программирования где есть функции, поэтому от функций и математической базы, которая за ними стоит, отказываться как минимум не дальновидно. Поэтому столь большое внимание я уделяю функциями. Не важно на сколько правильно Вы поймете устройство массива, не важно если ошибетесь с каким-то типом данных. Это быстро исправляется и корректируется. Но если Вы не разберетесь с функциями, и тому как они связаны между собой, то даже среднего программера из Вас не получится.

Таким образом что бы научится нормально прогать, т.е. линейно по времени расширять функционал своей программы, нужно научится следующему:

  • Четко (можно не досконально, но четко нужно) представлять событийную модель МетаТрейдер 4.5. 
  • Уметь работать с системными функциями. Обобщать их результат в своих собственных функциях. Объединять вызовы системных функций в свою собственную.
  • Уметь и любить писать свои функции.
  • Разбираться в цепочках вызова функций: например когда функция а() вызывает функцию б(), а б() вызывает с() и д(), а д() вызывает функцию с().
  • Уметь писать "чистые" функции и понимать, почему нужно писать чистые функции. Что такое чистая функция я объясню позже.

Функции кажутся простыми. "А чего там изучать-то. Вот тут абзац прочитать и делов-то. А дальше массивы, for, while..." - Нет, это не так. Функции в самом деле устроены на вид просто (и это прекрасно). Но что бы они по-настоящему умели решать задачи эффективно, функции должны обладать определенными свойствами и объединятся друг с другом определенным способом. Как это все делать возможно напишу позже.

 
MrBrooklin:

Понятно. Теперь хочется узнать мнение Василия по поводу моего предложения по написанию книги.

Сейчас, как раз изучаю его статью" Универсальный торговый эксперт: Работа с пользовательскими трейлинг-стопами (часть 6)".

С уважением, Владимир.

Не. Книги не будет. Может несколько статей. Но не в ближайшее время точно.

 
MrBrooklin:

Петер, могу предложить Вам и Василию совместными усилиями сделать доброе дело и написать такую книгу по MQL5.

Вот это точно вряд ли. Слишком разные у нас взгляды с Петром. Можете посмотреть что-нибудь из наших кодов, что бы убедится на сколько разные)

Причина обращения: