Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь найти ответ на вопрос? Воспользуйся поиском!
Евгений
12
Евгений 2011.09.06 10:47 
Здравствуйте! Прошу помочь в решении проблемы. Вопрос казалось бы простенький. Но и так и сяк... и...

Вот пример кода:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Turquoise

double ExtMapBuffer1[];
double ExtMapBuffer2[];

int i, t;

double SBER_close[];


int init()
  {
   IndicatorBuffers(2);  
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(1,ExtMapBuffer2);
   return(0);
  }


int start()
{

   int counted_bars=IndicatorCounted(),
       limit;

   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
      ArrayInitialize(SBER_close,0.0); 
      ArrayResize(SBER_close, limit);  


   for(i=0;i<limit;i++)
   {
           SBER_close[i] =iClose("#SBER",0,i);  
   }      

   t=0;
   
   for(i=0;i<limit;i++)
   {

        ExtMapBuffer1[i]=SBER_close[t];          
        ExtMapBuffer2[i]=SBER_close[t+1];
        t++;  

   }
 
   return(0);
}



Как только я переношу индикатор на график - все ок. Выглядит он так (скрин 1.jpg):




Но при поступлении данных нового тика - линиия SBER_close[t+1] непонятным образом
"трансформируется" и возникает провал на первой свече (которая идет за нулевой). Глюк вот такой (скрин 2.jpg):




Как избавиться от этой трансформации? почему она возникает?
SofTAA
408
SofTAA 2011.09.06 11:47  
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Turquoise

double ExtMapBuffer1[];
double ExtMapBuffer2[];

int init()
{
  IndicatorBuffers(2);  
  SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);
  SetIndexBuffer(0,ExtMapBuffer1);
  SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
  SetIndexBuffer(1,ExtMapBuffer2);
  return(0);
}
//
int start()
{
  int i;
  int counted_bars=IndicatorCounted(), limit;

  if(counted_bars>0) counted_bars--;

  limit=Bars-counted_bars;

  for(i=0;i<limit;i++)
  {
    ExtMapBuffer1[i] = iClose("#SBER", 0, i);           
    ExtMapBuffer2[i] = iClose("#SBER", 0, i+1); 
  }

  return(0);
}
вот как-то так.
Евгений
12
Евгений 2011.09.06 11:58  
SofTAA:
вот как-то так.
Все дело в промежуточном массиве SBER_close[i] - он очень нужен. Может быть без него и будет выводиться адекватно на график, но дальнейшая обработка данных производится именно по нему. Как убрать провалы сохранив SBER_close[i]? Т.е. как организовать вывод в буфер данных (ExtMapBuffer2
) именно из SBER_close[i+1] и (ExtMapBuffer1) из SBER_close[i] ???
Mikhail Dovbakh
3555
Mikhail Dovbakh 2011.09.06 12:30  
//+------------------------------------------------------------------+
//|                                                    Test_copy.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Turquoise

double ExtMapBuffer1[];
double ExtMapBuffer2[];

int i, t;

double SBER_close[];


int init()
  {
   IndicatorBuffers(2);  
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(1,ExtMapBuffer2);
   ArrayResize(SBER_close,Bars);
   ArrayInitialize(SBER_close,0.0); 
     
  }


int start()
{

   int counted_bars=IndicatorCounted(),
       limit;

   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
   for(i=0;i<limit+1;i++)
   {
           SBER_close[i] =iClose(Symbol(),0,i);  
   }      

   t=0;
   
   for(i=0;i<limit;i++)
   {

        ExtMapBuffer1[i]=SBER_close[i];          
        ExtMapBuffer2[i]=SBER_close[i+1];
         

   }
 
   return(0);
}

//+------------------------------------------------------------------+

Aleksey Lebedev
6032
Aleksey Lebedev 2011.09.06 12:34  
turbo_tr:
Все дело в промежуточном массиве SBER_close[i] - он очень нужен. Может быть без него и будет выводиться адекватно на график, но дальнейшая обработка данных производится именно по нему. Как убрать провалы сохранив SBER_close[i]? Т.е. как организовать вывод в буфер данных (ExtMapBuffer2) именно из SBER_close[i+1] и (ExtMapBuffer1) из SBER_close[i] ???

При новом тике массиву SBER_close задаётся размер 2, маловата будет© :)

SBER_close возможно будет удобнее сделать индикаторным буфером.

Mikhail Dovbakh
3555
Mikhail Dovbakh 2011.09.06 12:35  
для понимания происходящего добавьте Сomment ("Limit=",limit); после вычисления limit=Bars-counted_bars;
Евгений
12
Евгений 2011.09.06 13:00  
Огромное спасибо! Участники, в Вашу честь по бокалу вина за 1 пост :)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий