Должен быть такой индикатор "Custom Moving Average" в папке индикаторов, чтобы его можно было вызывать. В примере показано только обращение к нему.
Должен быть такой индикатор "Custom Moving Average" в папке индикаторов, чтобы его можно было вызывать. В примере показано только обращение к нему.
Спасибо за наводку, я нашел причину. Индикатор создать догадался, но вызывающий и вызываемый индикатор находились в папке. Работает, если указать "test\Custom Moving Average"
Еще один вопрос.
Есть два индикатора, они находятся в одной папке. Второй индикатор вызвается первым. Если я переименовываю папку, связка перестает работать. Как преодолеть такую ситуацию? Вижу такие способы решения:
1) Указать папку в параметрах. Этот вариант мне кажется неудобным.
2) Перекомпиляция. Еще хуже.
3) Узнать, в какой папке находится вызывающий индикатор, и подставить эту папку в iCustom. Можно ли осуществить это средствами mql5?
4) Каким-то способом заставить использовать по умолчанию индикаторы из той же папки, где находится вызывающий индикатор. Существует ли такая возможность? Этот вариант мне кажется идеальным.
По варианту 4 попробуйте ".\Custom Moving Average". Я сам не проверял.
4) Каким-то способом заставить использовать по умолчанию индикаторы из той же папки, где находится вызывающий индикатор. Существует ли такая возможность? Этот вариант мне кажется идеальным.
https://www.mql5.com/ru/docs/constants/environment_state/mql5_programm_info
Для функции MQL5InfoString()
Идентификатор |
Описание |
Тип свойства |
MQL5_PROGRAM_NAME |
Имя запущенной mql5-программы |
string |
MQL5_PROGRAM_PATH |
Путь для данной запущенной программы |
string |
- www.mql5.com
MetaDriver:
Спасибо. Это, конечно, не четвертый вариант, а третий, и с ним придется немного повозиться, но это уже дело техники.
Первые два варианта можно смело забыть. Буду рад услышать предложения по четвертому.
MetaDriver:
Спасибо. Это, конечно, не четвертый вариант, а третий, и с ним придется немного повозиться, но это уже дело техники.
Первые два варианта можно смело забыть. Буду рад услышать предложения по четвертому.
https://www.mql5.com/ru/docs/constants/namedconstants/compilemacros
Предопределенные макроподстановки
Для облегчения отладки и получения информации о работе mql5-программы введены специальные константы-макросы, значения которых устанавливается в момент компиляции. Самый простой путь использования этих констант – вывод значений с помощью функции Print(), как показано в примере.
Константа |
Описание |
__DATE__ |
Дата компиляции файла без времени (часы, минуты и секунды равны 0) |
__DATETIME__ |
Дата и время компиляции файла |
__LINE__ |
Номер строки в исходном коде, на которой расположен данный макрос |
__FILE__ |
Имя текущего компилируемого файла |
__PATH__ |
Абсолютный путь к текущему компилируемому файлу |
__FUNCTION__ |
Имя функции, в теле которой расположен макрос |
__FUNCSIG__ |
Сигнатура функции, в теле которой расположен макрос. Вывод в лог полного описания функции с типами параметров может пригодиться при идентификации перегруженных функций |
__MQ5BUILD__ |
Номер билда компилятора |
--
Это лучше.
Использование:
MyInd_handle=iCustom(MySymbol,MyTimeFrame, __PATH__+"/IndicatorName.ex5", param1, param2, param3, , , PriceTypeOrInputHandle);// Нащёт слеша перед IndicatorName точно не уверен, попробуй и так и без слеша и \\ тоже попробуй.
- www.mql5.com
Это лучше.
MyInd_handle=iCustom(MySymbol,MyTimeFrame, __PATH__+"/IndicatorName.ex5", param1, param2, param3, , , PriceTypeOrInputHandle);
// Нащёт слеша перед IndicatorName точно не уверен, попробуй и так и без слеша и \\ тоже попробуй.Это хуже, и слеши вряд ли смогут помочь.
Во-первых, __PATH__ не дает удобства, все равно потребуется дополнительный код для разбора строки:
__PATH__ | C:\Users\user\AppData\Roaming\MetaQuotes\Terminal\...\MQL5\Indicators\test\iFirst.mq5 |
MQL5InfoString(MQL5_PROGRAM_PATH) | C:\Users\user\AppData\Roaming\MetaQuotes\Terminal\...\MQL5\Indicators\test\iFirst.ex5 |
Если кому интересно, выкладываю рабочий код:
const string pathCut = "\\MQL5\\Indicators\\"; //обрезается все, что левее этой строки string path = MQL5InfoString(MQL5_PROGRAM_PATH); //путь к вызывающему индикатору //отрезаем физический путь (левая часть) int i = StringFind( path, pathCut ); if( i+1 ) path = StringSubstr( path, i+StringLen(pathCut) ); //отрезаем имя файла вызывающего индикатора (правая часть) for( i=StringLen(path)-1; i>=0; i-- ) if( StringGetCharacter(path,i)=='\\' ) break; path = StringSubstr( path, 0, i+1 ); ResetLastError(); MA_handle=iCustom(NULL,0,path+"Custom Moving Average", MA_Period, MA_Shift, MA_Method, PRICE_CLOSE );Буду рад услышать о более простых способах решения.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Почему не работает пример из документации по iCustom?
https://www.mql5.com/ru/docs/indicators/icustom
Пример из документации компилируется без ошибок.При запуске индикатора появляется сообщение
cannot load custom indicator 'Custom Moving Average' [4802]
и, соответственно, появляются ошибки при выполнении CopyBuffer
Почему не загружается индикатор?