!3 marketprofile_virginppoc.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.