Блог им. TTrade

MQL4 vs MQL5 Вопрос.

    • 17 марта 2013, 20:03
    • |
    • TT
  • Еще
Недавно вдруг освоил MQL4. Просто безупречный язык. Владея программированием на уровне школы, без особых проблем написал пару роботов буквально за один день. Все предельно просто, предельно приспособлено под трейдерские задачи, логично, интуитивно понятно. Но. Metatrader 5 начинает свое шествие по планете. Четвертая версия, по идее, должна отойти на второй план и кануть в Лету.

С удивлением обнаружил, что мой недавно обретенный навык программирования на MQL4 абсолютно бесполезен в новой версии. Более того MQL5 мне показался откровенно бредовым, сложным и непонятным. Заинтересовавшись вопросом отличий этих языков наткнулся на такую таблицу: 
MQL4 vs MQL5 Вопрос.
Полная версия этого документа доступна по адресу:
http://ruforum.mt5.com/threads/12812-konverter-programm-iz-mql4-v-mql5
(вложение «Таблица основных различий MQL4to5_0.2.zip» во втором сообщении темы)

Объясните мне пожалуйста, зачем все так трудно? Какие преимущества и достоинства вытекают из такого невообразимого усложнения языка? Какая в этом культурно-историческая ценность? Спасибо.
★2
25 комментариев
Не знаю, связано ли это с усложнением языка, но тестирование проходит на много шустрее.
oldiol, Полагаю, что дело в поддежке многопоточности/многоядерности. Metatrader4- совсем древний и использует только одно ядро процессора.
avatar
TT, имея опыт MQL4, за неделю написал 1-го бота на MQL5 по аналогии.
oldiol, Да понятно, что проблема реашемая. Но зачем все так усложнять? Какой выигрыш? Семь дней против одного?
avatar
Dale_DMT, A MQL4 разве не объектно-ориентированный? В любом случае ни слова не сказано о преимуществах ООП. Что я выиигрываю как разработчик торговых роботов?
avatar
mql5 стал более С# подобным или практически идентичным языком
так что развивайся
avatar
vito333, Я трейдер, а не программист. Понятно, что с т.з. теории программирования MQL5 более правильный язык. Но мне надо ехать, а не шашечки.
avatar
TT, да я согласен, просто это общая тенденция, переводить софт на С# или подобие
MT, Wealth-Lab и т.д.
avatar
vito333, Куда катится мир?! То ли дело старый добрый Fortran 77. :)
avatar
TT, абсолютно точно! Сделали б хотя бы как квиковцы сейчас — 2 языка одновременно.
avatar
Какие преимущества и достоинства вытекают из такого невообразимого усложнения языка?
1) скорость на этапе выполнения (~ в 20 раз быстрее)
2) контроль ошибок на этапе компиляции и отладки
3) гибкость конструкций языка. Написать можно почти всё и это удобно делать.

У меня индюк ~600 строк кода (сложные адаптивные функции с большим кол-вом расчётов в циклах на несколько буферов).
В МТ4 эта зверюга тормозит по 5-15 секунд перерисовывая историю таймфрейма (при любом переключении или обновлении ТФ). Так что приходилось dll вешать, что не есть удобно.
Кроме того, функции этого индюка универсальны, я их пытался подключать к другим вещам. В итоге наткнулся на кучу неудобств (отсутствие пространств имён, капсуляции и т.п.).

На MQL5 написал класс за час (вообще 1-й раз тогда в глаза видел MT5!). Всё лишнее убралось в капсулу, перегрузки методов дали красивый и интуитивный расклад. Код чистый, пользоваться удобно, писать удобно, отлаживать так себе, но всё же лучше mt4. А главное — ни каких тормозов на графиках и на тестах справляется приемлемо быстро.
Fry, Большое спасибо за развернутый ответ. Почувствовал себя трейдером (не программистом). :) Мой первый и пока единственный индикатор- 5 строчек кода, не считая описаний.
avatar
TT, Собственно, лаконичность языка меня и впечатляет. То что нужно для прикладного программиста-любителя. Минимум ошибок, максимум прозрачности.
avatar
TT, к сожалению, эта лаконичность mq4 была весьма дорогой по ресурсам машины.
1) Минимум ошибок: на самом деле ошибок МОРЕ! Но их маскирует среда. Их не видно лишь потому, что все ошибки кодера (то есть программиста) исправляет терминал на лету (во время выполнения). То есть вместо отладки жёсткий контроль всех действий бота. Это как я уже заметил процесс с большими издержками.
2) Максимум прозрачности: а вот её-то как раз и нет! Очень-очень часто в Mq4 было непонятно, что именно делает бот.

Даже на 5 строк кода у вас наверняка есть ошибка, но вы об этом можете и не узнать. Причём, хорошо если ещё логика не страдает, тогда — да, такой подход полезен для любителей. Но бывает и хуже. Тогда понимаешь, что прозрачность мнимая.

Если интересно, могу привести 2 простых примера, это грабли на которые наступают все в mq4 =).
Fry, Под прозрачностью я понимаю наглядность кода. Когда конструкции простые, грубо говоря, собранные из больших кусков, без лишних деталей, лучше видно суть программы. Это справедливо, конечно, когда вы понимаете логику работы этих кусков, иначе найти ошибку сложнее. У меня, естественно, было несколько затыков из-за того, что были непонятны детали того, как работает та или иная функция, но это довольно просто выясняется методом тыка.

Примеры будут очень интересны! Думаю, не только мне. Наверно, даже лучше отдельным постом. С удовольствием посмотрю, наступил я на Ваши грабли, или нет еще. :)
avatar
TT, ок сделаю. Прозрачность должна быть «прозрачной» =)
То есть:
1) вся рутина убирается с глаз долой. Грубо говоря «меньше буковок». С этим пунктом mq4 справляется лучше всех.
2) каждое выражение языка должно быть прозрачным. Кодер сходу(или из доки) может понять, что будет на выходе из конструкции при ЛЮБОМ входе. Вот тут начинаются грабли.
TT, посмотрите статью: https://www.mql5.com/ru/articles/81 
Создайте функции-обвертки или методы класса.
Также #define в помощь:


У меня другая проблема MQL5->MQL4, только освоился на MQL5, теперь пытаюсь понять 4-й.
avatar
— Leonid --, Вопрос, вроде бы, был не как лечить этот геморой, а зачем его придумали. 

MQL4 более дружелюбен для пользователя не программиста. В нем все необходимые трейдерские функции рализованы в виде конкретных команд и не требуют знаний массивов, указателей или структур. Соответственно, понять его просто — на каждую свою хотелку нужно найти в мануале соответствующую команду и прописать ее параметры, а не городить килобайты всяких объявлений, чтобы получит текущее значение скользящей средней или отправить ордер. 
avatar
TT, я такой же чайник в программировании, но освоился с MQL5 и простенькие задачки могу решать.  В мануалах — тяжело и не наглядно, поэтому искал нормальные статьи, на них и научился.  define и обвертки сам стал писать, когда замучался искать смысл в своем же коде.
Да, разрабы еще те сволочи — не смогли разбить функции по сложности: упрощенные для новичков, а многостраничная херь для профи, плюс промежуточные уровни, но… есть то что есть.
До этого вникал в Quik+Lua - там еще веселее… разрабы умеют все довести до абсурда.
С другой стороны борясь с трудностями становишься сильнее, если правильно выбран подход. Так и с кодом — нужно научиться его структурировать и упорядочивать
avatar
TT, в MQL5 есть для упрощения библиотечные классы Trade, например:
   trader.Buy(1.0);                    // купить по рынку
   Print( position.Volume() );      // позиция
   Print( position.PriceOpen() );   // цена по позиции

Собственно стартовать получилось после просмотра видео:
  MQL5 — работа с ордерами
  Как написать советник для Metatrader 5
avatar
а там можно длл-ки внешние подключать?
avatar
Spekyl, Не знаю. А зачем?
avatar

теги блога TT

....все тэги



UPDONW
Новый дизайн