Ошибки в индикаторе МТ4 при #property strict - страница 3

 
Natashe4ka:

С удовольствием, но в маркет такой продукт не пройдёт.
Советник основан на этом индикаторе, как ссылаться на него если его не будет в маркете даже в бесплатном варианте? 

А зачем ссылаться?
 
Vitalie Postolache:
А зачем ссылаться?
А как по другому? Советник же не будет без него работать. И тест не получится ознакомительный.
 
Natashe4ka:
А как по другому? Советник же не будет без него работать. И тест не получится ознакомительный.

А это, что? 

Это выражение истинно или ложно
 
Natashe4ka:
А как по другому? Советник же не будет без него работать. И тест не получится ознакомительный.
Пробуйте ресурсом индикатор вшить в тело советника и проверить в маркете. А ссылаться и открывать подробности не надо, коммерческая тайна всё-таки )))
 
Vitalie Postolache:
Пробуйте ресурсом индикатор вшить в тело советника и проверить в маркете.

Можно и так, но в советнике так же используется #property strict и будет опять же ошибка

Alekseu Fedotov:

А это, что? 

Это выражение истинно или ложно

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

 
Natashe4ka:

Не могу разобраться, при #property strict выдаёт 4 ошибки и как исправить не пойму.

Ошибки на return(k==-1); и return(k > 0);
Просто поменять на return(0); нельзя!!!

Индикатор МТ4. Нужна помощь!! 

Natashe4ka:

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



bool checkLowStrict(int count, int i) { int k=count-1; for (; k>=0; k--) if (Low[i+count] >= Low[i+k]) break;  return(k==-1); }
bool checkLowRef   (int count, int i) { int k=count-1; for (; k> 0; k--) if (Low[i+k]     <  Low[i])   break;  return(k > 0); }
//-----------------+
bool checkHighStrict(int count, int i) { int k=count-1; for (; k>=0; k--) if (High[i+count] <= High[i+k]) break;  return(k==-1); }
bool checkHighRef   (int count, int i) { int k=count-1; for (; k> 0; k--) if (High[i+k]     >  High[i])   break;  return(k > 0); }
 
o_O:
bool checkLowStrict(int count, int i) { int k=count-1; for (; k>=0; k--) if (Low[i+count] >= Low[i+k]) break;  return(k==-1); }
Интересный манёвр, но не работает, нет сигнала.
 
Natashe4ka:
Интересный манёвр, но не работает, нет сигнала.

ваш вопрос был про ошибку и как убрать.

а про сигналы вопроса не было. )


если надо сигнал - изложите суть бага про сигнал

 

Всего то надо было исправить limit (вышли за пределы массива)

   int counted_bars=IndicatorCounted();
   int i,limit;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
      limit = MathMin(Bars-counted_bars,Bars-1);
   if(counted_bars==0) {
      limit--;   // чтобы не выйти за пределы массива при counted_bars==0
      limit-=10; // в расчетах используется смещение на 10 баров вглубь истории, поэтому добавим это смещение при первом расчете
      }else{     // индикатор уже рассчитывался ранее, counted_bars>0                
      limit++;   // при повторных вызовах увеличим limit на 1, чтобы гарантированно обновлять значения индикатора для последнего бара
     }          
   for(i=limit; i>=0; i--) {

 ну и int k; вынести за пределы цикла

int k;
bool checkLowStrict(int count, int i) { for (k=count-1; k>=0; k--) if (Low[i+count] >= Low[i+k]) break;  return(k==-1); }
bool checkLowRef   (int count, int i) { for (k=count-1; k> 0; k--) if (Low[i+k]     <  Low[i])   break;  return(k > 0); }
//-----------------+
bool checkHighStrict(int count, int i) { for (k=count-1; k>=0; k--) if (High[i+count] <= High[i+k]) break;  return(k==-1); }
bool checkHighRef   (int count, int i) { for (k=count-1; k> 0; k--) if (High[i+k]     >  High[i])   break;  return(k > 0); }

Теперь всё работает, сигнал есть, ошибок нет))

Всем большое спасибо !!! 

Причина обращения: