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

Market Profile

+mp.mq4
Вы автор или правообладатель?

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

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

О программе

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

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

НастройкаОписание
?? ?????????, ?????? ???? ????? ?? ??????????? (RangePeriod) Период диапазона — Таймфрейм, на котором берётся диапазон ценовых данных для построения профиля.
?????????? ??????????/?????????? (RangeCount) Количество периодов — Количество периодов (баров), за которые рассчитывается профиль рынка.
??????? ??????????? ???????????, ?????????? ? 2 ???? ?????? + 1 (ModeStep) Шаг модальных уровней — Шаг расчёта модальных уровней — число ценовых шагов, используемых для определения локальных максимумов гистограммы.
???? ??????????? (HGColor) Цвет гистограммы — Цвет фона горизонтальных столбцов гистограммы объёма.
???? ??? (ModeColor) Цвет модального уровня — Цвет линий модальных ценовых уровней, соответствующих локальным максимумам объёма.
???????? ???????? (MaxModeColor) Цвет максимального модального уровня — Цвет линии, обозначающей максимальный модальный ценовой уровень.
??????? ???? ????? (Id) Идентификатор — Текстовый префикс для именования графических объектов, создаваемых индикатором на графике.
Получить полный код

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

#property indicator_chart_window

extern int RangePeriod = PERIOD_D1;				// ?? ?????????, ?????? ???? ????? ?? ???????????
extern int RangeCount = 20;						// ?????????? ??????????/??????????
extern int ModeStep = 10;						// ??????? ??????????? ???????????, ?????????? ? 2 ???? ?????? + 1
int PointStep = 1;								// ??? ????
int DataPeriod = 1;								// ?????? ??? ??????, ??????? - ????? ??????
bool ShowHorizon = true;						// ???????? ???????? ??????

extern color HGColor = C'160,192,224';			// ???? ???????????
extern color ModeColor = Blue;					// ???? ???
extern color MaxModeColor = CLR_NONE;			// ???????? ????????

int HGLineWidth = 1;							// ?????? ????? ???????????
double Zoom = 0;								// ??????? ???????????, 0 - ???????????

int ModeWidth = 1;								// ??????? ???
int ModeStyle = STYLE_SOLID;					// ????? ???

extern string Id = "+mp";						// ??????? ???? ?????

int WaitSeconds = 1;							// ??????????? ?????, ? ????????, ????? ????????????
int TickMethod = 1;								// ????? ???????? ?????: 0 - Low >> High, 1 - Open > Low(High) > High(Low) > Close, 2 - HLC, 3 - HL

string onp;

datetime drawHistory[];		// ??????? ?????????
datetime lastTime = 0;		// ????????? ?????? ???????
bool lastOK = false;

double hgPoint;				// ??????????? ????????? ????
int modeStep = 0;

bool showHG, showModes, showMaxMode;

#define ERR_HISTORY_WILL_UPDATED 4066

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

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

int deinit()
{
	clearChart(onp);
	return(0);
}

bool checkDrawHistory(datetime time)
{
	int count = ArraySize(drawHistory);
	bool r = false;
	for (int i = 0; i < count; i++)
	{
		if (drawHistory[i] == time)
		{
			r = true;
			break;
		}
	}
	return(r);
}

void addDrawHistory(datetime time)
{
	if (!checkDrawHistory(time))
	{
		int count = ArraySize(drawHistory);
		ArrayResize(drawHistory, count + 1);
		drawHistory[count] = time;
	}
}

void drawModes(double& vh[], double hLow, int barFrom, double zoom, double point)
{
	int modes[], modeCount, j;
	double price;

	modeCount = getModesIndexes(vh, modeStep, modes);

	double max = 0;
	if (showMaxMode)
	{
		for (j = 0; j < modeCount; j++)
			if (vh[modes[j]] > max)
				max = vh[modes[j]];
	}

	for (j = 0; j < modeCount; j++)
	{
		double v = zoom*vh[modes[j]];

		if (MathAbs(v) > 0)
		{
			price = hLow + modes[j]*point;

			datetime timeFrom = getBarTime(barFrom);
			datetime timeTo = getBarTime(barFrom - v);

			color cl = ModeColor;
			if (MathAbs(vh[modes[j]] - max) < point)
				cl = MaxModeColor;

			drawTrend(onp + "mode " + TimeToStr(timeFrom) + " " + DoubleToStr(price, Digits), 
				timeFrom, price, timeTo, price, cl, ModeWidth, ModeStyle, false, false);
		}
	}
}

datetime getBarTime(int shift, int period = 0)
{
	if (period == 0)
		period = Period();

	if (shift >= 0)
		return(iTime(Symbol(), period, shift));
	else
		return(iTime(Symbol(), period, 0) - shift*period*60);
}

int clearChart(string prefix)
{
	int obj_total = ObjectsTotal();
	string name;

	int count = 0;
	for (int i = obj_total - 1; i >= 0; i--)
	{
		name = ObjectName(i);
		if (StringFind(name, prefix) == 0)
		{
			ObjectDelete(name);
			count++;
		}			
	}
	return(count);
}

void drawVLine(string name, datetime time1, color lineColor = Gray, int width = 1, int style = STYLE_SOLID, bool back = true)
{
	if (ObjectFind(name) >= 0)
		ObjectDelete(name);

	ObjectCreate(name, OBJ_VLINE, 0, time1, 0);
	ObjectSet(name, OBJPROP_COLOR, lineColor);
	ObjectSet(name, OBJPROP_BACK, back);
	ObjectSet(name, OBJPROP_STYLE, style);
	ObjectSet(name, OBJPROP_WIDTH, width);
}

void drawTrend(string name, datetime time1, double price1, datetime timeTo, double price2, 
	color lineColor = Gray, int width = 1, int style = STYLE_SOLID, bool back = true, bool ray = true, int window = 0)
{
	if (ObjectFind(name) >= 0)
		ObjectDelete(name);

	ObjectCreate(name, OBJ_TREND, window, time1, price1, timeTo, p

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

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

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

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

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

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

Стоимость полного кода
895,70₽ ≈ $10.95