Скачать MetaTrader 5

Расчет стохастика в советнике

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Kravchenko
417
Alexey Kravchenko 2015.02.23 07:05 

Всем привет !

Балуюсь с модификациями стохастика. Взял пример отсюда https://www.mql5.com/ru/code/9279.

В MT4 всё работает отлично.

Перенес на MT5. Выдает какие то "левые" значения. Вроде код простой а не работает. Ничего понять не могу. "Шумодав" убрал даже чтобы не мешал и оставил классический расчет. Проверил правильно ли происходит копирование таймсерий. Всё нормально. Может быть кто подскажет в чем проблема. Вот код.

В блоке OnInit() делаю

   ArraySetAsSeries(Hi,true);
   ArraySetAsSeries(Lo,true);
   ArraySetAsSeries(Close,true);
double Stoch(int ns, ENUM_TIMEFRAMES TF, int Kperiod, int Slowing, int PriceFild, double sens, int i) {  
   if( i+Kperiod+Slowing>Bars(Symbols[ns],TF) ) return(-1); // недостаточно баров - выход (2)
   // экстремумы цены в цикле замедления/сглаживания
   double max=0,min=0,c=0;
   CopyClose(Symbols[ns],TF,0,i+Kperiod+Slowing,Close);
   CopyHigh(Symbols[ns],TF,0,i+Kperiod+Slowing,Hi);   
   CopyLow(Symbols[ns],TF,0,i+Kperiod+Slowing,Lo); 
     
   for(int j=i; j<i+Slowing; j++) {
      if(PriceFild==1) { // по Close
        max+=Close[ArrayMaximum(Close,Kperiod,j)];
         min+=Close[ArrayMinimum(Close,Kperiod,j)];
        }
      else { // по High/Low
         max+=Hi[ArrayMaximum(Hi,Kperiod,j)];
         min+=Lo[ArrayMinimum(Lo,Kperiod,j)];
        }
      c+=Close[j];
     }

return(100*(c-min)/(max-min));
  }
Vladimir Karputov
Модератор
49432
Vladimir Karputov 2015.02.23 07:19  

Попробуйте учесть то, что в MQL4 и MQL5 таймсерии имеют разное направление индексации:

//+------------------------------------------------------------------+
//| Внимание! По-умолчанию                                           |
//|           В MQL4 ArrayGetAsSeries(time)=true!                    |
//|           В MQL5 ArrayGetAsSeries(time)=false!                   |  
//+------------------------------------------------------------------+
Alexey Kravchenko
417
Alexey Kravchenko 2015.02.23 07:37  
barabashkakvn:

Попробуйте учесть то, что в MQL4 и MQL5 таймсерии имеют разное направление индексации:

Так я вроде учел. В блоке OnInit().
Vladimir Karputov
Модератор
49432
Vladimir Karputov 2015.02.23 09:03  
Alvin1976:
Так я вроде учел. В блоке OnInit().
Я говорил об индикаторе. У индикатора есть  OnCalculate(). В общем давайте полный код - с названием, с "шапкой".
Alexey Kravchenko
417
Alexey Kravchenko 2015.02.23 12:11  
barabashkakvn:
Я говорил об индикаторе. У индикатора есть  OnCalculate(). В общем давайте полный код - с названием, с "шапкой".

Нету OnCalculate(). Это не индикатор а просто функция которая вычисляет значение Main классического стохастика. Я её запускал в советнике MT4 на M5 при открытии нового бара. Всё совпадает со встроенным Stochastic как и должно быть.

Попробовал тоже самое в MT5. Не получается. Цифры как "с потолка" выдаёт. Чувствую что в трёх соснах заблудился :-).

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

Alexey Kravchenko
417
Alexey Kravchenko 2015.02.23 14:35  

Всё разобрался !

Пора бы уже привыкнуть что в MT5 всё перевёрнуто с ног на голову :-).

Даже такие простые функции как ArrayMaximum и ArrayMinimum.

Таки не удержусь от очередного риторического вопроса к разработчикам. НУ ЗАЧЕЕЕЕЕМ !!!???

Зачем нужно было менять порядок аргументов в этих функциях блин....

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