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

 
А я оценил на 9 - 8 за код и 1 за новизну.
 
Rosh wrote:
Begun wrote:
Однако надо бы его причесать. Ато тяжеловатый он получается.
Думаю, это дело не за горами. Народ увидел индикатор, поверил в возможность его построения, кто-нибудь обязательно доведет теперь до победного конца. Хотя , может и сам автор уже его подправил (код не смотрел новый - если там новый код).
Так MP для MT4 же проходил гдето в форумах с полгода назад уже, если не больше. ?!
Ну да.. так и есть. Правда без указания сессий... но это бантик :)
 
Все отлично - если бы еще приделать возможность из параметров менять цвета сессий и моды ;) А то на светлом фоне плохо видно.
 
AlexSilver wrote:
Все отлично - если бы еще приделать возможность из параметров менять цвета сессий и моды ;) А то на светлом фоне плохо видно.
Ну... это даже я могу :)

 
А вот и кратинка.
Закачанные изображения:

 
Некоторые пишут, что им надо для минуток (хотя по теории строится по M30), для этого нужно убрать строчку
if (x<15) return(-1);
На самом деле это практически не влияет на качество моделирования. Может некоторые пипсы будут более детализированы (профиль менее сглаженный и ребристый), но важна только мода и области "дыр" и сам тип профиля. Недаром основатель метода чертил только для M30 и каждому получасу давал свою букву.
Лично я пользуюсь модифицированным индикатором, который строит профили для более длительных периодов (на H1, H4, D1) за любые промежутки времени и ИМХО это дает гораздо более надежные сигналы, чем классические внутредневные уровни профиля.
 

/ru/code/8944

сдвинуть бы профили к началу каждой сессии

 
Geronimo:

'Гистограмма объемов другая интерпритация'

сдвинуть бы профили к началу каждой сессии

Вот скрипт, позволяющий строить MP с динамическими границами:

#property copyright "Viatcheslav Suvorov"
#property show_inputs
extern int smoothing=5;
//**************************************************************
datetime t0,t1;
int profile[];
bool NeedInit=true; 
int init()
{
   t0=TimeOnDropped();
   int i0=iBarShift(Symbol(),Period(),t0); 
   int i1=i0+20;
   t1=Time[i1];
  
     
   ObjectCreate("leftMP",0,0,t1,0);
   ObjectSet("leftMP",OBJPROP_COLOR,Yellow);
   
   ObjectCreate("rightMP",0,0,t0,0);
   ObjectSet("rightMP",OBJPROP_COLOR,Yellow);   
   
} 
//**************************************************************
int start()
{
  NeedInit=true;
  while(IsStopped()==false)
  { 
    if (ObjectFind("rightMP") != -1) datetime cur_t0=ObjectGet("rightMP",OBJPROP_TIME1); else {
      cur_t0=t0;
      Print("Не найду пр. грань");
    }  
    if (ObjectFind("leftMP") != -1) datetime cur_t1=ObjectGet("leftMP",OBJPROP_TIME1); else {
      cur_t1=t1;
      Print("Не найду лев. грань");
    }  
    if ((cur_t0!=t0) || (cur_t1!=t1) || NeedInit){   
      ObjectsDeleteAll(0,OBJ_RECTANGLE);
      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        
      ObjectsDeleteAll(0,OBJ_RECTANGLE);
      for (i=0;i<=TPO-1;i++){
       if ((ObjectFind("rec"+i) == -1) && (profile[i]>0)) {
           ObjectCreate("rec"+i, OBJ_RECTANGLE, 0, Time[il],ProfMin+i*Point,Time[il-profile[i]],ProfMin+(i+1)*Point);
           ObjectSet("rec"+i, OBJPROP_COLOR, Blue);
           ObjectSet("rec"+i, OBJPROP_BACK, false);
       }//if
      }//for
      ObjectsRedraw( );
    }//if
  }//while 
   return(0);
}
//***************************************************************
void deinit()
{
  ObjectDelete("rightMP");
  ObjectDelete("leftMP");  
  ObjectsDeleteAll(0,OBJ_RECTANGLE);
}
//***************************************************************
 
Avals:

Вот скрипт, позволяющий строить MP с динамическими границами:

А как он работает?

 
med1um:
Avals:

Вот скрипт, позволяющий строить MP с динамическими границами:

А как он работает?

Автоматически создаются 2 вертикальные линии (желтые) и между ними строится профиль. Двигая их как обычные линии МТ4 (с помощью мышки), изменяется начальная и конечная дата прорисовки профиля и автоматически строится новый MP.