Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1591

 

Владимир, грубо говоря, можете рассматривать хендл как номер строки списка, который содержит адреса ячеек памяти, начиная с которых хранятся исполняемые коды расчёта всех нужных индикаторов. Поскольку индикаторов много разных, то в этот список нет смыла всегда добавлять их все. Он заполняется по запросам автора конкретного советника. Если какой-то индикатор нужен, то надо его в этот список добавить и расположить его код где-то в памяти.

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

Ну а что такое номер в списке, если не число?

 
Yuriy Bykov #:

Владимир, грубо говоря, можете рассматривать хендл как номер строки списка, который содержит адреса ячеек памяти, начиная с которых хранятся исполняемые коды расчёта всех нужных индикаторов. Поскольку индикаторов много разных, то в этот список нет смыла всегда добавлять их все. Он заполняется по запросам автора конкретного советника. Если какой-то индикатор нужен, то надо его в этот список добавить и расположить его код где-то в памяти.

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

Ну а что такое номер в списке, если не число?

Юрий, Вы правы также, как и Алексей. Сейчас специально в тестовом советнике поставил друг за другом первые попавшиеся на глаза хэндлы индикаторов iMA, iTEMA и iDEMA, после чего прогнал пошагово от точки остановки, заданной на iMA. Получил возврат значений от iMA - 10, от iTEMA - 11 и iDEMA - 12. Потом, как бы не переставлял местами хэндлы этих индикаторов, они все равно последовательно давали значения 10, 11 и 12.

Ваше объяснение, Юрий, более-менее стало мне понятно. Спасибо! Осталось только теперь понять самую малость - почему нумерация хэндлов начинается не с нуля, а с 10? )

С уважением, Владимир.

 

Владимир, а так ли уж необходимо вам это понять? 

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

Мне не пришлось поучаствовать в работе над компилятором и языком MQL5, поэтому не могу точно сказать, почему нумерация хендлов начинается с 10. Могу предположить почему это так, но в этом нет особого смысла. Ведь в коде мы не будем использовать хендлы как числа для выполнения каких-либо арифметических операций. Поэтому для нас, как пользователей MQL5, важны лишь две вещи:

  • Уникальность - для разных индикаторов полученные и запомненные в нашей программе хендлы будут иметь разные значения.
  • Постоянство - в любой момент выполнения нашей программы выбранный хендл всегда будет позволять получить расчётные данные одного и того же индикатора.
Другое дело, если вам любопытно и хочется подняться на уровень разработчика языка программирования. Тогда есть смысл вникать в подобные нюансы.
 
Yuriy Bykov #:
Другое дело, если вам любопытно и хочется подняться на уровень разработчика языка программирования. Тогда есть смысл вникать в подобные нюансы.
Да, Юрий, именно в этом дело. Если уж пытаюсь в чём-то разобраться, то стараюсь это сделать по максимуму. )

С уважением, Владимир.

 
MrBrooklin #:
почему нумерация хэндлов начинается не с нуля, а с 10?
Посмотрите каким числом заканчивается значение констант перечисления ENUM_APPLIED_PRICE
 
Спасибо, тоже узнал новую информацию. 
 
MrBrooklin #:
Да, Юрий, именно в этом дело. Если уж пытаюсь в чём-то разобраться, то стараюсь это сделать по максимуму. )

Владимир, на всякий случай спрошу: понятна ли разница между понятиями "разработчик языка программирования MQL5" и "разработчик, использующий язык программирования MQL5"? Я говорил про первое, а вы, возможно, имели ввиду второе. Но могу ошибаться, конечно.

 
Yuriy Bykov #:

Владимир, на всякий случай спрошу: понятна ли разница между понятиями "разработчик языка программирования MQL5" и "разработчик, использующий язык программирования MQL5"? Я говорил про первое, а вы, возможно, имели ввиду второе. Но могу ошибаться, конечно.

Юрий, да, разница мне абсолютно понятна. )

С уважением, Владимир.
 
Artyom Trishkin #:
Посмотрите каким числом заканчивается значение констант перечисления ENUM_APPLIED_PRICE
Здравствуйте, Артём! Позже, когда буду за компьютером, обязательно посмотрю.

С уважением, Владимир.
 
MrBrooklin #:
Здравствуйте, Артём! Позже, когда буду за компьютером, обязательно посмотрю.

С уважением, Владимир.
А потом посмотрите что передаëтся в функции создания индикаторов в качестве цены расчëта. И сопоставьте.