Лучше один раз увидеть: яркие отличия MQL5 от MQL4 - страница 2

 
artemiusgreat:

1. мое мнение, очень субьективное - с точки зрения "просто закодить что-то" МТ5 намного проще, достаточно взглянуть на функцию закрытия ордеров в стратегиях с доливками :)

На MT4 для закрытия любого количества открытых позиций требуется всего одна торговая операция - OrderSend в обратную сторону на величину текущей нетто-позиции.

Для справки, OrderCloseBy не является торговой операцией - торговый сервер Metatrader совершает только модификации внутреннего учета своих позиций (виртуальных на самом деле): на внешние торговые площадки никаких торговых запросов не совершается.

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

 
hrenfx:
...
Пока вижу смысл использования MQL5 не для торговли: только тестер с кастомной историей + Облако.
Разве в МТ5 можно импортировать 'кастомную' историю?
 
hrenfx:

На MT4 для закрытия любого количества открытых позиций требуется всего одна торговая операция - OrderSend в обратную сторону на величину текущей нетто-позиции.

Для справки, OrderCloseBy не является торговой операцией - торговый сервер Metatrader совершает только модификации внутреннего учета своих позиций (виртуальных на самом деле): на внешние торговые площадки никаких торговых запросов не совершается.

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

Для справки - да ... но ... внимание ... все почему-то пользуются раздельным закрытием ордеров через OrderClose и CloseBy :)

А потому снова возвращаемся к выводу из предыдущего сообщения - при упрощении модели имеем меньше шансов найти прибыльную ТС.

 

Поскольку пока осваиваю только тестер пятерки, то пишу простые ТС. Но тут столкнулся с необходимостью даже под тестер создавать ООП-огород в виде ордер-объекта.

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

ООП уважаю и в MT4 вовсю использую. Но в данном случае тратя остатки серых клеточек на фактически велосипед, не покидает негативное чувство, что выполняю работу за кого-то другого.

 
hrenfx:

По случайному совпадению, как раз вчера нашлись старожилы, которые утверждают, что никакой экономии на спреде нет, от слова совсем.

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

Создайте посложней конфиг из поз и увидите экономию. Я это расписывал на сделках. Пока используете простой конфиг с closeby, не увидите.

Легкость? Для меня это примитивнейшая задачка - за плечами не один миллион строк моего кода. Но вестись не буду, у меня тонна прямой полезной работы, дающей реальный эффект.

Займитесь делом - пишите свои системы, а не выпрашивайте.

 
Renat:

Создайте посложней конфиг из поз и увидите экономию. Я это расписывал на сделках.

С простейшей мат. логикой дружу до сих пор. Несколько старожил форума, которые написали множество ТС и используют их годами в своей торговле, не согласны с вашим утверждением экономии на спреде. Где они ошибаются или вы - не знаю. Но склоняюсь к мнению, что все же вы несколько заблуждаетесь в данном вопросе. closeby-конфиг не использую.

Легкость? Для меня это примитивнейшая задачка - за плечами не один миллион строк моего кода. Но вестись не буду, у меня тонна прямой полезной работы, дающей реальный эффект.

Не являюсь программистом, поэтому примитивнейшую для вас задачу воспринимаю, как сложную для себя. И сколько таких любителей...
 
hrenfx: ООП уважаю и в MT4 вовсю использую. Но в данном случае тратя остатки серых клеточек на фактически велосипед, не покидает негативное чувство, что выполняю работу за кого-то другого.

Честно говоря, сложно представить, зачем там ООП :)

Но, если сильно надо, то вроде бы работу на этом поле МК уже провели ... или это неправильное ООП и оно дает неправильный мед?

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade

 
Renat:

1. Якобы "простой" метод Close[i] в MetaTrader 4 в разы дольше, чем CopyClose() в пятерке за счет того, что обычно нужно делать много запросов в историю.

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

2. Вы хоть в курсе, что в четверке работает автоматический механизм репликации текущего чарта в область рыночного окружения эксперта? Так вот в пятерке этого нет, что экономит много ресурсов.


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

4. И в MQL4 надо вообще-то проверять результат обращения к истории. А можно и в пятерке не проверять - это зависит от качества программиста. Обманывать себя придумками про ненужность проверок не надо.


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

6. Контроль результатов аналогично пункту первому - в пятерке больше контроля. И если разработчик безбашенный и верит, что "данные всегда есть в четверке", то и в пятерке может не проверять.


7. Запускайте сколько хотите экспертов на разных символах. Если хотите на одном символе торговать множеством советников, то лучше подумайте над практической целесообразностью и откажитесь. Обманывать себя теоретической возможностью не надо - это кончается печально в трейдинге.

8. Если есть сильная потребность, то легко пишется виртуализатор, которые еще и спред будет здорово экономить. Это уже неоднократно обсуждалось.


9. Если работаете в обычном синхронном режиме, то результат транзакции в историю прилетает сразу вместе с кодом ответа. Некоторые разработчики совершают ошибки в параметре TO запроса истории сделок, что выглядит для них как "транзакция еще не пришла". Просто забывают время TO хотя бы на несколько секунд в будущее сдвинуть.

В асинхронном режиме сделки отлично ловятся в обработчике транзакций.

10. Не понятно.

Если про тестер, то в пятерке он реально на голову выше, да еще и мультисимвольный.


11. Скорее всего сортировку расширим в MQL5. Но это не принципиальная проблема.


12. В пятерке тоже будет полная обработка объектов в визуализаторе. Дело в том, что в четверке сам движок тестера внутри терминала, а не вынесен наружу как у пятерки.


13. Как часто люди вручную прописывают даты в графический объект?

В пятерке работа с датой даже удобнее за счет специализированного контрола даты.


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


В пятерке отчеты тестера торговых стратегий гораздо лучше.


15. МТ4 менялся очень много все 9 лет - были выпущены сотни билдов. Вот сейчас очередной релиз выходит.

Пятерка тоже менялась, становясь все более мощной платформой. И жаловаться тут неуместно.


16. Подчеркивания, чтобы показать их deprecated статус. Нельзя использовать такие простые переменные, объявленные на глобальном уровне, но выглядящие как обычные локальные переменные.

Для чистоты языка и кода нужно переходить на Symbol(), Period(). Тут как раз продуманность и избавление от наследия старого.


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

Извлечение постоянно увеличивающего набора характеристик через рост идентификаторов при неизменности количества функций - это классический метод масштабирования.

Для борьбы со сложностью у нас есть хорошо работающие методы интеллисенса и автодополнения.

Жаловаться на это не имеет смысла - это касается любых языков и их API.

1. Проверил. Если в МТ5 копировать весь массив, потом делать множество обращений к скопированному массиву, тогда быстрее. Если каждый вызов Close[i] заменить на CopyClose() с проверкой, тогда значительно медленнее. В индикаторе, где заведомо понятно, что потребуется весь массив, будет выигрыш (в несколько раз). 

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

2. Про репликацию чарта в четверке мне никто не сообщал. Но догадывался.

3. Про жалобу на контроль не понятно. Суть жалобы была в том, что программисту пишущего советника необходимо делать проверку как сработала функция  CopyClose().

4. Непонятый пункт. Как в четверке проверять? Не равно ли Close[i] нулю? Что-то не то...

3 и 4. Похоже пытаетесь вывернуть наоборот, что мол в МТ4 все как попало делается и не глядя, результат неизвестен. А в МТ5 нам всё дано в наши руки, чтобы мы сами проверяли. Подход с унижением четверки не кажется убедительным.

5. В МТ4 вызов индикатора состоял из одного действия требующего внимания, в МТ5 два действия: запись функции iCustom() и запись функции CopyBuffer(). А если запрашивается не одно значение,  в сознании у себя еще надо разрулить с какого конца и в какую сторону данные будут располагаться. Т.е. троекратное увеличение нагрузки на голову программиста.

6. То, что возвращает true/false, то и надо проверять, а если возвращается значение, то как бы предполагается, что проблем быть не должно. Разве не так? Разве в МТ4 надо было проверять результат Close[i]?

7. Про целесообразность писал. Простота и удобство в эксплуатации. Зачем у авто четыре двери? Достаточно люка в крыше - так даже лучше, плавать можно. Это если принять идею, что двух советников не должно быть, но не все согласятся с этой идеей. Все хотят удобства, хочешь запустил, хочешь снял. 

8. Обсуждалось. Нет возможности создать виртуализатор независимый от перезапуска.

9. Извините, но он не прилетал. Точнее ответ то был, сделка совершалась, но история еще не обновлялась. Нужна была пауза для обновления истории. Это было совсем давно, сейчас такого может и нет.

10. Например, имеем торговый сигнал, открываемся. Есть позиция. Появляется второй торговый сигнал. В МТ4 открываем второй ордер, независимый от первого и имеем независимые результаты по каждому входу. В МТ5 или пропускаем второй сигнал или доливаемся, т.е. результат в какой-то мере зависим от момента запуска эксперта. 

11-12. Замечательно! 

13. Редко, раза два приходилось. Разговор был про копирование даты с графического объекта, теперь его мышкой не скопировать, а бывает нужно очень часто.

14. Тормознул.

15. В МТ4 в начале его развития не было таких изменения, что бы какой-то старый код перестал работать.

16. Это понятно. 

* * *

В основном всё мелочи за исключением трех пунктов:

- копирование и проверка данных,

- одна позиция,

- один советник.

Надо более серьезно подойти к созданию идеологического мифа почему МТ5 лучше чем МТ4. Унижать МТ4 не подходит. Просто объяснять что МТ5 новая версия, а МТ4 старая - аналогично. 

Надо как-то вывести в мир доходчивые объяснения, что на самом деле все стало лучше и как с этим быть: почему было принято решение избавиться от множества позиций, от множества советников. Так, что бы это было сделано по честному, не вызывало подозрений и, может быть, даже вдохновляло.

 
hrenfx:

1. Integer, Спасибо за такой развернутый ответ! Прочел несколько раз очень внимательно. По Вашему описанию выходит, что с нуля гораздо тяжелее выполнить ТЗ на MQL5, нежели MQL4.

2. С другой стороны, каждый раз велосипед не изобретаем же. Т.е. не вижу непреодолимых препятствий, кроме постоянных багов и изменений в самом MQL5 (сужу по множеству репортов об ошибках), придумать MQL_Integer, у которого будет полностью своя логика с работой с ордерами, индикаторами и прочее. Затем реализовать этот именной MQL на MQL4 и MQL5. И в каждом MQx-файле затем просто инклудить библиотечку на все случаи жизни. Тем самым забыв вообще про номер используемого MQL. Вопрос в другом, а стоит ли такая овчинка выделки? И почему каждый программист-любитель (я, например) вынужден изобретать свой велосипед. О чем думали разработчики - не знаю.

Почему не пишется официально MQL4-логика на MQL5 - тоже не понятно.

3. Что касается отсутствия виртуализации ордеров и других неудобств MT5, не хотелось бы загаживать вычищенный от срача четверочный форум. Скажу только, что мне на MT4 приходится использовать свою кривую виртуализацию по схеме: в виртуальном тестере в реал-тайме смотрим текущие позиции всех ТС, затем синхронизируем их с реалом. Т,е. и на MT4 виртуализация не супер, но, конечно, много круче MT5. Но если все же извращаться, как сам делаю, то вообще без разницы, на каком MT запускать.


Правда, на четверке все значительно нагляднее и, что вообще архиважно, вручную вмешаться в торговлю гораздо проще. Это задница, когда надо срочно вмешаться руками, а нихрена не понятны связи визуально. Писать свой GUI - выход, но сколько еще можно валить на свои плечи и, главное, ради чего...


3. В целом, если рассуждать, как фрилансер, можно подготовить все же библиотечку, чтобы выполнять ТЗ юзеров все с одинаковыми усилиями. Но опять же, а стоит ли овчинка выделки? Может, проще забить на фриланс в пятерке и фрилансить только в черверке, не заморачиваясь со всякими псевдо-универсальными библиотеками...


Возможно, вижу все по-дилетантски. Повторюсь, крайне плохо все еще, что MQL5 меняется все время. Убить же можно уйму времени на отладке ранее рабочих кодов. Пока вижу смысл использования MQL5 не для торговли: только тестер с кастомной историей + Облако.

1.

Засада #1. Некоторые наивно ожидают, что один советник должен работать и под МТ4 и под МТ5, а если это не так, то ты хреновый программист, поскольку не можешь обеспечить переемственность версий. Очень редко но бывает.

Засада #2. Формулировка - "просто перепишите мне советника с МТ4 в МТ5". При обсуждения выясняется, что заказчик не знаком с отличиями МТ5 от МТ4. Тратится часа 2-3 на объяснения, после понимания различий советник под МТ5 ему оказывается ненужным. Бывает постоянно.

2.

По своему опыту. Хорошую универсальную библиотеку или шаблон удается создать только после того, как раз 10-20 (с заходом с разных сторон) решал однотипную задачу.

3. От перезапуска терминала все сломается. Может, как вариант выхода из кризиса. В конце описания мелкими буквами о том, что перезапускать терминал нельзя.

 
Renat:

Как же вам хочется верить в глупости.

Слушать надо тех, кто полжизни положил на разработку того, что вы обсуждаете.

Опять про глупости. Ваша позиция понятна, моя перспектива здесь мне тоже понятна. В любом случае мое мнение не изменится.

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