Интересный индикатор настроений рынка. - страница 4

 

Да, другая (не моя)

кому-нибудь интересней будет поюзать индикаторы, чем картинки рассматривать

 

В общем ситуация следующая.


Сейчас я пытался прогнать индикатор на графике при визуализации тестирования встроенного в МТ4 советника MACD, чтобы ещё раз проверить отсутствие перерисовки и обнаружил что небольшая перерисовка всё-таки имеет место быть, поэтому выкладываю сюда код индикатора очень похожего на мой. Надеюсь что форумчане определят причину перерисовки и может даже перепишут индикатор на MQL5 :)

//+------------------------------------------------------------------+
//|                                                          052.mq4 |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Black

extern int       period=20;
extern int       kolvbar=500;

double ExtMapBuffer1[];


int init()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);

   return(0);
  }

int start()
  {
   int counted_bars=IndicatorCounted();
   int i,j,limit;
   double hpres, lpres, TSBUL, TSBER, sbl, sbr;
   limit=Bars-counted_bars;
   j=0;
   if (limit> kolvbar)  limit=kolvbar;
   for(i = limit; i >= 0; i--) {
      j = 0;
      TSBUL = 0;
      TSBER = 0;
      hpres =0;
      lpres = 9999999;
      while (j<period)   
      {
          sbl = 0;
          sbr = 0;
         {
            int shift=i+j; 
            datetime date = iTime(Symbol(), 0, shift); 
            int bsht = iBarShift(Symbol(), Period(), date, false);
            int kolichestvo = bsht-MathRound(Period()/Period());
            if (kolichestvo < 0 ) {kolichestvo=0;}
            for (int n=bsht;n>=kolichestvo;n--) 
            {
               double ii = iRSI(Symbol(),0,period,PRICE_CLOSE,n);
               double hnw = iHigh(Symbol(), Period(), n);
               double lnw = iLow(Symbol(), Period(), n);
               double cle = iClose(Symbol(), Period(), n);
                             
               if (hnw> hpres)
               {
                  hpres = hnw;
                  sbl = sbl + ii*cle;
               }
               if (lpres> lnw)
               {
                  lpres = lnw;
                  sbr = sbr + ii*cle;
               }               
              }            
             }
                 TSBUL = TSBUL + sbl ;
                 TSBER = TSBER + sbr ;
         
               j++;
           }

          ExtMapBuffer1[i] = TSBER/TSBUL;
          
       }

    return(0);
}
 
poruchik:

Да, другая (не моя)

кому-нибудь интересней будет поюзать индикаторы, чем картинки рассматривать


Доброе утро! Я этим индикатором пользовался, но новый компилатор стал давать 4 аналогичных предупреждения:

MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i+Polzun_1[n]);

possible loss of data due to type conversion Priliv_s.mq4 120 75

и, соответственно, в 3-х других Машках!

Компилятору не нравится выражение, выделенное жирным! Предполагаю, что нежелательно суммировать int i и double Polzun_1[n].

Попробовал перевести в int, но не помогло, а даёт другое предупреждение, и пропадает изображение в окне:

Pol1=StrToInteger(Polzun_1[n]);

implicit conversion from 'number' to 'string' Priliv_s.mq4 117 37

Не подскажите, как подправить?! Спасибо!

Пока не перехожу на новый МКЛ4++, использую как раньше, без ++!

 
borilunad:


Доброе утро! Я этим индикатором пользовался, но новый компилатор стал давать 4 аналогичных предупреждения:

MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i+Polzun_1[n]);

possible loss of data due to type conversion Priliv_s.mq4 120 75

и, соответственно, в 3-х других Машках!

Компилятору не нравится выражение, выделенное жирным! Предполагаю, что нежелательно суммировать int i и double Polzun_1[n].

Попробовал перевести в int, но не помогло, а даёт другое предупреждение, и пропадает изображение в окне:

Pol1=StrToInteger(Polzun_1[n]);

implicit conversion from 'number' to 'string' Priliv_s.mq4 117 37

Не подскажите, как подправить?! Спасибо!

Пока не перехожу на новый МКЛ4++, использую как раньше, без ++!


Используйте явное приведение там, где есть сомнения. В данном случае в строке

MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i+Polzun_1[n]);

Компилятор ругается на то, что сначала надо привести i к double, сложить, а результат привести снова к int (так как параметр функции имеет тип именно int), а это потенциально операция с потерей точности. Отсюда и предупреждение.

Если вы имено это имеете в виду, то пишите явно:

MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i+int(Polzun_1[n]));
 
alsu:

Используйте явное приведение там, где есть сомнения. В данном случае в строке

Компилятор ругается на то, что сначала надо привести i к double, сложить, а результат привести снова к int (так как параметр функции имеет тип именно int), а это потенциально операция с потерей точности. Отсюда и предупреждение.

Если вы имено это имеете в виду, то пишите явно:





Спасибо большое! Я не знал, что можно поставить int прям тут! Всё изгаляюсь, а не выходит! Сейчас вставлю!

Отлично! Ещё раз спасибо!

 
borilunad:


Сейчас вставлю!

Вставьте и сюда :)
 
poruchik:
Вставьте и сюда :)


С удовольствием! Вставил, как показал Алексей:

MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i+int(Polzun_1[n]));                                                           
Добавил int и скобки. Тоже самое в остальных 3-х Машках.
 

я про весь индикатор

===========

хотя, у меня 0 -варнингов (МТ 604)

 
poruchik создайте отдельную ветку для своего индикатора, а то форумчане могут перепутать ваш с моим.
 
poruchik:

я про весь индикатор

===========

хотя, у меня 0 -варнингов (МТ 604)


Жалко! У меня пока 600! Если 604, значит не надо ничего поправлять!