Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна - страница 20

 
Rashid Umarov:

Нужно использовать именно имена перечислений, а не их значения.

Не согласен с этим утверждением, но это не мое дело. Просьба сообщить, какие перечисления поменяли свои значения? И планируются ли еще изменения в других перечислениях?


Простой пример, когда изменение значения перечисления вызывает проблемы. Некоторые юзеры Маркета используют сеты (set-файлы) для купленных продуктов. Некоторые - шаблоны (tpl-файлы).

Попродвинутей - чарты (chr-файлы). Там прописаны входные настройки индикаторов и советников, к которым привык пользователь.


Если входной ENUM_APPLIED_PRICE-типа (среди индикаторов это сплошь и рядом), то после изменения значения все set/tpl/chr-фалы становятся некорректными. При этом программист совсем не при делах.

 
Artyom Trishkin:

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

Код из "\MQL5\Include\Indicators\Indicator.mqh":

В этом коде используется свой массив

static string _a_str[]={"Close","Open","High","Low","Median","Typical","Weighted"};

из него и возвращается значение согласно индекса.

 
Alexey Viktorov:

В этом коде используется свой массив

из него и возвращается значение согласно индекса.

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

 
Artyom Trishkin:

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

Именно по этой, в том числе, причине я использую СБ по минимуму…

 
Alexey Viktorov:

Именно по этой, в том числе, причине я использую СБ по минимуму…

Таки не предложил...

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

 
fxsaber:

Простой пример, когда изменение значения перечисления вызывает проблемы. Некоторые юзеры Маркета используют сеты (set-файлы) для купленных продуктов. Некоторые - шаблоны (tpl-файлы).

Это означает только то, что нельзя использовать предопределенные перечисления вида ENUM_XXX в качестве input параметров. К тому же такое использование не позволяет заместить имя комментарием

Пользовательские же перечисления свободны от указанных недостатков

 
Artyom Trishkin:

Таки не предложил...

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

Да какая ошибка, Артём… Ошибка в СБ, а не в MQL. Одно несоответствие ТФ со значениями MQL4 уже не позволяет, лично мне, пользоваться числовыми значениями перечислений. А опубликованный метод это демонстрация как делать не надо… Вполне достаточно EnumToString для получения того что хочешь проверить…

 
Alexey Viktorov:

Да какая ошибка, Артём… Ошибка в СБ, а не в MQL. Одно несоответствие ТФ со значениями MQL4 уже не позволяет, лично мне, пользоваться числовыми значениями перечислений. А опубликованный метод это демонстрация как делать не надо… Вполне достаточно EnumToString для получения того что хочешь проверить…

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

 
Вовсю использую следующие равенства.
DEAL_TYPE_BUY = ORDER_TYPE_BUY = POSITION_TYPE_BUY = 0
DEAL_TYPE_SELL = ORDER_TYPE_SELL = POSITION_TYPE_SELL = 1
ORDER_TYPE_BUY_LIMIT = 2
ORDER_TYPE_SELL_LIMIT = 3
ORDER_TYPE_BUY_STOP = 4
ORDER_TYPE_SELL_STOP = 5

POSITION_REASON_CLIENT = ORDER_REASON_CLIENT = DEAL_REASON_CLIENT
POSITION_REASON_MOBILE = ORDER_REASON_MOBILE = DEAL_REASON_MOBILE
POSITION_REASON_WEB = ORDER_REASON_WEB = DEAL_REASON_WEB
POSITION_REASON_EXPERT = ORDER_REASON_EXPERT = DEAL_REASON_EXPERT

Очень удобно!


ЗЫ И прием, подобный СБ, использую.

static const string Types[] = {"buy", "sell", "buy limit", "sell limit", "buy stop", "sell stop", "balance"};

Код получается лаконичный, понятный и быстрый.

 
fxsaber:
Вовсю использую следующие равенства.

Очень удобно!


ЗЫ И прием, подобный СБ, использую.

Код получается лаконичный, понятный и быстрый.

В каких-то местах удобно. Но перечисления и именованные константы были придуманы не для такого их использования. Как раз замена числовых значений без ущерба коду и является основным их удобством. 

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

Скорее всего какие-то элементы СБ писались недостаточно опытными кодерами.

А вот по замечанию насчет set-файлов соглашусь. Но только в том ключе, что MQ выбрали неправильный путь в сохранении значений перечислений. Для универсализма стоило бы переводить их в строки. Тогда бы никаких проблем не возникло при изменении значений констант.