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

 

Всем доброго вечера и хорошего настроения!

Уже давно привык к слову хендл, а вот как кратко описать его истинное значение? Поисковиками всякое перелопатил и нашёл на мой взгляд самое лучшее объяснение. Хотя могу и заблуждаться!

Взято из Википедии и специально сжато до приемлемого для меня понятия:

Хендл (дескриптор - тоже не самое лучше название!) - это указатель на источник дальнейшего извлечения информации.

Уважаемые программисты!!! А как бы Вы кратко охарактеризовали слово хендл?

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

[Удален]  
MrBrooklin #:
А как бы Вы кратко охарактеризовали слово хендл?
Число)
 
Aleksei Stepanenko #:
Число)

Понятно. ) А если серьёзно? Вот взято из документации:

iMA

Возвращает хэндл индикатора скользящего среднего. Всего один буфер.

int  iMA( 
   string               symbol,            // имя символа 
   ENUM_TIMEFRAMES      period,            // период 
   int                  ma_period,         // период усреднения 
   int                  ma_shift,          // смещение индикатора по горизонтали 
   ENUM_MA_METHOD       ma_method,         // тип сглаживания 
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle 
   );
 

Алексей, исходя из Вашего определения хэндла поучается, что iMA возвращает число индикатора скользящего среднего? )) Абракадабра получается, да и только... )

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

 

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

Вызов функций типа 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"? Я говорил про первое, а вы, возможно, имели ввиду второе. Но могу ошибаться, конечно.