В справочнике MQL5 ошибка или как это следует понимать? - страница 3

 
Dmitry Fedoseev:
В одном варианте магик long, в другом - ulong. В обеих случаях заполнение структуры выполняется приведение к типу ulong, а при получения значения функцией  OrderGetInteger(ORDER_MAGIC) выполняется обратное приведение к изначальному типу. И все данные на месте в том виде, в каком были.   

А теперь посмотрите на то, каким получился отрицательный магик в столбце ID эксперта:


 
Oleg Remizov:

А теперь посмотрите на то, каким получился отрицательный магик в столбце ID эксперта:


Потому поле поле для магика в структуре имеет тип ulong, и терминал никак не может знать, что в него кто-то закодировал long (или еще что-то). И как раз, если это длинное число перекодировать в long, то получится -2.

 
Dmitry Fedoseev:

Потому поле поле для магика в структуре имеет тип ulong, и терминал никак не может знать, что в него кто-то закодировал long.

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

 
Oleg Remizov:

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

Да очень просто:

ulong magic = ulong(PositionGetInteger(...));
 
Oleg Remizov:

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

long и ulong - обе по 8 байт. Так что, это вопрос правильного приведения типов

 
Ihor Herasko:

Да очень просто:

Примеры с преобразованием типа встроенной функции языка лишь показывают как можно жить с неправильной справкой.

А зачем жить с неправильной справкой, когда можно исправить и справку и функцию и привести всё к одному знаменателю?

Какая нужда магику иметь отрицательное значение? Он же нужен только для придания уникальности сделкам конкретного советника. 

 
Oleg Remizov:

Примеры с преобразованием типа встроенной функции языка лишь показывают как можно жить с неправильной справкой.

А зачем жить с неправильной справкой, когда можно исправить и справку и функцию и привести всё к одному знаменателю?

Какая нужда магику иметь отрицательное значение? Он же нужен только для придания уникальности сделкам конкретного советника. 

Это нетривиальное решение позволяет увеличить диапазон и возвратить отрицательное значение. Мне понятно зачем так. Но как справку написать по данному варианту реализации тоже не понимаю)))
 
Valeriy Yastremskiy:
Это нетривиальное решение позволяет увеличить диапазон и возвратить отрицательное значение. Мне понятно зачем так. Но как справку написать по данному варианту реализации тоже не понимаю)))

Не сразу понял что Вы имеете ввиду. То есть эта игра с преобразованием типа позволяет задействовать все отрицательные значения из long и полностью весь диапазон ulong. В принципе понятно, только, я думаю, диапазон ulong не только достаточный, а даже избыточный для того чтобы у всех одновременно работающих в терминале советников магики не повторялись. Куда уж ещё больше его расширять...

 
Oleg Remizov:

Не сразу понял что Вы имеете ввиду. То есть эта игра с преобразованием типа позволяет задействовать все отрицательные значения из long и полностью весь диапазон ulong. В принципе понятно, только, я думаю, диапазон ulong не только достаточный, а даже избыточный для того чтобы у всех одновременно работающих в терминале советников магики не повторялись. Куда уж ещё больше его расширять...

Видимо проблема обозначилась где то у кого то) раз разрабы пошли на такие не тривиальные костыли).
 
И всё равно, даже если это сделано для расширения диапазона доступных магиков. Разве что-то бы поменялось если бы функция возвращала ulong, в справке так и было бы написано, а пользователи при желании могли бы загонять в структуру отрицательные значения long и при считывании значения магика делать преобразование к long? И работало бы так же, и в справке всё было корректно написано насчёт работы функций.
Причина обращения: