Скачать MetaTrader 5

Может стоит причесать?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Читай форум и увеличивай свой рейтинг!
Mikhail Dovbakh
4273
Mikhail Dovbakh 2016.10.30 05:40 

MQL4 все же отличается от Пятерки..

И не только работой с торговыми функциями.

 Возьмем простую функцию сцепления строк

 

StringConcatenate

Возвращает строку, сформированную в результате конкатенации преобразованных в тип string параметров.

string  StringConcatenate(
   void argument1,         // первый параметр любого простого типа 
   void argument2,         // второй параметр любого простого типа
   ...                     // следующий параметр любого простого типа
   );

Параметры

argumentN

[in]  Любые значения, разделенные запятыми. От 2 до 63 параметров любого простого типа.

Возвращаемое значение

Строка, сформированная в результате конкатенации преобразованных в тип string параметров. Параметры преобразуются в строки по тем же правилам, что и в функциях Print() и Comment().

Примечание

Параметры могут иметь любой тип. Количество параметров не может быть меньше 2 и не может превышать 64.

Пример:

  string text;
  text=StringConcatenate("Account free margin is "AccountFreeMargin(), " Current time is "TimeToStr(TimeCurrent()));
  // text="Account free margin is " + AccountFreeMargin() + "  Current time is " + TimeToStr(TimeCurrent())
  Print(text);


Но в пятерке так нельзя, потому как

 

StringConcatenate

Формирует строку из переданных параметров и возвращает размер сформированной строки. Параметры могут иметь любой тип. Количество параметров не может быть меньше 2 и не может превышать 64.

int  StringConcatenate(
   string&  string_var,   // строка для формирования
   void argument1         // первый параметр любого простого типа 
   void argument2         // второй параметр любого простого типа
   ...                    // следующий параметр любого простого типа
   );

Параметры

string_var

[out]  Строка, которая будет сформирована в результате конкатенации.

argumentN

[in]  Любые значения, разделенные запятыми. От 2 до 63 параметров любого простого типа.

Возвращаемое значение

Возвращает длину строки,  сформированной путем конкатенации преобразованных в тип string параметров. Параметры преобразуются в строки по тем же правилам, что и в функциях Print() и Comment().

Смотри также


 A чего стоят любезно предлагаемые для автоподстановки функции DoubleToStr, TimeToStr, StrToDouble, StrToInteger, StrToTime

 Однообразие нарушает отсутствие IntegerToStr()... 😶

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

А было бы вообще замечательно, если бы к штатному Стилизатору добавить еще и Корректора - возможность заменить функции, которых нет в стандарте общего языка и никогда там не будет.

Тогда и переход на пятерку будет для многих кодеров и их продуктов легче.

А если еще помечтать, то разработчикам МТ5 стоило бы сделать конвертор МТ4 кода. Ну на первых порах для индикаторов.

Какой бы гигантский шаг по заполнению кодебазы был бы сделан!

😉 

Vladislav Andruschenko
91935
Vladislav Andruschenko 2016.10.30 06:41  
Такое впечатление что тема была создана в 2012 году  .  посмотрел, нет, 2016 год. 


Языки отличаются в многом.  но общая концепция осталась. 

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

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


Вы ещё много различий найдёте между 4 и 5. 



Да и кодбаза сейчас заполнена выше краев. 
Mikhail Dovbakh
4273
Mikhail Dovbakh 2016.10.30 07:23  
Vladislav Andruschenko:
Такое впечатление что тема была создана в 2012 году  .  посмотрел, нет, 2016 год. 


Языки отличаются в многом.  но общая концепция осталась. 

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

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


Вы ещё много различий найдёте между 4 и 5. 



Да и кодбаза сейчас заполнена выше краев. 

Спасибо за оперативное реагирование, Владислав.

И в прям, в 2016 году уже либо глаз замылен, или лучше переводить самому...

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

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

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

графические объекты, сцеплять строки или преобразовывать типы?  

Не знаю, но мне показалось это странным. в 2016 году.

Если сообщество посчитает мои вопросы странными, а тему «нафталинной» - ничего страшного, буду знать . 

Maxim Kuznetsov
9809
Maxim Kuznetsov 2016.10.30 07:27  
Mikhail Dovbakh:

А было бы вообще замечательно, если бы к штатному Стилизатору добавить еще и....

можно добавить свои стили, вот это было бы хорошо.

у меня вот штатное форматирование кода вызывает внутренний диссонанс и полное неприятие.

Mikhail Dovbakh
4273
Mikhail Dovbakh 2016.10.30 07:41  
Maxim Kuznetsov:

можно добавить свои стили, вот это было бы хорошо.

у меня вот штатное форматирование кода вызывает внутренний диссонанс и полное неприятие.

Спасибо Максим,

но я говорил не о стилизаторе кода на форуме, а о возможностях MetaEditor

 

Mikhail Dovbakh
4273
Mikhail Dovbakh 2017.02.06 11:27  
Справочник MQL5 / Операции с массивами / ArrayMaximum

ArrayMaximum

Ищет максимальный элемент в первом измерении многомерного числового массива.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Параметры

array[]

[in]  Числовой массив, в котором производится поиск.

start=0

[in]  Начальный индекс для поиска.

count=WHOLE_ARRAY

[in]  Количество элементов для поиска. По умолчанию, ищет во всем массиве (count=WHOLE_ARRAY).


Справочник MQL4 / Операции с массивами / ArrayMaximum

ArrayMaximum

Ищет в одномерном числовом массиве максимальный элемент.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           count=WHOLE_ARRAY,   // количество проверяемых
   int           start=0              // с какого индекса начинаем поиск
   );


жесть.
Alexey Volchanskiy
16678
Alexey Volchanskiy 2017.02.06 15:30  
Vladislav Andruschenko:
Такое впечатление что тема была создана в 2012 году  .  посмотрел, нет, 2016 год. 

Да и кодбаза сейчас заполнена выше краев. 
Угу, полна перлов типа "скрипт, открывающий подряд три одинаковых ордера на покупку". Почему-то этот маразм особенно запомнился.
Vladimir Karputov
Модератор
46040
Vladimir Karputov 2017.02.06 15:35  
Alexey Volchanskiy:
Угу, полна перлов типа "скрипт, открывающий подряд три одинаковых ордера на покупку". Почему-то этот маразм особенно запомнился.

Вариантов два:

  1. Любой код имеет право на жизнь.
  2. Нужна конкретная ссылка - для определения достоверности сказанного.

Alexey Volchanskiy
16678
Alexey Volchanskiy 2017.02.06 18:11  
Vladimir Karputov:

Вариантов два:

  1. Любой код имеет право на жизнь.
  2. Нужна конкретная ссылка - для определения достоверности сказанного.

Логически продолжу

3. Любой пост имеет право на жизнь. Превратим форум в помойку!

В следующий раз, как встречу такие перлы в КБ, пришлю ссылку обязательно. А так не было нужды сохранять.

George Merts
3609
George Merts 2017.02.06 18:49  

А в чем проблема-то написать "обертку", унифицирующую все действия ?

Завтра выйдет еще одна платформа - под нее не надо будет переписывать логику программ, достаточно переписать обертки.

На мой взгляд, идеалом был бы код, который бы работал вобще на всех биржевых платформах, и при появлении новой - просто надо было бы написать класс-адаптер (или набор таких классов), которые бы позволили легко перенести все имеющиеся наработки на новую платформу.

Мне кажется, что подобные "причесывания" не имеют особого смысла.

Mikhail Dovbakh
4273
Mikhail Dovbakh 2017.02.06 19:05  
George Merts:

А в чем проблема-то написать "обертку", унифицирующую все действия ?

Завтра выйдет еще одна платформа - под нее не надо будет переписывать логику программ, достаточно переписать обертки.

На мой взгляд, идеалом был бы код, который бы работал вобще на всех биржевых платформах, и при появлении новой - просто надо было бы написать класс-адаптер (или набор таких классов), которые бы позволили легко перенести все имеющиеся наработки на новую платформу.

Мне кажется, что подобные "причесывания" не имеют особого смысла.

Я, откровенно говоря, не совсем понял о чем Вы говорите? Мне не нравится «разношертность» не платформ, а неряшливые отличия в языке MQL.
Я могу заблуждаться, но диалекты МQL5/4 не всегда объяснимы различиями в платформах. 
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий