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

 
Urain:

Самым простым решением для MQ было бы дать в качестве параметров функции

массивы данных вместо переменных, которые существуют как параметры сейчас. Решение конечно однобокое тк всё равно не будет возможности передавать данные между советниками, но всё же это лучше чем ничего.

Еще лучше было бы, если было бы что-то такое

void SendData(const int handle,const long &lparam[],const double &dparam[],const string &sparam[])
void GetData(const int handle,const long &lparam[],const double &dparam[],const string &sparam[])

Чтобы можно было отправлять конкретному получателю и получать от конкретного отправителя. А не просто отправлять для какого-то чарта. А handle сделать общедоступными. Ну, как-то так.

 

Есть такая задача: из советника нужно убирать и восстанавливать окно индикатора. Но расчитаные данные остаются постоянными.

Нарпашивает простое решение создать идикатор для расчёта данных (назовём его "Calculate") и индикатор для показа данных в отдельном окне назовём его "Plot". Из индикатора "Plot" вызывает через iCustom("Calculate"), но предварительно советник тоже вызывает через iCustom("Calculate"). Вызываются они с одинаковыми параметрами. Где то я встречал упоминание что два индикатора с одними параметрами на одном чарте не создаются, а лишь создаётся дополнительный хендл который ссылается на основной хендл уже запущеннго процесса индикатора.

отсюда вопрос: после удаления из советника "Plot" и добавления снова, будет ли снова рассчитываться "Calculate" запускаемый в "Plot" или же он просто подхватит расчитанные данные индикатора "Calculate" запущенного в советнике?

 
Urain:

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

Справочник MQL5 / Технические индикаторы / Функции для работы с техническими индикаторами:

"Все функции типа iMA, iAC, iMACD, iIchimoku и т.п., создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора. Если копия индикатора с этими параметрами уже существует, то новая копия не создается, а увеличивается счетчик ссылок на данную копию.

Эти функции возвращают хэндл соответствующей копии индикатора. Используя этот хэндл в дальнейшем можно получать данные, рассчитанные соответствующим индикатором..."

"Примечание. Многократное обращение к функции индикатора с одними и теми же параметрами в пределах одной mql5-программы не приводит к многократному увеличению счетчика ссылок, счетчик будет увеличен всего один раз на 1. ..." 

 
Yedelkin:

Справочник MQL5 / Технические индикаторы / Функции для работы с техническими индикаторами:

...

"Примечание. Многократное обращение к функции индикатора с одними и теми же параметрами в пределах одной mql5-программы не приводит к многократному увеличению счетчика ссылок, счетчик будет увеличен всего один раз на 1. ..."

Да, именно это. Спасибо за подсказку.

Мне не очень понятна как раз вот эта строка. Можно ли считать индикатор запущенный в советнике одной программой, или же подразумевается что это две программы?

Если первое допущение тогда всё ОК. Но вот если компилятор будет рассматривать их как разные программы тогда проблема.

 
Urain:

Можно ли считать индикатор запущенный в советнике одной программой, или же подразумевается что это две программы?

1. В Справочнике говорится: "Все функции типа iMA, iAC, iMACD, iIchimoku и т.п., создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора".

Я это читаю так (применительно к заданному вопросу): "Все функции типа iMA, iAC, iMACD, iIchimoku и т.п. вызываются из конкретной mql5-программы и создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора". Тем самым, обиходное выражение "советник E  запускает индикатор I " означает, что советник Е обращается к функции индикатора I, в результате чего в глобальном кеше клиентского терминала создаётся копия соответствующего индикатора, а советник Е получает хендл этой копии.

2.  Если "советник Е обращается к функции индикатора I", то речь идёт об обращении к функции индикатора "в пределах одной mql5-программы".

 
Скачиваю 420-й билд отсюда https://www.mql5.com/ru/forum/23/page11 , а ставится на самом деле 412-й. У меня проблема или в metaquotes.net файл забыли поменять ?
Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 
Yedelkin:

1. В Справочнике говорится: "Все функции типа iMA, iAC, iMACD, iIchimoku и т.п., создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора".

Я это читаю так (применительно к заданному вопросу): "Все функции типа iMA, iAC, iMACD, iIchimoku и т.п. вызываются из конкретной mql5-программы и создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора". Тем самым, обиходное выражение "советник E  запускает индикатор I " означает, что советник Е обращается к функции индикатора I, в результате чего в глобальном кеше клиентского терминала создаётся копия соответствующего индикатора, а советник Е получает хендл этой копии.

2.  Если "советник Е обращается к функции индикатора I", то речь идёт об обращении к функции индикатора "в пределах одной mql5-программы".

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

Если так, тогда всё ОК. Прояснили ещё один вопрос.

 
a483483:
Скачиваю 420-й билд отсюда https://www.mql5.com/ru/forum/23/page11 , а ставится на самом деле 412-й. У меня проблема или в metaquotes.net файл забыли поменять ?

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

ЗЫ просто оставьте запущенным терминал и занимайтесь своими делами, через некоторое время вы увидите в терминале сообщение что скачана такая то версия и просьба перезапустить терминал.

 

Добрый день!

После обновления на 420 релиз начал тестировать своего советника и заметил что он почему то начал "сливать". Проанализировал сделки и заметил, что стоп лосс срабатывает по несуществующим ценам. Например, по паре EURUSD установлен стоп лосс на уровне 1.06520, он срабатывает, хотя максимальная цена на этом баре 1.05920. Смотрю дальше и вижу что таких сделок очень много. По такому же принципу (по несуществующим ценам) срабатывает и тейк профит - дельта та же - 600 пунктов. В тестере на графике стрелки вверх и вниз  "висят" в воздухе, далеко от баров.

Скриншот прилагаю.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
Файлы:
eurusd.jpg  235 kb
 
Kairoser:

Добрый день!

После обновления на 420 релиз начал тестировать своего советника и заметил что он почему то начал "сливать". Проанализировал сделки и заметил, что стоп лосс срабатывает по несуществующим ценам. Например, по паре EURUSD установлен стоп лосс на уровне 1.06520, он срабатывает, хотя максимальная цена на этом баре 1.05920. Смотрю дальше и вижу что таких сделок очень много. По такому же принципу (по несуществующим ценам) срабатывает и тейк профит - дельта та же - 600 пунктов. В тестере на графике стрелки вверх и вниз  "висят" в воздухе, далеко от баров.

Скриншот прилагаю.

Попробуйте протестировать свой советник на сервере MQ. У Альпари может сохраняться старая проблема с некорректностью исторических данных.
Причина обращения: