Проблема при вызове функции iCustom. Спасибо. Проблема решена.

[Удален]  

Вот простой индикатор который рассчитывает среднюю скользящую.Имя индикатора "X".

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buf_1[];

int init()
  {
  SetIndexBuffer (0,Buf_1);
  SetIndexStyle (0,DRAW_LINE,STYLE_SOLID);
  return(0);
  }
  
  int start()
  {
   int
   i,
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-30
   ;
   while (i>=0)
   { 
   Buf_1[i]=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,i);
   i--;
   }
  return(0);
  }

А вот эксперт который через функцию iCustom получает значение средней скользящей и выводит его.


int start()
  {
 
 int MA;
 
 datetime
 bar_time=0;  //флаг нового бара
 if (bar_time==iTime(0,0,0))                     //сравнение вр.открытия текущего бара
 return(0);                                       //т.е если сформировался новый бар то продолжаем
 bar_time=iTime(0,0,0);

 MA=iCustom(NULL,0,"X",0,0);
 Alert ("Значение = ", MA);
   return(0);
 }

так вот у меня проблема, то что он выводит одно и то же значение.

 
Rattnik писал(а) >>

Вот простой индикатор который рассчитывает среднюю скользящую.Имя индикатора "X".

А вот эксперт который через функцию iCustom получает значение средней скользящей и выводит его.

так вот у меня проблема, то что он выводит одно и то же значение.

Ошибка в индикаторе. Вернее всего i меньше нуля.

i=Bars-counted_bars-30;

 

а почему так iTime(0,0,0)??? надо iTime(Null,0,0) вроде

[Удален]  
Vinin >>:

Ошибка в индикаторе. Вернее всего i меньше нуля.

i=Bars-counted_bars-30;

Так индикатор работает!!!

А вот на запрос о его значении в эксперт попадает одно и тоже значение.

 
Rattnik писал(а) >>

Так индикатор работает!!!

А вот на запрос о его значении в эксперт попадает одно и тоже значение.

При первом запуске работает. При втором и последующем, когда IndicatorCounted() возвращает число, близкое Bars, то выражение становится меньше нуля.

 
Vinin писал(а) >>

Ошибка в индикаторе. Вернее всего i меньше нуля.

i=Bars-counted_bars-30;

Это верняк, я тоже с этим мучился пока не допёрло.

Откуда у тебя цифра 30?

Я обхожу это сл. образом:

bool Flag[1]; // "Флаг" подключения индикатора
//--------------------------------------------------------------------
if
(!Flag[0]) // Установка нач. значений при подкл. индикатора
{
...

BarsDelta=Bars1;
Flag[0]=true;
// Установка начальных значений завершена
}

//--------------------------------------------------------------------
Counted_bars=IndicatorCounted();
i=Bars-BarsDelta-Counted_bars-1; // Индекс первого непосчитанного

Хотя наверняка, есть способ и попроще. Опытные подскажут.

Да ещё: можно обьявить твою 30 переменной на глобальном уровне, а потом в теле программы обнулить. Это по учебнику, сам как-то всё не удосужусь проверить...

[Удален]  
alderru >>:

Это верняк, я тоже с этим мучился пока не допёрло.

Откуда у тебя цифра 30?

Я обхожу это сл. образом:

boolFlag[1]; // "Флаг" подключения индикатора
//--------------------------------------------------------------------
if
(!Flag[0]) // Установка нач. значений при подкл. индикатора
{
...

BarsDelta=Bars1;
Flag[0]=true;
// Установка начальных значений завершена
}

//--------------------------------------------------------------------
Counted_bars=IndicatorCounted();
i=Bars-BarsDelta-Counted_bars-1; // Индекс первого непосчитанного

Хотя наверняка, есть способ и попроще. Опытные подскажут.

Я думаю что не в индюке косяк.

Прислушился к рекомендациям и прописал.

Все равно индикатор работает а эксперт при тесте выдает в этом духе...


2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:14	2009.04.14 14:55  test2 EURUSD,M30: Alert: Значение = 1
2009.07.14 21:15:12	X EURUSD,M30: removed
 
Rattnik писал(а) >>

Я думаю что не в индюке косяк.

Прислушился к рекомендациям и прописал.

Все равно индикатор работает а эксперт при тесте выдает в этом духе...

//+------------------------------------------------------------------+
//|                                                VininI_MA(v1).mq4 |
//|                                                  Victor Nicolaev |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Victor Nicolaev"
#property link      "vinin@mail.ru"


#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow


extern int period=89;
extern int mode=0;
extern int price=0;


//---- buffers
double Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexDrawBegin(0,period);
   SetIndexBuffer(0,Buffer);


   return(0); 
}

//+------------------------------------------------------------------+
int start() {
   int limit;
   int i,counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
      Buffer[i]=iMA(Symbol(),0,period,0,mode,price,i);
   }
   return(0); 
}

 

Тьфу, мать...

У тебя же MA обьявлена как int !!!

[Удален]  
alderru >>:

Тьфу, мать...

У тебя же MA обьявлена как int !!!

БЛ.... Спасибо. Я чуствовал что гдето косяк,но не в Индикаторе.

 
Rattnik писал(а) >>

БЛ.... Спасибо. Я чуствовал что гдето косяк,но не в Индикаторе.

И в индикаторе тоже. Потом поймешь