B эксперте не работает функция iCustom

 

в индекаторе А работает функция iCustom или iCustum не помню точно в строке for (int i=Bars-CountBars;i<=0;i--) а[i]=iCustom(NULL,0,"Name",6,0,i) ; работает нормално отукрывает индикатор Name и считывает нулевую линию буфера.

делаю то же самое в эксперте for (int i=Bars-CountBars;i<=0;i--) a[i]=iCustom(NULL,0,"Name",6,0,i) ; и в массив а[] вносяться одни нули!

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

 
если iCustom(NULL,0,"Name",6,0,0) даёт результат, то ошибки в твоём коде!
 

у вас ошибка в коде

int i=Bars-CountBars;i<=0;i--

цикл ни разу не запустится  -    i<=0

 
Million4ik писал(а) >>

Дает результат 0! а должен быть число равное высоте бара. индикатор к которому оброщаюсь написан верно и работает нормально.

Исправь ошибку, про которую говорил Сергеев.

 
Vinin >>:

Исправь ошибку, про которую говорил Сергеев.

да исправил точнее я сюда написал непверно а в коде все нормально написанно. результат тот же сейчас выложу код.

 

Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.

Хочешь проверить

int start(){
   double tmp=iCustom(NULL,0,"Name",6,0,1);
   print("Текущее значение индикатора = ",tmp);
}
Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снята
 

вот этот кусок текста в этом эксперте

//--------------------------------------------------------------- 5 --
   // Торговые критерии
  for( bar = 0; bar <= Bars-IndicatorCounted(); bar++)
   {
   Minim[bar]=iCustom(NULL,0,"EkstremumByMA",PeriodMA,  1,bar);  // Minimum 
   Maxim[bar]=iCustom(NULL,0,"EkstremumByMA",PeriodMA,  0,bar);  // Maximum
   }
   Print ("Maxim[",bar-10,"]= ",Maxim[bar-10],"Minim[",bar-10,"]= ",Minim[bar-10]);
   // Print ("Min= ",Min,"\n","Max= ",Max,"\n","sgl_bars= ",sgl_bars);
  Print("grafMA[10]= ",grafMA[10]);
    double sum;
  int m,ig;                          // int
  i=Bars-IndicatorCounted()-1;                         // 
  Print ("I= ",i);                  // колличетво баров
    for (m=0;m<=i;m++)
  {
  for (ig=m+PeriodMA;ig>=m;ig--)  { sum=sum+(High[ig]+Low[ig])/2; }
  graffikMA[m]=((High[m]+Low[m])/2)/sum+1.7;
  maximum[m]=0;
  minimum[m]=0;
  grafMA[m]=graffikMA[m-PeriodMA/2]+0.8;
  }
  Print ("graffikMA[",m-1,"]= ",graffikMA[m-20]);
  Print ("grafMA[",m-1,"]= ",grafMA[m-20]);
  //Print ("PeriodMA/2= ",PeriodMA/2);
  //------------------------------------------------maximum-----------
  for (m=0;m<=i-3;m++)
  {
       if ( (graffikMA[m])>(graffikMA[m+1])&&(graffikMA[m])>(graffikMA[m-1])&&(graffikMA[m-1]!=0)  )
     {
     maximum[m]=graffikMA[m];
     }//if
 //-------------------------------------------------minimum-----------    
     if(   (graffikMA[m])<(graffikMA[m+1])&&(graffikMA[m])<(graffikMA[m-1])  )  
     {
      minimum[m]=graffikMA[m];
     }//if
  //Print ("maximum[",m,"]= ",maximum[m]," minimum[",m,"]= ",minimum[m]);   
  } //for(m=0;m<=i;m++) 

 
Vinin >>:

Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.

Хочешь проверить

Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снята

проверил (  выдает нули

  

int start()
  {
   double tmp=iCustom(NULL,0,"EkstremumByMA",6,0,1);
   Print("Текущее значение индикатора = ",tmp);
   }
текст индикатора такой
//+------------------------------------------------------------------+
//|                                               Fraktals Maddy.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property indicator_chart_window       // Индик. рисуется в основном окне
#property indicator_buffers 3          // Количество буферов 1
#property indicator_color1 Red         // Цвет первой линии
#property indicator_color2 Yellow         // Цвет первой линии
#property indicator_color3 Blue         // Цвет первой линии
#property  indicator_width1 1
#property  indicator_width2 1
#property  indicator_width3 2
double maximum[],minimum[],graffikMA[];                       // flat\trand

extern int PeriodMA=6;                // колличество баров для сглаживания

int m;                       // счетчик

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---------------------------------- 1 -------------------------------
   SetIndexBuffer(0,maximum);        // Назначение массива буферу 0
   SetIndexStyle (0,DRAW_ARROW,3);// Стиль линии
//---------------------------------- 2 -------------------------------
   SetIndexBuffer(1,minimum);        // Назначение массива буферу 0
   SetIndexStyle (1,DRAW_ARROW,3);// Стиль линии
//---------------------------------- 2 -------------------------------
   SetIndexBuffer(2,graffikMA);        // Назначение массива буферу 0
   SetIndexStyle (2,DRAW_LINE,1);// Стиль линии
//---------------------------------- 2 -------------------------------
   return;                          // Выход из спец. ф-ии init()
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   { 
  int i,m;                          // int
  double trend,flet,Parametr;       // double
  i=Bars-1;                         // 
  Print ("I= ",i);                  // колличетво баров
  for (m=0;m<=i;m++)
  {
 graffikMA[m]=iCustom(NULL,0,"Moving Averages",PeriodMA,0,0,  0,m-PeriodMA/2);
 // graffikMA[m]=iMA(NULL,0,PeriodMA,0,0,  4,m-PeriodMA/2);
  maximum[m]=0;
  minimum[m]=0;
  }
  //Print ("PeriodMA/2= ",PeriodMA/2);
  //------------------------------------------------maximum-----------
  for (m=0;m<=i-3;m++)
  {
       if ( (graffikMA[m])>(graffikMA[m+1])&&(graffikMA[m])>(graffikMA[m-1])&&(graffikMA[m-1]!=0)  )
     {
     maximum[m]=graffikMA[m];
     }//if
 //-------------------------------------------------minimum-----------    
     if(   (graffikMA[m])<(graffikMA[m+1])&&(graffikMA[m])<(graffikMA[m-1])  )  
     {
      minimum[m]=graffikMA[m];
     }//if
  } //for(m=0;m<=i;m++)
  }// start()
//-----------------------определение тренда и флета------------------------------------------------------------------------//
 
Vinin >>:

Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.

Хочешь проверить

Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снята
int start()
  {
   double tmp=iCustom(NULL,0,"EkstremumByMA",6,2,1);// поменял линию индикатора! с 0 на 2!
   Print("Текущее значение индикатора = ",tmp);
   }

результат)

2009.05.05 13:48:30 2009.01.27 23:53 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:53 EkstremumByMA EURUSD,M1: I= 167
2009.05.05 13:48:30 2009.01.27 23:52 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:52 EkstremumByMA EURUSD,M1: I= 166
2009.05.05 13:48:30 2009.01.27 23:51 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:51 EkstremumByMA EURUSD,M1: I= 165
2009.05.05 13:46:18 2009.01.27 23:50 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0

 
Vinin >>:

Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.

Хочешь проверить

Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снята

спасибо за помощь,Vinin. ошибка в эксперте осталомсь найти где она. iCustom() работает нормально проверил на другом баре осталось найти ошибку в глубинах кода...

int start()
  {
   double tmp=iCustom(NULL,0,"EkstremumByMA",6,2,10);// поменял линию индикатора! с 0 на 2! бар 10!
   Print("Текущее значение индикатора = ",tmp);
   }

тестер выдал нужные значения:


2009.05.05 14:03:38 2009.01.28 03:50 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3202


2009.05.05 14:03:38 2009.01.28 03:50 EkstremumByMA EURUSD,M1: I= 403

2009.05.05 14:03:38 2009.01.28 03:49 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.32

2009.05.05 14:03:38 2009.01.28 03:49 EkstremumByMA EURUSD,M1: I= 402

2009.05.05 14:03:38 2009.01.28 03:48 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3199

2009.05.05 14:03:38 2009.01.28 03:48 EkstremumByMA EURUSD,M1: I= 401

2009.05.05 14:03:38 2009.01.28 03:47 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3197

2009.05.05 14:03:38 2009.01.28 03:47 EkstremumByMA EURUSD,M1: I= 400

2009.05.05 14:03:38 2009.01.28 03:46 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3196

2009.05.05 14:03:38 2009.01.28 03:46 EkstremumByMA EURUSD,M1: I= 399

2009.05.05 14:03:38 2009.01.28 03:45 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3194


 

 
Million4ik >>:

вот этот кусок текста в этом эксперте



С каких пор в экспертах стала использоваться функция IndicatorCounted()!  Она в них будет возвращать минус единицу! При таком уровне понимания MQL4 следовало бы основательно разобраться в более простых вещах! А так это всё - абсолютно бесполезный, мартышкин труд!!!

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