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

 
Alexey Viktorov:

Ну спасибо… Я хоть увидел себя шесть лет назад… Был такой-же как вы сейчас. Не думая давал советы не впопад.

Что касается шаблона: Если в шаблоне есть индикатор, но нет советника, то загрузится шаблон без советника… А если шаблон с советником??? Вы уверены, что советник загруженный по шаблону не станет применять шаблон и тем самым зациклит и повесит терминал?

у меня не вешает - всё работает на ура!

 
SanAlex:

у меня не вешает - всё работает на ура!

Не будь таким ленивым как я. Сними видео с такими манипуляциями.:-)))

 
Vitaly Muzichenko:

Сейчас пришёл к тому, чтобы отладить конструкцию "SmoothedMAOnBuffer()" в мт4.

Что не так, вообще не понимаю

Сто раз писал - убери функцию из цикла.

Вместо вот этой фигни:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);
   for(i = 0; i < counter - a; i++) {
     // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает
      SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет
      buf_3[i] = buff[0]; ???
   }
   for(i = counter - a; i > 0; i--) {
      Array_2[i] = Array_2[i + 1];

напиши так:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);

if(SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff)==0)
   return 0;

for(i = counter - a; i > 0; i--) {
   Array_2[i] = Array_2[i + 1];

Я ж тебе  говорю - вызов этой функции - это полный цикл сглаживания данных, находящихся в массиве Array. Сглаженные данные этого массива будут на выходе лежать в массиве buff - просто далее бери из него нужные тебе уже сглаженные данные.

 
Alexey Viktorov:

Не будь таким ленивым как я. Сними видео с такими манипуляциями.:-)))

Вот жалею - что раньше в Ваш профиль не заходил. У Вас там такие замечательные коды есть. Вот этот очень понравился.https://www.mql5.com/ru/code/16396

EURGBPH1

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 
Artyom Trishkin:

Сто раз писал - убери функцию из цикла.

Вместо вот этой фигни:

напиши так:

Я ж тебе  говорю - вызов этой функции - это полный цикл сглаживания данных, находящихся в массиве Array. Сглаженные данные этого массива будут на выходе лежать в массиве buff - просто далее бери из него нужные тебе уже сглаженные данные.

Спасибо!, заработал.

SmoothedMAOnBuffer(rates_total, prev_calculated, count, period, Array_1, buf_3);

Как это работает - пока не понял, буду теперь разбираться.

 
Artyom Trishkin:

Сто раз писал - убери функцию из цикла.

Вместо вот этой фигни:

напиши так:

Я ж тебе  говорю - вызов этой функции - это полный цикл сглаживания данных, находящихся в массиве Array. Сглаженные данные этого массива будут на выходе лежать в массиве buff - просто далее бери из него нужные тебе уже сглаженные данные.

Не смог это всё применить ни в какую, потратил более 4-х часов.

При первом запуске отображает правильно, далее нет обновления - замирает, со стандартной работает нормально

   double Array_1[];
   double Array_2[];
   int i=0;
   int period = (int)MathFloor(MathSqrt(a));
   int val = (int)MathFloor(a / 1.9);
   int bars=rates_total;
   int counter = bars - prev_calculated + a + 1;
   if(counter > bars)
      counter = bars;
   ArrayResize(Array_1, counter);
    ArraySetAsSeries(Array_1, true);
   ArrayResize(Array_2, counter);
    ArraySetAsSeries(Array_2, true);

   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val) - ma_1(i, a);
  //  for(i = 0; i < counter - a; i++)
  //  buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i);
   SmoothedMAOnBuffer(rates_total, prev_calculated, prev_calculated, period, Array_1, buf_3); // Где-то здесь не правильно вписаны параметры

---

Что нужно вписать?

В МТ5 вообще отображает не понятно что.

Файлы:
test.mq4  13 kb
 
Vitaly Muzichenko:

Не смог это всё применить ни в какую, потратил более 4-х часов.

При первом запуске отображает правильно, далее нет обновления - замирает, со стандартной работает нормально

---

Что нужно вписать?

В МТ5 вообще отображает не понятно что.

Ты можешь словами сказать, что ты хочешь получить в итоге?

У тебя индикатор построен так, как нужно показывать людям как это делать нельзя :)

Рисуемые и расчётные буферы - все вперемешку. Расчётные должны быть последними в очереди - нельзя их смешивать в произвольном прядке к сожалению.

Для пятёрки не будет работать по причине, что функция ma_1() в пятёрке будет возвращать хэндл, а не значение МА

В функцию SmoothedMAOnBuffer() ты вместо начала значимых данных в массиве передаёшь prev_calculated - зачем? Туда нужно передавать как минимум 0, а как максимум - рассчитанное значение, зависимое от периода расчёта данных МА, хранящихся в Array_1 - ну хотя бы period

В блоке выбора каким цветом рисовать у тебя логическая ошибка - ты затираешь буферы - просто за скобки вынес заполнение буфера пустым значением. У тебя проверяется условие, а то, что должно делаться при истине - тупо вынесено за скобки. Т.е., выполняется всегда. Это следствие привычки расстановки скобок - когда не наглядно их расположение.

Array_1 и Array_2 - почему не расчётные буферы?

В общем - вопросов много.

У тебя значение переменной a строго задано. Зачем на каждом тике рассчитывать значение переменной val ?

Сделай два расчётных буфера для двух МАшек, рассчитываемых с периодом a и val в OnInit(). Из этих буферов и бери значения - будет работать для обеих платформ тогда.

 
Artyom Trishkin:

Ты можешь словами сказать, что ты хочешь получить в итоге?

У тебя индикатор построен так, как нужно показывать людям как это делать нельзя :)

Рисуемые и расчётные буферы - все вперемешку. Расчётные должны быть последними в очереди - нельзя их смешивать в произвольном прядке к сожалению.

Для пятёрки не будет работать по причине, что функция ma_1() в пятёрке будет возвращать хэндл, а не значение МА

В функцию SmoothedMAOnBuffer() ты вместо начала значимых данных в массиве передаёшь prev_calculated - зачем? Туда нужно передавать как минимум 0, а как максимум - рассчитанное значение, зависимое от периода расчёта данных МА, хранящихся в Array_1 - ну хотя бы period

В блоке выбора каким цветом рисовать у тебя логическая ошибка - ты затираешь буферы - просто за скобки вынес заполнение буфера пустым значением. У тебя проверяется условие, а то, что должно делаться при истине - тупо вынесено за скобки. Т.е., выполняется всегда. Это следствие привычки расстановки скобок - когда не наглядно их расположение.

Array_1 и Array_2 - почему не расчётные буферы?

В общем - вопросов много.

У тебя значение переменной a строго задано. Зачем на каждом тике рассчитывать значение переменной val ?

Сделай два расчётных буфера для двух МАшек, рассчитываемых с периодом a и val в OnInit(). Из этих буферов и бери значения - будет работать для обеих платформ тогда.

Вообще ни о чём не говорит, если-бы знал решение - не писал-бы.

Индикатор не мой, что ниже iMAOnArray() даже не смотрел, вся задача состоит только в замене iMAOnArray() на что-то.

Можно рабочий пример того, как должно быть?

Спасибо!

P.S. Для мт5 с хэндлами порядок
Файлы:
max.mq5  14 kb
 
Vitaly Muzichenko:

Можно рабочий пример того, как должно быть?

Рабочий пример чего? Индикатора с четвёрки, работающего в пятёрке? Тогда дай полностью рабочий индикатор с четвёрки.

Или пример того, как нужно работать с функцией SmoothedMAOnBuffer() ?

 
Artyom Trishkin:

Рабочий пример чего? Индикатора с четвёрки, работающего в пятёрке? Тогда дай полностью рабочий индикатор с четвёрки.

Или пример того, как нужно работать с функцией SmoothedMAOnBuffer() ?

Рабочий пример с мт4, со стандартной iMAOnArray идёт обновление, а вот SmoothedMAOnBuffer при первом запуске нормально,  а потом нет обновления

Нужен пример работы с функцией SmoothedMAOnBuffer() 

Файлы:
test.mq4  17 kb