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

 
komposter:

Обязательно, именно на всех.

Спасибо за наводку. Я что-то совсем забыл про OnTimer(). Сделал через него и доволен )
 
Rosh:
Сколько было доступно, столько и получили. Так и понимать. Проверьте доступную глубину истории. Перед запросом данных необходимо убедиться, что они есть. Какой у Вас билд? недавно правили ошибку с копированием месячных таймфреймов, возможно это она.
В каком билде должно быть исправление? В 489 баг есть.
 
marketeer:
Значит плохо проверяли, или советник НЕ мультивалютный, а просто может работать на разных символах. Доводы простые - знание того, что тики приходят на разные символы в разное время. Соответственно, если советник стоит в OnTick EURUSD (например), а проверяет индюк или даже просто тиковые изменения GBPUSD вместо EURUSD, то результат будет разным. В частности, сформированный бар на EURUSD может случиться до формирования бара с тем же временем на GBPUSD. Будете торговать GBPUSD дважды по одному и тому же бару: прежний бар GBPUSD все еще будет считаться новым (нулевым). Про мультивалютные индикаторы вообще все очевидно. Учите матчасть.

какая мат часть млин, тик пришел на 1 паре входим, а если по второй тик запоздал и х...

с ним т.к. нам цена нужна в момент появления нового бара а тики отлавливать

с целью появления нового бара на всех символах роли не сыграет, но здесь же от

стратегии зависит, если вы не скальпер

 

Хотелось бы еще раз поинтересоваться у команды MQ, планируется ли довести до рабочего состояния функцию iCustom().

В настоящее время авторы экспертов не могут предложить клиентам универсальное решение с использованием iCustom(),

при котором клиент мог бы сам задавать имя, используемого экспертом внешнего индикатора.

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

Также существует проблема обязательного явного указания значения содержимого ячеек индикаторного буфера.

Если ячейке индикаторного буфера в тексте индикатора не присвоить явно какое-либо значение (пустое или непустое), то указанные ячейки функция iCustom() в эксперте может заполнять

произвольным мусором. Думаю, что такая работа функции не может считаться корректной.

 
MoneyJinn:

Хотелось бы еще раз поинтересоваться у команды MQ, планируется ли довести до рабочего состояния функцию iCustom().

В настоящее время авторы экспертов не могут предложить клиентам универсальное решение с использованием iCustom(),

при котором клиент мог бы сам задавать имя, используемого экспертом внешнего индикатора.

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

В iCustom можно передавать динамическое имя вызываемого индикатора, но набор параметров у каждого кастомного индикатора свой.

К сожалению, универсального решения вопроса "как не зная что и с какими параметрами будет вызываться, безопасно реализовать вызов, не трогая код?" мы не знаем.

Если я правильно понял, Вы хотите сделать плагинную систему, когда сторонний пользователь указывает в настройках эксперта любое имя индикатора с параметрами (например, "MyIndicator(10,20,50,100)"). Для такого случая с жестким форматом имени Вы можете самостоятельно распарсить строку, сформировать блок параметров и реализовать в виде оберточного класса динамический вызов iCustom с разным набором параметров. То есть, внутри будет скрыто несколько вариантов вызова iCustom с разными наборами/количеством параметров.


Также существует проблема обязательного явного указания значения содержимого ячеек индикаторного буфера.

Если ячейке индикаторного буфера в тексте индикатора не присвоить явно какое-либо значение (пустое или непустое), то указанные ячейки функция iCustom() в эксперте может заполнять

произвольным мусором. Думаю, что такая работа функции не может считаться корректной.

Это уже наглость и откровенная ленивость разработчика не заполнять буфер, которые ему дали в полное распоряжение.

Подсистема исполнения не знает как Вы используете индикаторный буфер и не имеет права заполнять его какими-то либо значениями, особенно в моменты массовых перевыделений (подкачка или апдейты чартов). Индикатор в обязательном порядке уведомляется обо всех случаях необходимости пересчета через функцию OnCalculate(...,const int prev_calculated,...) и параметр prev_calculated.

 
Renat:

В iCustom можно передавать динамическое имя вызываемого индикатора, но набор параметров у каждого кастомного индикатора свой.

К сожалению, универсального решения вопроса "как не зная что и с какими параметрами будет вызываться, безопасно реализовать вызов, не трогая код?" мы не знаем.

Если я правильно понял, Вы хотите сделать плагинную систему, когда сторонний пользователь указывает в настройках эксперта любое имя индикатора с параметрами (например, "MyIndicator(10,20,50,100)"). Для такого случая с жестким форматом имени Вы можете самостоятельно распарсить строку, сформировать блок параметров и реализовать в виде оберточного класса динамический вызов iCustom с разным набором параметров. То есть, внутри будет скрыто несколько вариантов вызова iCustom с разными наборами/количеством параметров.

Под проблемной необходимостью внесения изменений в код имелось ввиду требование явно указывать имя индикатора при тестировании

в формате #property tester_indicator "Name.ex5", а не разное количество параметров индикатора.

Индикаторы можно использовать и с параметрами по умолчанию, выбирая лишь номер индикаторного буфера с соответствующим сигналом. 

Renat:

Это уже наглость и откровенная ленивость разработчика не заполнять буфер, которые ему дали в полное распоряжение.

Подсистема исполнения не знает как Вы используете индикаторный буфер и не имеет права заполнять его какими-то либо значениями, особенно в моменты массовых перевыделений (подкачка или апдейты чартов). Индикатор в обязательном порядке уведомляется обо всех случаях необходимости пересчета через функцию OnCalculate(...,const int prev_calculated,...) и параметр prev_calculated.

 Неужели сложно в iCustom() неиспользуемым ячейкам присваивать Empty_Value, а не забивать их мусором из стека?

https://www.mql5.com/ru/forum/1111/72233#comment_72233 

Заметим, что реальное значение ячеек буфера остается равным Empty. Фальсификацией занимается именно iCustom(). 

 
MoneyJinn:

Под проблемной необходимостью внесения изменений в код имелось ввиду требование явно указывать имя индикатора при тестировании

в формате #property tester_indicator "Name.ex5", а не разное количество параметров индикатора.

Вопрос будем дальше решать - там есть свои нюансы.

Неужели сложно в iCustom() неиспользуемым ячейкам присваивать Empty_Value, а не забивать их мусором из стека?

https://www.mql5.com/ru/forum/1111/72233#comment_72233 

Этого делать нельзя. Прочтите мой ответ еще раз, пожалуйста.
 
Renat:

Этого делать нельзя. Прочтите мой ответ еще раз, пожалуйста.

Причина, почему iCustom() присваивает произвольные значения тем ячейкам буфера, которые в реальности ничем не заполнялись, мне не ясна, как и то, почему этого никак нельзя избежать.

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

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

Если iCustom() и так присваивает ячейкам буфера произвольные, не соответствующие реальным значения,

то почему бы не ему не присваивать этим ячейкам значение, равное Empty_Value, как это реализовано в МТ4. 

Тогда по крайней мере был бы понятен их статус. 

 
не спорю
kPeriod2 = kPeriod1 * nextPriod;

Warning : possible loss of data due to type conversion
а так
kPeriod2 = round(kPeriod1 * nextPriod - 0.5);

Warning : possible loss of data due to type conversion 
есть округление все равно пишет, так и надо ?
 
Lodar:
не спорю
а так
есть округление все равно пишет, так и надо ?


Посмотрите, все ли переменные у Вас одного типа. А потом - раздел "Приведение типов". Предупреждение возникает из-за неявного приведения типов, которое выявляется на этапе компиляции.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
Причина обращения: