Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 794

 
Igor Makanu:

Это пример как в индикаторе сделать. А вопрос был про советник.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Northwest, 2019.03.28 03:54

Всем доброго времени суток!

Потерял два часа но так ни чего и не нашёл.

Подскажите пожалуйста как в mq4, в советнике,грамотно

построить один индикатор на данных другого используя встроенные функции

да ещё что бы  всё это отображалось при тестах в подокне как положено,

например MA на данных RSI ?


Но, в общем то почти правильно. Легче написать индикатор и из него брать значения, чем изгаляться заполняя массив для iMAOnArray. Только вот зачем два цикла?

 
Alexey Viktorov:

Только вот зачем два цикла?

чтобы не делать проверку на первый запуск индикатора или подгрузку исторических данных

иногда код компактнее  и производительнее использовать проверку условия в 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




Alexey Viktorov:

Это пример как в индикаторе сделать. А вопрос был про советник.

Вы уверенны, что вопрос именно так и стоял?

Northwest:

да ещё что бы  всё это отображалось при тестах в подокне как положено,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

чтобы не делать проверку на первый запуск индикатора или подгрузку исторических данных

иногда код компактнее  и производительнее использовать проверку условия в while/ for чем делать дополнительный if и потом после выполнения условия использовать операторы цикла


Вы уверенны, что вопрос именно так и стоял?

)))))

)))) уже не первый раз попадаюсь на некоторой невнимательности. Про индикатор даже не дочитал.

А вот про дополнительный if

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

это можно записать как

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
Не пользуете такие записи?
 

Igor Makanu:

...я этот вопрос несколько месяцев назад изучал, но увы нет конкретной инфы как использовать правильно iMAOnArray() и в нем параметр https://docs.mql4.com/ru/indicators/imaonarray

int          total,            // количество элементов

Количество элементов важно когда нужно не простое среднее. Я на вскидку не помню какие виды МА используют в своих расчётах предыдущее своё значение. Вот в этом случае и будет влиять на результат количество элементов. А в общем-то в mql5 это решается в пол-тычка и мне это уже не интересно.

 
Alexey Viktorov:
Не пользуете такие записи?

пользуюсь, но обычно пишу свои коды "в два прохода" - при написании с чистого листа использую понятные для "фонетического разбора" (т..е по сути для чтения вслух) конструкции, с условиями if() проще это все произнести )))

потом, да могу немного "причесать код" и сделать подобные конституции, но обычно у себя в библиотеке готовых примеров (кодов) такое использую

ЗЫ: где то встречал инфу по повышению производительности программ на C#, точно знаю что были рекомендации стараться избегать использование оператора foreach()  и вот этого оператора ? : - типа оператор if() более производительный, но думаю это не критично - как удобно так и пользьюсь 


Alexey Viktorov:

Количество элементов важно когда нужно не простое среднее. Я на вскидку не помню какие аидв МА используют в своих расчётах предыдущее своё значение. Вот в этом случае и будет влиять на результат количество элементов. А в общем-то в mql5 это решается в пол-тычка и мне это уже не интересно.

там глубже проблема, я искал поиском и по этому форуму и по англ. форуму, было обсуждеие и примеры использования, от параметра total = 0 или total !=0 бывают отличаются расчеты iMAOnArray() - при обсуждении с Игорем (ссылка выше), я для себя принял решение iMAOnArray()  использовать только с параметром total = 0 - в старых обсуждениях было такое же решение

 
Igor Makanu:

там глубже проблема, я искал поиском и по этому форуму и по англ. форуму, было обсуждеие и примеры использования, от параметра 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 элементов, то получишь вместо ЕМА простое МА.

 
Alexey Viktorov:

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

Следовательно, если считать ЕМА периода 30 из массива 30 элементов, то получишь вместо ЕМА простое МА.

я проверял iMAOnArray() - результаты не предсказуемые, иногда можно 2 * Период МА использовать, иногда нужно больше, если использовать total = 0 , то для расчета один раз еще можно использовать, а если очень часто использовать, то будут подвисания терминала

ну и iMAOnArray() я редко пользуюсь 

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

и перед нормальным возвратом тоже напечатайте результат

Print(" всё хорошо, результат:" toStr);

return toStr;

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

----
телепатически - если проблема действительно имеет быть,
то или инициализация неправильно проведена (не помню надо-ли WinSOCK инициализовать для InternetOpenW или нет)
или какой-то ресурс не освобождается.

все добавил! Ничего не отображается в Print!! 

 

Как сделать вывод переменной в окно данных без отображения на графике?

Почему-то не могу в документации найти.

 
psyman:

Как сделать вывод переменной в окно данных без отображения на графике?

Почему-то не могу в документации найти.

Задайте цвет отображения clrNONE.