Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 25

 

Цикл от самого "старого" бара к самому "свежему": 

    for (int i = limit; i >= 0; i--);
 

Немного модифицировал индикатор. Считает правильно до запятой. К примеру на одно участке индикатор должен равнятся 11, а показывает 11,58.

Что может быть не в порядке?

Сделал, чтобы vniz_1, vniz_2 были больше ноля. Образовались разрывы в линии индикатора. Как соединить разрывы и окрасить их в другой цвет , но не вести расчет индикатора в этих промежутках.

//+------------------------------------------------------------------+
//|                                                         сила.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters
extern int       Period_MA_1=7;
extern int       Period_MA_2=7;
extern int       Period_MA_3=7;
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    vniz_1,
    vniz_2,
    MA_1_t,                         
    MA_2_t,                           
    MA_3_t;
 
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
   
   for(int i=0;i<limit;i++)
   {
      MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_CLOSE,i+1);  
      MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_CLOSE,i+2);  
      MA_3_t=iMA(NULL,0,Period_MA_3,0,MODE_EMA,PRICE_CLOSE,i+3);    
      vniz_1=(MA_3_t-MA_2_t);
      vniz_2=(MA_2_t-MA_1_t);
      if (vniz_1>0&&vniz_2>0)
      {
      ExtMapBuffer1[i]=(vniz_1/vniz_2);
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Немного модифицировал индикатор. Считает правильно до запятой. К примеру на одно участке индикатор должен равнятся 11, а показывает 11,58.

Что может быть не в порядке?

Сделал, чтобы vniz_1, vniz_2 были больше ноля. Образовались разрывы в линии индикатора. Как соединить разрывы и окрасить их в другой цвет , но не вести расчет индикатора в этих промежутках.

 


      MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_CLOSE,i+1);  
      MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_CLOSE,i+2);  
      MA_3_t=iMA(NULL,0,Period_MA_3,0,MODE_EMA,PRICE_CLOSE,i+3); 
Считаете индикатор на несуществующих барах ?????
 
      if (vniz_1<0 || vniz_2<0)
      {
      ExtMapBuffer2[i]=(чему равны разрывы);
      }
 
Что такое  2013.07.07 16:06:21 2010.02.01 01:56 Конструктор EURUSD,H1: Ошибка открытия ордера селл EURUSD Индекс массива - вне диапазона
??????
 
Ниже код простенького индикатора, который рисует Горизонтальную линию для всех баров.
Как его исправить, чтобы линия рисовалась исключительно для последних 20 баров?




#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Chocolate
#property indicator_width1 6

#property indicator_minimum -0.1
#property indicator_maximum  0.1


double ExtMapBuffer[];



int init() {

   IndicatorBuffers(1);
   IndicatorDigits(   Digits+2);
   IndicatorShortName("H_LINE");

   SetIndexLabel(    0, "H_LINE");
   SetIndexDrawBegin(0, 0);
   SetIndexStyle(    0, DRAW_LINE);
   SetIndexBuffer(   0, ExtMapBuffer);

   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexShift(     0, 0);

   return(0);
}




int start()  {

   int limit;
   int counted_bars=IndicatorCounted();

   if(counted_bars>0) {
      counted_bars--;
   }

   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++) {   
      ExtMapBuffer[i] = 0;
   }


   return(0);
}
 
atztek:
Ниже код простенького индикатора, который рисует Горизонтальную линию для всех баров.
Как его исправить, чтобы линия рисовалась исключительно для последних 20 баров?






А чему должна быть равной линия?
 
Vinin:

А чему должна быть равной линия?

Величина линии по оси Y в данном случае не имеет значения, это лишь пример на основе которого я хочу понять как правильно ограничить "рисование" индикаторами некоторым количеством баров.
 
atztek:

Величина линии по оси Y в данном случае не имеет значения, это лишь пример на основе которого я хочу понять как ограничить "рисование" индикаторами некоторым количеством баров.

Хотите использовать индикаторные буферы или объекты?
 
Vinin:
Хотите использовать индикаторные буферы или объекты?

Индикаторные буферы, т.к. в дальнейшем решение будет использоваться не только для прямых, но и для линий типа скользящая средняя и других.