Скачать MetaTrader 5

Наверное это вопрос к уважаемым разработчикам.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114267
Forex Trader 2005.12.24 22:42 
Уважаемые разработчики.
Беру ниженаписанный элементарный код компилирую,
получается индикатор
потом индикатор мышью бросаю на график,
передвигаю мышью линию между графиком и индикатором
на которой выскакивает всплывающее окно "Взять и перетащить границу окна"
и наблюдаю чудный эффект внезапного попеременного появления и исчезновения гистограммы
как в отрицателном так и в положительном поле индикатора чего конечно
не должно быть так как все массивы в циклах заполненны нолями.
Пожалуйста подскажите как с этим быть .
Но если я сам накосячил с кодом то прошу меня извинить.
А может у меня терминал криво установлен?
#property indicator_minimum -1        // минимум индикатора
#property indicator_maximum 1         // максимум идикатора
#property indicator_separate_window   // Индикатор рисуется в отдельном окне   
#property  indicator_buffers 2        // Количество индикаторных массивов или линий которые будут отрисованны 
#property  indicator_color1  Blue     // Цвет линии или гистограммы индикатора
#property  indicator_color2  Yellow   // Цвет линии или гистограммы индикатора

double f_MM[];                        // Обьявление массива для отрисовки
double f_NN[];                        // Обьявление массива для отрисовки



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {//1
  IndicatorBuffers(2);

  SetIndexStyle(0,DRAW_HISTOGRAM,0,3); //Функция определяющая параметры отрисовки массива
  SetIndexStyle(1,DRAW_HISTOGRAM,0,3); //Функция определяющая параметры отрисовки массива
  
  
                
  SetIndexBuffer(0,f_MM);
  SetIndexBuffer(1,f_NN);              //Функция определяющая массив который будет отрисован в отдельном окне
  
  
  return(0);
  }//-1

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+



int start()


{

int i;

    
for (i=Bars;i>=0;i--) f_MM[Bars+1]=0.0;
for (i=Bars;i>=0;i--) f_NN[Bars+1]=0.0;

//------------------------------------------------
   return;
}
//------------------------------------------------

MetaQuotes Software Corp.
Модератор
182378
MetaQuotes Software Corp. 2005.12.25 14:55  
for (i=Bars;i>=0;i--) f_MM[Bars+1]=0.0;
for (i=Bars;i>=0;i--) f_NN[Bars+1]=0.0;


Вероятно, в поле индекса надо написать i, а не Bars+1? К тому же, начало цикла неверное. Надо начинать от (Bars-1).

Посмотрите вот более правильный вариант:

#property indicator_minimum -1        // минимум индикатора
#property indicator_maximum 1         // максимум идикатора
#property indicator_separate_window   // Индикатор рисуется в отдельном окне   
#property  indicator_buffers 2        // Количество индикаторных массивов или линий которые будут отрисованны 
#property  indicator_color1  Blue     // Цвет линии или гистограммы индикатора
#property  indicator_color2  Yellow   // Цвет линии или гистограммы индикатора

double f_MM[];                        // Обьявление массива для отрисовки
double f_NN[];                        // Обьявление массива для отрисовки
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3); //Функция определяющая параметры отрисовки массива
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3); //Функция определяющая параметры отрисовки массива
   SetIndexBuffer(0,f_MM);
   SetIndexBuffer(1,f_NN);              //Функция определяющая массив который будет отрисован в отдельном окне
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i;
//----
   if(Bars>0)
     {
      for(i=Bars-1;i>=0;i--) f_MM[i]=MathSin(i);
      for(i=Bars-1;i>=0;i--) f_NN[i]=MathCos(i);
     }
//----
   return(0);
  }
//-------------------------------


Кроме того, этот индикатор очень затратный - на каждом тике пересчитывает все данные. Посмотрите массу исходников ( /experts/samples/indicators и "MQL4: automated forex trading" ) с экономично написанными индикаторами.

Forex Trader
114267
Forex Trader 2005.12.25 23:11  
Уважаемый Renat большое спасибо за то что Вы указали мне на мои ошибки!
Бывает так что накосячишь, а потом смотришь в книгу а видишь ...
Сам удивляюсь как у меня такое могло получиться?!.
Извиняюсь за лишнее беспокойство.
Заоодно поздравляю Вас и вашу команду разработчиков с Наступающим Новым годом!
С наилучшими пожеланиями.
Kikitra.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий