Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 794
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это пример как в индикаторе сделать. А вопрос был про советник.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Northwest, 2019.03.28 03:54
Всем доброго времени суток!
Потерял два часа но так ни чего и не нашёл.
Подскажите пожалуйста как в mq4, в советнике,грамотно
построить один индикатор на данных другого используя встроенные функции
да ещё что бы всё это отображалось при тестах в подокне как положено,
например MA на данных RSI ?
Но, в общем то почти правильно. Легче написать индикатор и из него брать значения, чем изгаляться заполняя массив для iMAOnArray. Только вот зачем два цикла?
Только вот зачем два цикла?
чтобы не делать проверку на первый запуск индикатора или подгрузку исторических данных
иногда код компактнее и производительнее использовать проверку условия в while/ for чем делать дополнительный if и потом после выполнения условия использовать операторы цикла
если "воткнуть" код расчета iMAOnArray() в цикл заполнения массива с данными RSI , то будут некорректные расчеты еще незаполненных эл-в массива rsiBuffer[]
заметьте, что я использовал в примере расчет iMAOnArray() по всем элементам массива (total = 0), я этот вопрос несколько месяцев назад изучал, но увы нет конкретной инфы как использовать правильно iMAOnArray() и в нем параметр https://docs.mql4.com/ru/indicators/imaonarray
int total, // количество элементов
топик с обсуждением iMAOnArray() https://www.mql5.com/ru/forum/303372/page2#comment_10617854
Это пример как в индикаторе сделать. А вопрос был про советник.
Вы уверенны, что вопрос именно так и стоял?
да ещё что бы всё это отображалось при тестах в подокне как положено,
)))))
чтобы не делать проверку на первый запуск индикатора или подгрузку исторических данных
иногда код компактнее и производительнее использовать проверку условия в while/ for чем делать дополнительный if и потом после выполнения условия использовать операторы цикла
Вы уверенны, что вопрос именно так и стоял?
)))))
)))) уже не первый раз попадаюсь на некоторой невнимательности. Про индикатор даже не дочитал.
А вот про дополнительный if
это можно записать как
Не пользуете такие записи?Igor Makanu:
...я этот вопрос несколько месяцев назад изучал, но увы нет конкретной инфы как использовать правильно iMAOnArray() и в нем параметр https://docs.mql4.com/ru/indicators/imaonarray
int total, // количество элементов
Количество элементов важно когда нужно не простое среднее. Я на вскидку не помню какие виды МА используют в своих расчётах предыдущее своё значение. Вот в этом случае и будет влиять на результат количество элементов. А в общем-то в mql5 это решается в пол-тычка и мне это уже не интересно.
Не пользуете такие записи?
пользуюсь, но обычно пишу свои коды "в два прохода" - при написании с чистого листа использую понятные для "фонетического разбора" (т..е по сути для чтения вслух) конструкции, с условиями if() проще это все произнести )))
потом, да могу немного "причесать код" и сделать подобные конституции, но обычно у себя в библиотеке готовых примеров (кодов) такое использую
ЗЫ: где то встречал инфу по повышению производительности программ на C#, точно знаю что были рекомендации стараться избегать использование оператора foreach() и вот этого оператора ? : - типа оператор if() более производительный, но думаю это не критично - как удобно так и пользьюсь
Количество элементов важно когда нужно не простое среднее. Я на вскидку не помню какие аидв МА используют в своих расчётах предыдущее своё значение. Вот в этом случае и будет влиять на результат количество элементов. А в общем-то в mql5 это решается в пол-тычка и мне это уже не интересно.
там глубже проблема, я искал поиском и по этому форуму и по англ. форуму, было обсуждеие и примеры использования, от параметра total = 0 или total !=0 бывают отличаются расчеты iMAOnArray() - при обсуждении с Игорем (ссылка выше), я для себя принял решение iMAOnArray() использовать только с параметром total = 0 - в старых обсуждениях было такое же решение
там глубже проблема, я искал поиском и по этому форуму и по англ. форуму, было обсуждеие и примеры использования, от параметра total = 0 или total !=0 бывают отличаются расчеты iMAOnArray() - при обсуждении с Игорем (ссылка выше), я для себя принял решение iMAOnArray() использовать только с параметром total = 0 - в старых обсуждениях было такое же решение
Ну правильно. Если брать не все элементы массива и пытаться получить даже ЕМА без ошибки будет сложно.
Экспоненциальное скользящее среднее (Exponential Moving Average, EMA)
Экспоненциально сглаженное скользящее среднее определяется путем добавления к предыдущему значению скользящего среднего определенной доли текущей цены закрытия. При использовании экспоненциальных скользящих средних больший вес имеют последние цены закрытия. Р-процентное экспоненциальное скользящее среднее будет иметь вид:
EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))
где:
CLOSE (i) — цена закрытия текущего периода;
EMA (i - 1) — значение скользящего среднего предыдущего периода;
P — доля использования значения цен.
Следовательно, если считать ЕМА периода 30 из массива 30 элементов, то получишь вместо ЕМА простое МА.
Ну правильно. Если брать не все элементы массива и пытаться получить даже ЕМА без ошибки будет сложно.
Следовательно, если считать ЕМА периода 30 из массива 30 элементов, то получишь вместо ЕМА простое МА.
я проверял iMAOnArray() - результаты не предсказуемые, иногда можно 2 * Период МА использовать, иногда нужно больше, если использовать total = 0 , то для расчета один раз еще можно использовать, а если очень часто использовать, то будут подвисания терминала
ну и iMAOnArray() я редко пользуюсь
if (response == 0) {
Print("Что-то пошло не так");
// потом уже добавите диагностику из WinAPI
return false;
}
и перед нормальным возвратом тоже напечатайте результат
Print(" всё хорошо, результат:" toStr);
return toStr;
и весь код пускать в таймере, например раз в минуту. Тренироваться на ресурсе который точно не забанит и отдаёт всё время разное, но предсказуемое, чтобы можно было проверить.
----
телепатически - если проблема действительно имеет быть,
то или инициализация неправильно проведена (не помню надо-ли WinSOCK инициализовать для InternetOpenW или нет)
или какой-то ресурс не освобождается.
все добавил! Ничего не отображается в Print!!
Как сделать вывод переменной в окно данных без отображения на графике?
Почему-то не могу в документации найти.
Как сделать вывод переменной в окно данных без отображения на графике?
Почему-то не могу в документации найти.