Тестер, поддерживающий МГ4-скрипты и советников - страница 3

 
AlexeyVik:
Ну не стану я доказывать что это истинная правда. Для человека который не знаком с программированием на С++ и вообще ООП это достаточно сложно и совсем не для красного словца или рождения мифа. Как ни странно, я за неделю в этом разобрался и написал то что было надо. И это совсем другой миф, это говорит о том, что освоение mql5 доступно даже не профессионалам, таким как я.
В любом ООП можно программить алгоритмически, а сам ООП использовать только как обёртку. Я когда начинал кодить на Java, тоже с ООП сначала не разобрался, но особых проблем не увидел. Проблемы возникают позже, т.к. читать сырцы на алгоритмических языках очень сложно. Использовать библиотеки в алгоритмике в разы сложнее, т.к. их нужно прикручивать, перед тем как использовать.
 
Reshetov:
В любом ООП можно программить алгоритмически, а сам ООП использовать только как обёртку. Я когда начинал кодить на Java, тоже с ООП сначала не разобрался, но особых проблем не увидел. Проблемы возникают позже, т.к. читать сырцы на алгоритмических языках очень сложно. Использовать библиотеки в алгоритмике в разы сложнее, т.к. их нужно прикручивать, перед тем как использовать.
Юрий, а зачем ты мне объясняешь как это просто? Одному просто, другому очень просто, а кому-то недоступно. Я ведь не говорил о невозможности освоения... говорил только о различиях языков... о привычном и новом.
 
Renat:
Нисколько не отличается. Это два одинаковых языка с единым компилятором.
В таком ключе и C++ от JavaScript ничем не отличается. И это правда!
 
Integer:
В таком ключе и C++ от JavaScript ничем не отличается. И это правда!

Что только у нас на форуме не увидишь.

А что, ответственности то никакой. Можно ляпнуть что угодно.

 
AlexeyVik:
Юрий, а зачем ты мне объясняешь как это просто? Одному просто, другому очень просто, а кому-то недоступно.
Сложно разобраться, если нет документации, примеров, статей. Но когда это всё есть, да ещё и в проблемном случае можно задавать вопросы на форуме, то говорить о недоступности - это уже гнилая отмазка.
 
Reshetov:
Сложно разобраться, если нет документации, примеров, статей. Но когда это всё есть, да ещё и в проблемном случае можно задавать вопросы на форуме, то говорить о недоступности - это уже гнилая отмазка.

Изыди. Лично я освою и этот язык без проблем и вопросов. А кому-то это недоступно по складу характера, что угодно ему напиши.

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

 
Renat:

Что только у нас на форуме не увидишь.

А что, ответственности то никакой. Можно ляпнуть что угодно.

Точно. Особенно пользуясь авторитетом начальственного положения.

Все языки одинаковые, за небольшим исключением особо экстравагантных. Все они изучаются за 21 день любым чайником. У всех for, while, if, switch, может быть форма записи отличается, но принципиально от этого ничего не меняется. Значение имеет не форма записи операторов, а инфраструктура с которой язык взаимодействует. В этом отношении МТ4 и МТ5 - два разных мира.

Разница во всем. Начиная с незначительного - с нумерации баров в индикаторе, в МТ4 справа налево, в МТ5 слева направо. Продолжая более существенным - совокупной позицией и организацией данных истории торговли. Самая большая разница, в том, что чаще всего требуется - в способе доступа к данным котировок и индикаторов, копирование данных требует проверки, индексация то слева направо то справа налево, время бара то входит в диапазон, то не входит. Чего стоит только одно обсуждение аналога функции iBarShift() в CodeBase.

В МТ4 для обеспечения устойчивой работы советника достаточно было проверять возвращаемое значение OrderSelect(), а МТ5 надо на каждом шагу делать проверки, даже при получении данных последнего тика. Еще есть некоторые тонкости, программирования для МТ5, которые познаешь только набив себе много шишок, потому-что разложено много граблей.

 

Целиком и полностью поддерживаю Ваше мнение!

Расширение функционала это конечно хорошо, но под капотом МТ5 необходимо было оставить функции МТ4 для совместимости. Разумеется только те что вписываются в рамки торговой модели МТ5.

Чтобы исходники от четверки портировались с минимальными изменениями.

Я хоть и пользуюсь МТ5, в качестве мультивалютного тестера, но неоправданно усложнённые вызовы функций отталкивают.

Те же функции для перехода на МТ5 (https://www.mql5.com/ru/articles/81), почему же их не реализовать в самом ядре?

Зачем понадобилось переименовывать функции по преобразованию типов, например

CharToStr - CharToString, StrToDouble - StringToDouble

казалось бы элементарщина, но... реформы ради реформ?

Или например, функции работы со временем

int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Функция получения данных с графика

double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

И таких примеров сотня!

Безусловно МТ5 функциональней, но МТ4 удобнее! А это иногда гораздо важнее!

 
Integer:

Точно. Особенно пользуясь авторитетом начальственного положения.

Заявление "В таком ключе и C++ от JavaScript ничем не отличается" - это глупость в ключе обсуждения разницы MQL4 и MQL5. И ее кто-то ляпнул.

Авторитет зарабатывается долго и большим объемом работы. Я этот объем выполнил и слежу за тем, что говорю.


Разница во всем. Начиная с незначительного - с нумерации баров в индикаторе, в МТ4 справа налево, в МТ5 слева направо. Продолжая более существенным - совокупной позицией и организацией данных истории торговли. Самая большая разница, в том, что чаще всего требуется - в способе доступа к данным котировок и индикаторов, копирование данных требует проверки, индексация то слева направо то справа налево, время бара то входит в диапазон, то не входит. Чего стоит только одно обсуждение аналога функции iBarShift() в CodeBase.

Странная получается ситуация. Любые языки чайником за 21 день учатся, но нумерация баров и доступ к данным становятся проблемой.

Еще раз повторю - языки практически одинаковы, отличаются небольшим набором функций и компилятор у них единый. У MQL4 устаревший подход к работе с данными, который неприемлем для систем с глубокой и детализированной историей. Используйте новые CopyXXX функции в MQL4 и будет как в MQL5.


В МТ4 для обеспечения устойчивой работы советника достаточно было проверять возвращаемое значение OrderSelect(), а МТ5 надо на каждом шагу делать проверки, даже при получении данных последнего тика. Еще есть некоторые тонкости, программирования для МТ5, которые познаешь только набив себе много шишок, потому-что разложено много граблей.

И в MQL4 и в MQL5 везде надо проверять результаты функций.

Многие в MQL4 просто не обращали внимания на проверки и брали данные как есть. И в MQL5 так же пишут, а потом их форекс программы падают при запуске на CFD, фьючерсах или акциях просто из-за того, что авторам было лень проверить параметры инструментов или наличие данных.

 
Nemser:

Я хоть и пользуюсь МТ5, в качестве мультивалютного тестера, но неоправданно усложнённые вызовы функций отталкивают.

Задумайтесь над тем, что дают новые функции доступа к данным и почему так сделано.

В MetaTrader 4 лимитированная глубина истории, отдельные таймфремы и прямой доступ к барам своего символа через Open/High/Low/Close/Time[xxx]. Такой прямой доступ очень дорог в реализации с точки зрения ресурсов и затрат CPU. Задумайтесь о том, что каждый эксперт имеет свою локальную копию этих данных, чтобы не конфликтовать с другими экспертами и самим терминалом.

При росте количества символов (например, в МТ5 можно иметь 5 000-10 000 инструментов) и использовании глубокой минутной истории как основы всех таймфреймов, уже в принципе невозможно использовать методы работы MT4. Банально не хватит оперативной памяти, да еще копирование больших кусков убивает производительность. Поэтому в МТ5 уже нет автоматического ведения скрытой и дорогой копии чарта для каждого экперта.

Вместо этого мы перешли на очень экономные CopyXXX функции, где разработчик точно запрашивает в локальный массив столько данных, сколько ему нужно, а не весь доступный график. Дальше идет максимально быстрая работа с локальными данными (вместо старого достаточно дорого Open/High/Low/Close/Time[xxx]), плюс автор может кешировать эти данные и экономно использовать их при следующем вызове. Экономия по памяти и CPU получается огромная. Кроме того, у самой платформы развязываются руки по управлению огромными базами - доступ к ним всегда по запросу(вместо неконтролируемого прямого) и это позволяет гибко управлять кешами.

Еще важно отметить, что простота обращения Open/High/Low/Close/Time[xxx] в MQL4 касалась только текущего символа и таймфрейма, а все остальные данные других символов и таймфреймов доставались через iClose/iLow(...) функции, что давало серьезнейшие тормоза. Переход в MQL5 на единую модель CopyXXX функций в корне улучшил ситуацию, дав возможность разработчикам одним запросом получать нужные куски данных и не делать многократные блокируемые вызовы (задумайтесь о блокировках в каждом одиночном вызове iClose).


Те же функции для перехода на МТ5 (https://www.mql5.com/ru/articles/81), почему же их не реализовать в самом ядре?

Это не наши функции как и статья. Эта статья являет собой набор чудовищных костылей, но выпущена была для показа разницы.

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


Зачем понадобилось переименовывать функции по преобразованию типов, например

казалось бы элементарщина, но... реформы ради реформ?

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

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


Или например, функции работы со временем Функция получения данных с графика И таких примеров сотня!

Эти примеры костылей (обычно про такое говорят "сделать операцию на гландах черех ж") нельзя использовать для сравнения.

Теоретический материал уже устарел, так как MQL4 был прямо сведен к совместимости с MQL5 и теперь в MQL4 добавлено множество совместимых функций.


Безусловно МТ5 функциональней, но МТ4 удобнее! А это иногда гораздо важнее!

Не могу согласиться.

MetaTrader 5 гораздо удобнее как в пользовании программой, так и в языке.

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