Задам "глупый вопрос", надеясь получить "умный ответ" :)Вот MQL4 достаточно хорошо изучил, там с индикаторами всё понятно.А в MQL5 в параметрах индикатора где собственно ИНДЕКС ИНДИКАТОРА!?
Имеете в виду индекс буфера индикатора? Если да, то он указывается при вызове CopyBuffer(). i-функции (такие как iMA, iMACD и т. д.) в MQL5 создают только хендл (идентификатор) индикатора, но не возвращают значение буфера, как в MQL4. Чтобы получить значение индикаторного буфера на заданном баре, нужно использовать функцию CopyBuffer(). Ей в качестве первого параметра передается хендл индикатора. А вот индекс буфера указывается вторым параметром.
Имеете в виду индекс буфера индикатора? Если да, то он указывается при вызове CopyBuffer(). i-функции (такие как iMA, iMACD и т. д.) в MQL5 создают только хендл (идентификатор) индикатора, но не возвращают значение буфера, как в MQL4. Чтобы получить значение индикаторного буфера на заданном баре, нужно использовать функцию CopyBuffer(). Ей в качестве первого параметра передается хендл индикатора. А вот индекс буфера указывается вторым параметром.
Очень четкий, исчерпывающий ответ. Удивляюсь, почему после таких объяснений новички начинают заламывать руки и плакать, что MQL5 ужасно сложный по сравнению с 4-кой. Наоборот, процесс получения данных с индикатора унифицировали.
Очень четкий, исчерпывающий ответ. Удивляюсь, почему после таких объяснений новички начинают заламывать руки и плакать, что MQL5 ужасно сложный по сравнению с 4-кой. Наоборот, процесс получения данных с индикатора унифицировали.
"красные штаны - три раза КУ" :-)
интерфейс будет унифицирован (на самом деле НЕ ВПОЛНЕ и точно не сделают), когда во второй форме OnCalculate вместо const double &price[] появится хендл другого индикатора.
И будет явная возможность рассчёта "индикатора по индикатору"
потому-что сейчас "рассчёт на основе массива" это дико устаревшее.
и использование хендлов ничуть не делают код короче и алгоритмы яснее.
Очень четкий, исчерпывающий ответ. Удивляюсь, почему после таких объяснений новички начинают заламывать руки и плакать, что MQL5 ужасно сложный по сравнению с 4-кой. Наоборот, процесс получения данных с индикатора унифицировали.
Я имел ввиду, что например у меня 1-часовой таймфрейм, сейчаc допустим 12:00, а мне нужно показания индикатора, например MACD, за 11:00.Чтоб советник понимал, что MACD растёт.
Я имел ввиду, что например у меня 1-часовой таймфрейм, сейчаc допустим 12:00, а мне нужно показания индикатора, например MACD, за 11:00.Чтоб советник понимал, что MACD растёт.
Сравнить показания индикатора на соседних барах. Способ получения показаний в MQL4 и в MQL5 отличается, а вот само сравнение - нет, все одинаково. Сравнение производится по индексам баров для соответствующего буфера. В функции CopyBuffer() это 3-ий и 4-ый аргументы. Причем варианты есть на любой вкус: по индексу бара и количеству баров, по начальному времени и количеству баров, по начальному и конечному времени. То есть в MQL5, при соответствующем подходе к задаче, можно вообще уйти от индексов баров, оперируя исключительно временем, как Вы и указали.
Всё равно что-то не въеду :)А Вас не затруднит пример здесь написать?Например для MA или MACD?Буду Вам Мега благодарен!
//В заголовке советника объявляете хэндл и буфера индикатора. int handleMA;//Объвляем хэндл индикатора которому позднее назначим параметры. double bufferMA[];//Буфер в который будет копироваться значения индикатора. int OnInit() { handleMA = iMA(_Symbol,PERIOD_CURRENT,ma_period,ma_shift,MODE_SMA,PRICE_CLOSE);//Тут мы к хэндлу привязываем нужный нам индикатор с параметрами. Хэндл является так же уникальным номером индикатора с нужными нам параметрами. Если нужны индикаторы с разными параметрами, для каждого свой хэндл делаете. ArraySetAsSeries(bufferMA,true);//Опционально. Если необходимо чтобы данные последней свечи были с конца, с нулевого индекса, тогда этот параметр пишете. } void OnTick() { if(CopyBuffer(handleMA,0,0,5,bufferMA)<0)//Функция CopyBuffer копирует данные индикатор в указанный массив. Первый аргумент это хэндл индикатора, второй это номер буфера индикатора, третий это с какого бара начать, четвертый это сколько баров копировать, и в какой массив копировать. В моем примере я копирую с 0 буфера, с начала, 5 последний свечей данных в массив bufferMA; { Print("Ошибка копирования буффера МА"); return; } Print(bufferMA[0]);//Вывожу данные МА последней свечи Print(bufferMA[4];//Вывожу данные МА 5-й свечи с конца if(close[0]<bufferMA[0]&&close[1]>bufferMA[1])//Если последняя свеча закрылась ниже МА, а предыдущая свеча закрылась выше МА тогда { trade.Buy(...);//Открывае позицию на BUY } }
На MQL4 вы считывали данные на прямую с индикатора, без создания хэндла и объявления параметров. Тут же используется функция CopyBuffer которая копирует последние данные в массив, для удобства обращения к нему.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования