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