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

TPO

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

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

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

О программе

Индикатор TPO (Time Price Opportunity) отображает распределение цен на графике MetaTrader 4 в виде гистограмм по заданным временным диапазонам. Продукт анализирует ценовые данные за каждый диапазон, формируя гистограмму частоты появления цен на различных уровнях. На основе гистограммы определяются моды — уровни с максимальной концентрацией цен.

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

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

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

НастройкаОписание
RangePeriod Таймфрейм диапазона для анализа распределения цен; должен быть одним из стандартных.
RangeCount Количество отображаемых диапазонов и гистограмм на графике.
ModeStep Шаг поиска мод; фактический размер участка поиска в два раза больше указанного значения плюс один.
PriceStep Шаг цены для построения гистограммы. Значение 0 означает автоматический расчёт шага.
DataPeriod Период данных для расчёта гистограммы; минутные данные обеспечивают наибольшую точность.
HGColor Цвет гистограммы распределения цен. Значение clrNONE скрывает гистограмму.
HGStyle Стиль отображения гистограммы: 0 — линии, 1 — пустые прямоугольники, 2 — заполненные прямоугольники.
ModeColor Цвет линий мод — уровней локальной максимальной концентрации цен.
MaxModeColor Цвет выделения максимальной моды — уровня с наибольшей концентрацией цен.
TriangleShow Переключатель отображения треугольников, соединяющих максимум и минимум диапазона с уровнем моды.
TriangleClr Цвет треугольников, соединяющих экстремумы ценового диапазона с уровнем моды.
TriangleFill Переключатель заливки треугольников: включено — треугольники заливаются, выключено — только контур.
Id Префикс имён графических объектов, создаваемых индикатором на графике.
Получить полный код

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

#property indicator_chart_window

extern int RangePeriod = PERIOD_D1;				// ТФ диапазона, должен быть одним из стандартных
extern int RangeCount = 20;						// количество диапазонов/гистограмм

extern int ModeStep = 10;						// шаг поиска мод, фактически в 2 раза больше + 1
int Smooth = 0;									// глубина сглаживания, применяется алгоритм последовательного усреднения триад указанное число раз
extern int PriceStep = 0;						// шаг цены, 0 - авто (см. #1)
extern int DataPeriod = 1;						// период для данных, минутки - самые точные
bool ShowHorizon = true;						// показать горизонт данных

extern color HGColor = clrNONE;			   // цвет гистограммы
extern int HGStyle = 1;							// стиль гистограммы: 0 - линии, 1 - пустые прямоугольники, 2 - заполненные прямоугольники
extern color ModeColor = clrNONE;		   // цвет мод
extern color MaxModeColor = clrYellow;	   // выделить максимум

input bool TriangleShow = true;           //Show Triangle
input color TriangleClr = clrDimGray;     //__ color
input bool TriangleFill = true;           //__ Fill

int HGLineWidth = 1;							// ширина линий гистограммы
double Zoom = 0;								// масштаб гистограммы, 0 - автомасштаб

int ModeWidth = 1;								// толщина мод
int ModeStyle = STYLE_SOLID;					// стиль мод

extern string Id = "+tpo";						// префикс имен линий

int WaitSeconds = 1;							// минимальное время, в секундах, между обновлениями
int TickMethod = 1;								// метод имитации тиков: 0 - Low >> High, 1 - Open > Low(High) > High(Low) > Close, 2 - HLC, 3 - HL, 4 - Среднетиковый псевдо-объ¸м

string onp;

datetime drawHistory[];		// история рисования
datetime lastTime = 0;		// последнее времся запуска
bool lastOK = false;

double hgPoint;				// минимальное изменение цены
int modeStep = 0;
int smooth = 0;

bool showHG, showModes, showMaxMode;
bool hgBack = true;
bool hgUseRectangles = false;

#define ERR_HISTORY_WILL_UPDATED 4066

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

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

int deinit()
{
	clearChart(onp);
	ObjectsDeleteAll(0,"tri"+Id);
	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]];
	}

	datetime timeFrom = getBarTime(barFrom);

	clearChart(onp + "mode " + TimeToStr(timeFrom) + " ");

	bool back = false;
	if (hgUseRectangles)
		back = true;

	string on;

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

		if (MathAbs(v) > 0)
		{
			price = hLow + modes[j]*point;
			datetime timeTo = getBarTime(barFrom - v);

			on = onp + "mode " + TimeToStr(timeFrom) + " " + DoubleToStr(price, Digits);
			if (showMaxMode && (MathAbs(vh[modes[j]] - max) < point))	// максимальная мода
			{
				drawTrend(on, timeFrom, price, timeTo, price, MaxModeColor, ModeWidth, ModeStyle, back, false, 0, hgUseRectangles);

				if (hgUseRectangles && back)
					drawTrend(on + "+", timeFrom, price, timeTo, price, MaxModeColor, ModeWidth, ModeStyle, false, false, 0, false);
			}
			else if (showModes)	// обычная мода
			{
				drawTrend(on, timeFrom, price, timeTo, price, ModeColor, ModeWidth, ModeStyle, back, false, 0, hgUseRectangles);

				if (hgUseRectangles && back)
					drawTrend(on + "+", timeFrom, price, timeTo, price, ModeColor, ModeWidth, ModeStyle, false, false, 0, 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_to

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

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

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

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

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

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

Стоимость полного кода
1 257₽ ≈ $16