Ошибки, баги, вопросы - страница 460

 
voix_kas:

В советнике требуется доступ к индикатору. Получить его можно, как минимум, тремя способами: IndicatorCreate(...) или iCustome(...), или, если это стандартный индикатор, например, iMA(...). 

Как я понял, при использовании любого варианта необходимо явно освобождать полученный хэндл (IndicatorRelease).

Вопрос в выборе способа вызова индикатора. В чем плюсы и минусы каждого способа? Приоритетный интерес в скорости обработки.

 

IndicatorCreate - для стандартных индикаторов, так что в случае машки - это аналоги вызова iMA. iCustom - для "кастомных" пользовательских индикаторов. Т.е. разные вещи по сути.

Скорость вызова iMA и IndicatorCreate(IND_MA) - должна быть сопоставима, но я не проверял.

По поводу IndicatorRelease - имеет смысл вызывать, если после расчета уже больше не потребуется к этому индюку возвращаться. У меня таких ситуаций не бывает - уж если какой-то индюк нужен (с заданным набором параметров), то он будет нужен для досчета/пересчета, а если входные параметры скрипта поменяются, то все переинициализируется и будут создаваться новые хэндлы.

 

Фактически в 99% случаев вызов IndicatorRelease является логической ошибкой программиста.

Создание индикатора является одной из самых дорогостоящих операций, которые запускают очень глубокие механизмы их расчета. Попытка закрыть хендл индикатора является тоже очень дорогой операцией, если думать о реальных глубинных процессах ее реализации. Частое создание и закрытие индикаторов говорит о том, что разработчик вообще не понимает сути операций.

Это же очень просто понять.

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
  • www.mql5.com
Доступ к таймсериям и индикаторам / IndicatorRelease - Документация по MQL5
 
Renat:

Фактически в 99% случаев вызов IndicatorRelease является логической ошибкой программиста.

Создание индикатора является одной из самых дорогостоящих операций, которые запускают очень глубокие механизмы их расчета. Попытка закрыть хендл индикатора является тоже очень дорогой операцией, если думать о реальных глубинных процессах ее реализации. Частое создание и закрытие индикаторов говорит о том, что разработчик вообще не понимает сути операций.

Это же очень просто понять.

Позволю вмешаться в разговор и скажу: механизмы м программе, терминале, форексе (по сути зачем мы здесь собрались)

являются простыми истинами, так что мешает нам их понять и косить рублс - или проги которые будем продовать,

а если нет возможности такую сделать то приходится молчать пока не произойдет "чудо" !

 
Im_hungry:

Позволю вмешаться в разговор и скажу: механизмы м программе, терминале, форексе (по сути зачем мы здесь собрались)

являются простыми истинами, так что мешает нам их понять и косить рублс - или проги которые будем продовать,

а если нет возможности такую сделать то приходится молчать пока не произойдет "чудо" !

Красивый пример непонятного потока мысли. Аж зависть берет от таких способностей.
 
Renat:
Красивый пример непонятного потока мысли. Аж зависть берет от таких способностей.

Наверняка джедай 80-го уровня, магистр Йода тихо медитирует в сторонке :)

И ведь не подкопаешься, "в случае чего помогали бездомным детям"(с) 12 стульев.

 

Не так давно мой рабочий код перестал компилиться.

Ругается на код в стандартной библиотеке: 

'GetLastError' - ambiguous call to overloaded function with the same parameters SymbolInfo.mqh  718     10
'GetLastError' - ambiguous call to overloaded function with the same parameters	SymbolInfo.mqh	725	57
 Видимо из за того что в моем коде:
#import "kernel32.dll"
uint GetLastError();
#import
.....
kernel32::GetLastError() 
.... 

Как мне это "переварить" что бы моя прогарма сново заработала? Я не совсем понимаю что изменилось в новом билде MQL.

Неужели импортируемые функции не могут иметь одинаковое имя со встроеными? Тогда как жить дальше? 

 
7134956:

Как мне это "переварить" что бы моя прогарма сново заработала? Я не совсем понимаю что изменилось в новом билде MQL.

добавьте просто параметр внутрь

#import "Kernel32.dll"
uint GetLastError(int);
#import
 
sergeev:

добавьте просто параметр внутрь

Спасибо! Кажется помогло. Но как то костыльно передавать параметр который лишний.
 
будем считать это фичей или автобагом.
 
sergeev:
будем считать это фичей или автобагом.

Можно вынести и обернуть в отдельную библиотеку, переименовав.

Можно еще попробовать попросить именованные пространства, но наверное бесполезно.

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