Индикатор фракталов. Маленькая доработка.

 

Здравствуйте!

Очень нужна ваша помощь. Пожалуйста помогите модифицировать индикатор fractal. Нужно сделать, чтобы подписывалось значение цены фрактала над фракталом. Думаю для человека с навыками програмирования mql4 это простое дело.

Заранее благодарю!


Вот собственно код, который нужно модифицировать.

//+------------------------------------------------------------------+
//| Fractals.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters

//---- buffers
double ExtUpFractalsBuffer[];
double ExtDownFractalsBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator buffers mapping  
  SetIndexBuffer(0,ExtUpFractalsBuffer);
  SetIndexBuffer(1,ExtDownFractalsBuffer);  
//---- drawing settings
  SetIndexStyle(0,DRAW_ARROW);
  SetIndexArrow(0,119);
  SetIndexStyle(1,DRAW_ARROW);
  SetIndexArrow(1,119);
//----
  SetIndexEmptyValue(0,0.0);
  SetIndexEmptyValue(1,0.0);
//---- name for DataWindow
  SetIndexLabel(0,"Fractal Up");
  SetIndexLabel(1,"Fractal Down");
//---- initialization done  
  return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
  {
  int i,nCountedBars;
  bool bFound;
  double dCurrent;
  nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted  
  if(nCountedBars<=2)
  i=Bars-nCountedBars-3;
  if(nCountedBars>2)
  {
  nCountedBars--;
  i=Bars-nCountedBars-1;
  }
//----Up and Down Fractals
  while(i>=2)
  {
  //----Fractals up
  bFound=false;
  dCurrent=High[i];
  if(dCurrent>High[i+1] && dCurrent>High[i+2] && dCurrent>High[i-1] && dCurrent>High[i-2])
  {
  bFound=true;
  ExtUpFractalsBuffer[i]=dCurrent;
  }
  //----6 bars Fractal
  if(!bFound && (Bars-i-1)>=3)
  {
  if(dCurrent==High[i+1] && dCurrent>High[i+2] && dCurrent>High[i+3] &&
  dCurrent>High[i-1] && dCurrent>High[i-2])
  {
  bFound=true;
  ExtUpFractalsBuffer[i]=dCurrent;
  }
  }  
  //----7 bars Fractal
  if(!bFound && (Bars-i-1)>=4)
  {  
  if(dCurrent>=High[i+1] && dCurrent==High[i+2] && dCurrent>High[i+3] && dCurrent>High[i+4] &&
  dCurrent>High[i-1] && dCurrent>High[i-2])
  {
  bFound=true;
  ExtUpFractalsBuffer[i]=dCurrent;
  }
  }  
  //----8 bars Fractal  
  if(!bFound && (Bars-i-1)>=5)
  {  
  if(dCurrent>=High[i+1] && dCurrent==High[i+2] && dCurrent==High[i+3] && dCurrent>High[i+4] && dCurrent>High[i+5] && 
  dCurrent>High[i-1] && dCurrent>High[i-2])
  {
  bFound=true;
  ExtUpFractalsBuffer[i]=dCurrent;
  }
  } 
  //----9 bars Fractal  
  if(!bFound && (Bars-i-1)>=6)
  {  
  if(dCurrent>=High[i+1] && dCurrent==High[i+2] && dCurrent>=High[i+3] && dCurrent==High[i+4] && dCurrent>High[i+5] && 
  dCurrent>High[i+6] && dCurrent>High[i-1] && dCurrent>High[i-2])
  {
  bFound=true;
  ExtUpFractalsBuffer[i]=dCurrent;
  }
  }  
  //----Fractals down
  bFound=false;
  dCurrent=Low[i];
  if(dCurrent<Low[i+1] && dCurrent<Low[i+2] && dCurrent<Low[i-1] && dCurrent<Low[i-2])
  {
  bFound=true;
  ExtDownFractalsBuffer[i]=dCurrent;
  }
  //----6 bars Fractal
  if(!bFound && (Bars-i-1)>=3)
  {
  if(dCurrent==Low[i+1] && dCurrent<Low[i+2] && dCurrent<Low[i+3] &&
  dCurrent<Low[i-1] && dCurrent<Low[i-2])
  {
  bFound=true;
  ExtDownFractalsBuffer[i]=dCurrent;
  }  
  }  
  //----7 bars Fractal
  if(!bFound && (Bars-i-1)>=4)
  {  
  if(dCurrent<=Low[i+1] && dCurrent==Low[i+2] && dCurrent<Low[i+3] && dCurrent<Low[i+4] &&
  dCurrent<Low[i-1] && dCurrent<Low[i-2])
  {
  bFound=true;
  ExtDownFractalsBuffer[i]=dCurrent;
  }  
  }  
  //----8 bars Fractal  
  if(!bFound && (Bars-i-1)>=5)
  {  
  if(dCurrent<=Low[i+1] && dCurrent==Low[i+2] && dCurrent==Low[i+3] && dCurrent<Low[i+4] && dCurrent<Low[i+5] && 
  dCurrent<Low[i-1] && dCurrent<Low[i-2])
  {
  bFound=true;
  ExtDownFractalsBuffer[i]=dCurrent;
  }  
  } 
  //----9 bars Fractal  
  if(!bFound && (Bars-i-1)>=6)
  {  
  if(dCurrent<=Low[i+1] && dCurrent==Low[i+2] && dCurrent<=Low[i+3] && dCurrent==Low[i+4] && dCurrent<Low[i+5] && 
  dCurrent<Low[i+6] && dCurrent<Low[i-1] && dCurrent<Low[i-2])
  {
  bFound=true;
  ExtDownFractalsBuffer[i]=dCurrent;
  }  
  }  
  i--;
  }
//----
  return(0);
  }
//+------------------------------------------------------------------+

Файлы:
fractals.mq4  6 kb
 

При масштабировании надписи "над ..." будут съезжать на бары или уходить за пределы видимой части экрана.

А чтобы не сдвигались надписи, простые навыки программирования не помогут.

 
да. и тем более наличие на графике обильного числа подписей возможно притормозит его прокрутку
 
Благодарю за ответы. Буду искать кто напишет за деньги...
 

Можно сделать в виде ценовых меток

и привязаться к хаю и лоу свечей :


Специальные коды стрелок, которые точно указывают на цену и время. Mогут быть следующими величинами:

Константа Значение Описание








SYMBOL_LEFTPRICE 5 Левая ценовая метка
SYMBOL_RIGHTPRICE 6 Правая ценовая метка
 

 
satop, хорошее решение.
Причина обращения: