Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 990
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос: Почему хендэл установленный на один период не передает значения в CopyBuffer на других таймфремах. И что сделать?
Если бы проблема была в сдвиге элемента массива буфера при другом таймфрейме я бы решил вопрос. А так непонятно вообще.
Вопрос: Почему хендэл установленный на один период не передает значения в CopyBuffer на других таймфремах. И что сделать?
Если бы проблема была в сдвиге элемента массива буфера при другом таймфрейме я бы решил вопрос. А так непонятно вообще.
Если хэндл создан успешно, то создан он с теми параметрами, которые вы ему передали при создании. И уж отдавать данные индикатора он будет на любом таймфрейме. Вот только данные он будет отдавать того таймфрейма, который ему задали при создании. И чтобы их корректно отобразить на рабочем таймфрейме, нужно преобразовать полученные данные от хэндла индикатора к тому тф, на котором работает ваш индикатор.
Как раз это проверял. Но ПРОБЛЕМА в том, что установив хендэл на один постоянный период, в
CopyBuffer значение на других таймфреймах НЕ ПЕРЕДАЕТСЯ. На установленном хендлэ периоде значение было, а на меньших таймфремах 0.0 (ноль). Подвигал в поисках по буферу... ноль. Почему не передается в CopyBuffer ?
У меня копируется...
другой вопрос что копируется :) Вероятней всего Вы запрашиваете больше число баров для копирования, чем есть на том TF, принтаните
Если хэндл создан успешно, то создан он с теми параметрами, которые вы ему передали при создании. И уж отдавать данные индикатора он будет на любом таймфрейме. Вот только данные он будет отдавать того таймфрейма, который ему задали при создании. И чтобы их корректно отобразить на рабочем таймфрейме, нужно преобразовать полученные данные от хэндла индикатора к тому тф, на котором работает ваш индикатор.
Верно ли я провел эксперемент.?
Я ж вам дал направление...
Изучайте:
У меня копируется...
другой вопрос что копируется :) Вероятней всего Вы запрашиваете больше число баров для копирования, чем есть на том TF, принтаните
kopeyka2:
Верно ли я провел эксперемент.?
...
... Даже при переходе на другой таймфрейм значения должны быть от установленного D1. А вот как раз этого я не наблюдаю. Или что-то не так? Что-то ещё надо дописать при установке хэндэла? Поскольку нет передачи в буфер.
Проще говоря эксперемент руб с CopyByffer что в него класть, то и должно быть. Но там нет.
Вы не проверили доступность данных, но пытаетесь копировать. Гляньте в код выше - там в секундном таймере раз в полторы минуты идёт обращение к неродному таймфрейму - для постоянного поддержания данных в актуальном состоянии. И в коде первым делом проверяется доступность запрашиваемых данных. Если они ещё не готовы, то возврат нуля для следующего тика и полного расчёта индикатора. А вот когда уже все данные получены и рассчитаны, и отображены, то в конце возвращается количество рассчитанных данных - чтобы на следующем тике не делать полный перерасчёт.
Спасибо. Все прочитал. Буду искать.
Чего искать-то? Выше полностью рабочий код. Можете препарировать как хотите. Вашу ошибку я указал - вы не проверяете доступность данных.
Даже вот в этой строчке:
int lm=IBarShift(NULL,PERIOD_D1, iTime(NULL, PERIOD_CURRENT, limit));
где проверка того, что вернул iTime() ? Нету проверки. Но вы неизвестный результат сразу пихаете в iBarShift(). А уверены, что даёте функции то, что ожидаете?
Если хэндл создан успешно, то создан он с теми параметрами, которые вы ему передали при создании. И уж отдавать данные индикатора он будет на любом таймфрейме. Вот только данные он будет отдавать того таймфрейма, который ему задали при создании. И чтобы их корректно отобразить на рабочем таймфрейме, нужно преобразовать полученные данные от хэндла индикатора к тому тф, на котором работает ваш индикатор.
Именно я так и думал. Вопрос непонимания в словах "параметры". И я начал смотреть ВСЕ переменные которые участвуют в хэндл --> CopyBuffer
1) Мой вопрос с самого начала был в том, что бы переключив ЭКРАН таймфрейна сохранить данные хэндла. Ну как это в МТ4.
А на деле получается так:
ВСЕГДА и на ВСЕХ таймфреймах дает одно и тоже значение 10
Ничего не получив тут я двинулся дальше.
2) Цитирую: "Получает в массив buffer данные указанного буфера указанного индикатора в указанном количестве".
То есть, установив count от руки мы должны иметь ИНТЕРВАЛ со значениями. И они есть! НО!!!!!! Только когда период хэндла соответствует
таймфрейму на экране монитора PERIOD_H1. Все значения передаются четко. Но перейдя на другой таймфрейм на экране данных НЕТ.
Они НЕ ПЕРЕДАЮТСЯ НИКАК!!!! А мой вопрос был именно в этом. И количество баров для count тут не так важно, если их там НЕТ!!!
Я посмотрел предложенный индикатор MTF_LRMA.mq5 Но в нем тоже самое . Переключаемся на другой таймфрейм на экране и данные идут по таймфрейму экрана. А мне надо по хэндэлу.
Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1.
Пока что все примеры были по корректировке count буфера CopyBuffer. НО массив то ПУСТОЙ