Перенос кода из МТ4: проблема с встроенными индикаторами

 
Добрый день, господа.

У меня такая проблема: я только начала в МТ5 допирать, переношу свои индикаторы из МТ4 и столкнулась с проблемами. Мне нужно использовать iMA в одну строчку и получать значение одного конкретного индекса. Видела на форуме сообщения и использование функции iMAGet (как и аналогичные iATRGet и тд). Как я вижу, функции уже не работают, тогда такой вопрос: как изящно получить одно единственное значение iMA? Я используя вышеупомянутые функции пыталась сделать так:

NormalizeDouble(iMAGet(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW), shift), Digits())

Знаю, без проверки плохо, но мне приходится портировать старый МТ4 код, по другому не придумала как сделать это попроще (у меня десяток машек, и все работают на разных таймфреймах). Инициализировать машки в oninit не могу, так как код имеет трехступенчатую вложенность, и у меня не получится вызвать нужную машку без геморроя. Поэтому, короче говоря, моя цель превратить

Это :

NormalizeDouble(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW, shift), Digits())

в то, что работает на MT5 без резких телодвижений.

 

Тут возникла нужда портировать мои индюки на пятёрку (4 на фортсе не работает) - пришёл к тому, что все встроенные индикаторы проще написать заново. Заодно и код такой будет работать в 4 и 5. Надо помнить, однако, что встроенные индюки поддерживаются в актуальном состоянии терминалом, своим же надо будет пробрасывать новые бары в соответствующем количестве.

Ни в одной системе не видел, чтобы индикаторные функции возвращали не значение, а дескриптор. Это даже не идиотизм, это просто неудобно. Неудивительно, что пятёрка уже 11 (!) лет не в состоянии одолеть четвёрку по популярности.

 

SeriousRacoon:

... не в состоянии одолеть четвёрку по популярности.

Ничего удивительного. Люди не хотят интересоваться чем-то новым. У меня двое в течении текущего месяца сетовали на то, что МТ5 объединяет позиции и нельзя локировать. А сколько лет доступны hadge счета в МТ5???

 
Это немного другое - люди просто не в курсе, что хедж\неттинг выбирается на стороне дилера при регистрации счёта. Тут же оказалась сломанной обратная совместимость. Понятно, что это делалось для создания потока работ на порт кода во фрилансе - но ценой стала непопулярность 5.
 

https://www.mql5.com/ru/articles/81

в этой статье есть пример кода самописных МА. Можете вставить "как есть", т.е. в виде функции, как было в четвёрке.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Olga Miakhovich:
Добрый день, господа.

У меня такая проблема: я только начала в МТ5 допирать, переношу свои индикаторы из МТ4 и столкнулась с проблемами. Мне нужно использовать iMA в одну строчку и получать значение одного конкретного индекса. Видела на форуме сообщения и использование функции iMAGet (как и аналогичные iATRGet и тд). Как я вижу, функции уже не работают, тогда такой вопрос: как изящно получить одно единственное значение iMA? Я используя вышеупомянутые функции пыталась сделать так:

Знаю, без проверки плохо, но мне приходится портировать старый МТ4 код, по другому не придумала как сделать это попроще (у меня десяток машек, и все работают на разных таймфреймах). Инициализировать машки в oninit не могу, так как код имеет трехступенчатую вложенность, и у меня не получится вызвать нужную машку без геморроя. Поэтому, короче говоря, моя цель превратить

Это :

в то, что работает на MT5 без резких телодвижений.

Попробуйте то, что в приложении. Описание доступно в английском блоге.

MQL's OOP notes: HashMap supports old-fashioned indicators in MetaTrader 5
MQL's OOP notes: HashMap supports old-fashioned indicators in MetaTrader 5
  • 2016.11.19
  • www.mql5.com
MetaTrader 5 is not back compatible with MetaTrader 4 in many aspects. This is bad, but we can do nothing with this. Yet we can do something to simplify translation of MetaTrader 4 products into MetaTrader 5. One of the problems that arises when we move from MetaTrader 4 to MetaTrader 5 is the way how latter uses different method of indicator...
Файлы:
 
SeriousRacoon:

Ни в одной системе не видел, чтобы индикаторные функции возвращали не значение, а дескриптор. Это даже не идиотизм, это просто неудобно. Неудивительно, что пятёрка уже 11 (!) лет не в состоянии одолеть четвёрку по популярности.

А список виденных систем можно? С логической и тактической точки зрения возвращать дескриптор объекта правильно.
В Windows так. У окна есть HANDLE. У файла есть HANDLE.
В ForexTester так. У индикатора есть Handle.
Для программирования это дольше. Но должно увеличивать скорость работы программ. Одно дело - доступ к объекту по HANDLE, другое дело - доступ к объекту по iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW). Что быстрее?

Причина обращения: