Индикаторы: MarketProfile - страница 4

 

Отличные вещи создаете! Почти единственное что приносит реальную помощь при серьезной работе, спасибо Вам Avals

 

а возможно ли сделать в индикаторе, которых можно выставлять несколько (последнем), так чтобы можно было отображать на выбранных таймфреймах и чтобы они не срывались при переключения таймфрейма?

 

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

Вот сейчас устанавливается только один

 
sawa:

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

Вот сейчас устанавливается только один

Можно все это, но тогда появляется дополнительный параметр NumOfCopy - номер профиля, который надо задавать в ручную (по умолчанию=1). Второму профилю надо ставить 2 и т.д. Профили не смещаются при переключении TF, сохраняют положение после перезапуска терминала, новая копия автоматически смещается от предыдущей при создании. Есть не достаток - при удалении индикатора его вертикальные линии не удаляются. Их надо удалить в ручную или новый профиль автоматически присоединиться к ним. Код индикатора:

#property copyright "Viatcheslav Suvorov"
#property indicator_chart_window
#property show_inputs
extern int NumOfCopy=1;
extern int smoothing=5;
extern color Color=Blue;
//**************************************************************
datetime t0,t1;
int profile[];
bool NeedInit=true; 
string leftLine;
string rightLine;
int init()
{ 
   t0=Time[(NumOfCopy-1)*20]; 
   int i0=iBarShift(Symbol(),Period(),t0); 
   int i1=i0+20;
   t1=Time[i1];
   
   leftLine="leftMP"+DoubleToStr(NumOfCopy,0);
   rightLine="rightMP"+DoubleToStr(NumOfCopy,0);
     
   if (ObjectFind(leftLine)== -1){  
     ObjectCreate(leftLine,0,0,t1,0);
     ObjectSet(leftLine,OBJPROP_COLOR,Color);
   }//if  
   if (ObjectFind(rightLine)== -1){  
     ObjectCreate(rightLine,0,0,t0,0);
     ObjectSet(rightLine,OBJPROP_COLOR,Color);   
   }//if  
} 
//**************************************************************
int start()
{
  NeedInit=true;
    if (ObjectFind(rightLine) != -1) datetime cur_t0=ObjectGet(rightLine,OBJPROP_TIME1); else {
      cur_t0=t0;
      Print("Не найду пр. грань");
    }  
    if (ObjectFind(leftLine) != -1) datetime cur_t1=ObjectGet(leftLine,OBJPROP_TIME1); else {
      cur_t1=t1;
      Print("Не найду лев. грань");
    }  
    if ((cur_t0!=t0) || (cur_t1!=t1) || NeedInit){   
      ObjectsDelete();
      NeedInit=false;
      t0=cur_t0;
      t1=cur_t1;
      int i0=iBarShift(NULL,0,t0); 
      int i1=iBarShift(NULL,0,t1); 
      if (i0>i1){
        int il=i0;
        int ir=i1;
      } else {
        il=i1;
        ir=i0;        
      }//if else      
      double ProfMin=Low[Lowest(NULL,0,MODE_LOW,il-ir,ir)];
      double ProfMax=High[Highest(NULL,0,MODE_HIGH,il-ir,ir)];
      int TPO=(ProfMax-ProfMin)/Point;
      ArrayResize(profile,TPO);
      ArrayInitialize(profile,0);
      for (int i=il;i>=ir;i--){
        for (double j=Low[i];j<=High[i];j+=Point){
          int index=(j-ProfMin)/Point-1;
          profile[index]++;
        }//for
      }//for
      int Summ=0;
      if (smoothing>0){        
        for (i=0;i<=TPO-1;i++){          
          profile[i]=(2*profile[i]/(smoothing+1))+((smoothing-1)*profile[i-1]/(smoothing+1));          
        }//for
        
      }//if        
      ObjectsDelete();
      for (i=0;i<=TPO-1;i++){
       if ((ObjectFind(NumOfCopy+"rec"+i) == -1) && (profile[i]>0)) {
           ObjectCreate(NumOfCopy+"rec"+i, OBJ_RECTANGLE, 0, Time[il],ProfMin+i*Point,Time[il-profile[i]],ProfMin+(i+1)*Point);
           ObjectSet(NumOfCopy+"rec"+i, OBJPROP_COLOR, Color);
           ObjectSet(NumOfCopy+"rec"+i, OBJPROP_BACK, false);
       }//if
      }//for
      WindowRedraw();
    }//if
   return(0);
}
//***************************************************************
void deinit()
{
// ObjectDelete(leftLine);
// ObjectDelete(rightLine);  
  ObjectsDelete();
}
//***************************************************************
void ObjectsDelete()
{  
  bool needwork=true;
  while (needwork){
    int obj_total=ObjectsTotal();
    for(int i=0;i<obj_total;i++){
       needwork=false;
       string name=ObjectName(i);
       if (StringFind(name,NumOfCopy+"rec",0)>-1){
         needwork=true;
         ObjectDelete(ObjectName(i));
         break;
       }//if  
    }//for
  }//while  
  return(0);
}//ObjectsDelete()
 

Жаль не рисует Value Area прошлого дня.  Ни у кого случаем нет такой версии где рисует ?

 

Хороший индюк только плохо что на 2 последних дня строит. Подскажите может есть у кого такой же чтоб строил на всех таймфреймах и все дни?

 
как он расчитывается?
 

Здравствуйте! Можно сделать так, чтобы линии на графике как фон рисовались? Чтобы не было вот так как на картинке:


Причина обращения: