← К каталогу
Исходный код · ID 4459

!3 marketprofile_virginppoc.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор Market Profile с отображением уровней Virgin POC и POC (Point of Control). Он анализирует ценовые данные внутри торговых сессий, определяет уровень с наибольшим объёмом торгов и отрисовывает соответствующие горизонтальные линии на графике. Также строится зона значений (Value Area) с настраиваемым процентным порогом.

Индикатор поддерживает настройку количества дней для построения гистограммы, позволяет включить отображение числовых значений уровней и настраивает цвета для различных типов линий: Virgin POC, POC, внутренних и внешних диапазонов. Работает на таймфреймах вплоть до H4, используя внутренне минутные данные M5.

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

Настройки программы

НастройкаОписание
Days_with_the_histogram Количество дней, за которые строится гистограмма частот торгов
To_show_values Включает отображение числовых значений на уровнях POC и Virgin POC
Range_percent Процент от максимальной частоты, определяющий границы зоны значений (Value Area)
Color_VirginPOCs Цвет линии Virgin POC — первого появления уровня контроля в рамках отображаемого периода
Color_POCs Цвет линии POC (точки контроля) — уровня с наибольшей частотой торгов в сессии
Colour_in_a_range Цвет линий внутри зоны значений (Value Area), отражающих основной ценовой диапазон сессии
Colour_behind_a_range Цвет линий за пределами зоны значений (Value Area), то есть вне основного ценового диапазона
Displacement_GMT Смещение меток времени относительно нулевого бара, задаваемое в часах
To_build_today Переключатель, включающий построение профиля для текущего торгового дня
Construction_step Шаг сетки при построении ценовых уровней, определяющий дискретность расчёта частот
Max_of_days_calculation Максимальное количество дней для расчёта; если -1, используется вся доступная история
Shift Смещение меток уровней относительно нулевого бара, задаваемое в пунктах текущего таймфрейма
Получить полный код

Поиск по коду файла

#property indicator_chart_window

extern int     Days_with_the_histogram     = 1; // Количество дней для построения Гистограммы
extern bool    To_show_values     =true;// включить значения уровней
extern int     Range_percent       =70;
extern color   Color_VirginPOCs         =Green;// цвет уровня Virgin POC(Point of Control Formation) 
extern color   Color_POCs               =DarkGray;// цвет уровня POC точки формирования контроля
extern color   Colour_in_a_range   =MediumVioletRed;// цвет внутреннего диапазона цен
extern color   Colour_behind_a_range      =RoyalBlue;// цвет внешнего диапазона цен
extern int     Displacement_GMT            =0; // смещение меток относительно 0 бара
extern bool    To_build_today         =false; // Построения для текущего дня
extern int     Construction_step          = 1; // Шаг сетки построения
extern int     Max_of_days_calculation        = 90; // Максимальное колво дней для расчета если -1 вся доступная история
extern int     Shift                   = 8; // смещение меток относительно 0 бара

bool           RedrawFlag;
double         Divider;
datetime       TimeZero=0;
int            CountPOC=0;
string         VirginPOC[];
string         StartTime, EndTime;
string         PrefixName="MARKET_VIRGIN";

int init()
{
      // код доступен только после оплаты
   }

int deinit()
{
   int i = 0; 
   string ObjName;
   while(i < ObjectsTotal())
   {
      ObjName = ObjectName(i);
      if(StringFind( ObjName, PrefixName)==-1) 
      { 
         i++; 
         continue;
      }
      ObjectDelete(ObjName);
   }

   return(0);
}

datetime decDateTradeDay (datetime dt)
{
   datetime result;
   result=StrToTime(TimeToStr(StrToTime(TimeToStr(dt,TIME_DATE)+" 0:00")-PERIOD_D1,TIME_DATE));
   while (TimeDayOfWeek(result)>5||TimeDayOfWeek(result)<1) result=decDateTradeDay(result);
   return(result);
}

void Draw_POCs(datetime X, double Y)
{

   bool     VirginFlag=true;
   color    Color;
   datetime EndX;
   string   name_line;
   int      StartBar, EndBar;
   if(TimeDayOfWeek(X)==5)
      StartBar=iBarShift(NULL,PERIOD_M5,X+PERIOD_D1*60*3);
   else
      StartBar=iBarShift(NULL,PERIOD_M5,X+PERIOD_D1*60);
   EndBar=iBarShift(NULL,PERIOD_M5,StrToTime(TimeToStr(Time[0],TIME_DATE)));
   for(int i=StartBar; i>=EndBar; i--)
   {
      if(Y<iHigh(NULL, PERIOD_M5, i) && Y>iLow(NULL, PERIOD_M5, i))
         break;
   }
   name_line=PrefixName+TimeToStr(X)+"POC";
   if(i!=EndBar-1)
   {
      VirginFlag=false;
      Color=Color_POCs;
      EndX=iTime(NULL, PERIOD_M5, i);
      if(TimeToStr(EndX,TIME_DATE)==TimeToStr(TimeCurrent(),TIME_DATE) || TimeToStr(Time[0],TIME_DATE)==TimeToStr(X,TIME_DATE))
         VirginFlag=true;
   }
   if(VirginFlag)
   {
      Color=Color_VirginPOCs;
      EndX=Time[0]+Shift*Period()*60;
      int size=ArrayRange(VirginPOC,0)+1;
      ArrayResize(VirginPOC,size);
      VirginPOC[size-1]=name_line;
   }
   if(ObjectFind(name_line)==-1)
   {
      ObjectCreate(name_line, OBJ_TREND, 0, 0, 0, 0, 0);
      ObjectSet(name_line, OBJPROP_BACK, false);
      ObjectSet(name_line, OBJPROP_RAY, 0);
   }
   ObjectMove(name_line,0, X, Y);
   ObjectMove(name_line,1, EndX, Y);
   ObjectSet(name_line, OBJPROP_COLOR, Color);
   if(!To_show_values && !VirginFlag)
      return;
   name_line = name_line+" LABLE";
   if(ObjectFind(name_line) == -1)
   {
      ObjectCreate(name_line, OBJ_ARROW, 0, 0,0);
      ObjectSet(name_line, OBJPROP_BACK, false);
   }
   if(VirginFlag)
      ObjectSet(name_line, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
   else
      ObjectSet(name_line, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE);
   ObjectMove(name_line, 0, EndX,Y);
   ObjectSet(name_line, OBJPROP_COLOR, Color);

}

void DrawMarket(datetime dt, string StartTime, string EndTime, bool HDraw)
{
   datetime    GMT=Displacement_GMT*PERIOD_H1*60;
   datetime    dt0=StrToTime(TimeToStr(dt,TIME_DATE)+" "+StartTime)+GMT;
   datetime    dt1=StrToTime(TimeToStr(dt,TIME_DATE)+" "+EndTime)+GMT;
   int         StartBar=iBarShift(NULL,PERIOD_M5,dt0);
   int         EndBar=iBarShift(NULL,PERIOD_M5,dt1);
   int         BarCount=StartBar-EndBar+1;
   double      HighDay=iHigh(NULL,PERIOD_M5,iHighest(NULL,PERIOD_M5,MODE_HIGH,BarCount,EndBar));
   double      LowDay=iLow(NULL, PERIOD_M5, iLowest(NULL,PERIOD_M5,MODE_LOW,BarCount,EndBar));
   int         NumberOfPoints = (HighD

Показано первые 50% кода (символов: 7976)

Открыть по тарифу

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

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
797,60₽ ≈ $9.75