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

 
mila.com:

У меня со свои циклопом не получается разобраться и правильно вписать его  индикатор.

 Ваш скрипт при любых настройках возвращает нуль. Должен по идее вернуть тройку, потому что сейчас разница между первым и третьим баром 0.005

Возможно непонятно сформулировала. Хочу записать в цикл вот это


double ma_etalon=iMA(NULL,0,...,i+1);

double ma_curr;

int shift;

for(shift=2;shift<5;shift++) {

    ma_curr=iMA(NULL,0,...,i+shift);

    if (ma_etalon-ma_curr<0.005) break; // ах ты чёрт, значение близко

}

if (shift==5) {

   // цикл досчитал до конца, то есть все значение довольно далеко
   // ... развернись плечо ...

}

 
mila.com:

Спасибо, но что-то не так


0.005 это в чём измеряется ? (видимо на _Point надо умножить)
 

Спасибо, всем за помощь, получилось )

 
mila.com:

Спасибо, всем за помощь, получилось )

Просто интересно, нужно было такое?

 double prevMA=0,currMA=0;
 for(int i=1;i<=5;i++) {
  if(i==1) currMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  prevMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  if(MathAbs(prevMA-currMA)>0.0005) {
   // сюда пишем в буфер
   break;
  }
 }
 
Vitaly Muzichenko:

Просто интересно, нужно было такое?

Да, а как вписать эту конструкцию в основной цикл индикатора?

 
Vladimir Pastushak:

Я же Вам четко написал в трейлинге Вы ставите вместо тейка 0

Проверьте этот вариант


Всё работает!!! :)))).... Спасибо вам огромное, за то, что терпите нас, бездарей)))))). Спасибо большое!)

 

Добрый день.

Подскажите, как с помощью iCustom можно получить значение индикатора на другом таймфрейме со сдвигом?

Т.е. работаю на М5, хочу получить значение индикатора с М15, при чем предыдущей свечи на М15.

int start() 
{ 
  HistBar = History;
  int i,counted_bars = IndicatorCounted();
  if (counted_bars < 0) return (-1);
  if (counted_bars > 0) counted_bars--;
  int limit = MathMin(Bars-counted_bars,HistBar+100);

  for(i=limit; i>=0; i--)
   {  
   int HT1,HT2; 
        if (_Period == PERIOD_M1)  
            {HT1 = PERIOD_M5;
            HT2 = PERIOD_M15;}
        else
           {
           if (_Period == PERIOD_M5)  
            {HT1 = PERIOD_M15;
            HT2 = PERIOD_M30;}
           else
              {
              if (_Period == PERIOD_M15)  
               {HT1 = PERIOD_M30;
               HT2 = PERIOD_H1;}
               }
            }
   //MFI
   long Volume_0_0 = iVolume(NULL,0,i);
   long Volume_0_1 = iVolume(NULL,0,i+1);
   double BWMFI_0_0 = iBWMFI(NULL,0,i);
   double BWMFI_0_1 = iBWMFI(NULL,0,i+1);

   ///////// вопрос как тут указать правильно
   long Volume_1_0 = iVolume(NULL,HT1,i);
   long Volume_1_1 = iVolume(NULL,HT1,i+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,i);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,i+1);
   ....
}
 
LSM:

Добрый день.

Подскажите, как с помощью iCustom можно получить значение индикатора на другом таймфрейме со сдвигом?

Т.е. работаю на М5, хочу получить значение индикатора с М15, при чем предыдущей свечи на М15.

Достаточно внимательно прочесть документацию

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );
 
Alexey Viktorov:

Достаточно внимательно прочесть документацию

Отредактировал свой вопрос, добавил код. Там идет цикл. Не понятно что я получу когда это происходит в цикле.
 
LSM:
Отредактировал свой вопрос, добавил код. Там идет цикл. Не понятно что я получу когда это происходит в цикле.

Отвечу на свой же вопрос, вдруг кому пригодится )

   
   !!!!
   int y = iBarShift(NULL,HT1,Time[i]);
   
   long Volume_1_0 = iVolume(NULL,HT1,y);
   long Volume_1_1 = iVolume(NULL,HT1,y+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,y);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,y+1);
Причина обращения: