adaptive_volume_profile_node_tracker.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «adaptive_volume_profile_node_tracker.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 5, который рассчитывает и отображает на графике скользящий объёмный профиль с адаптацией ширины корзин к волатильности рынка. Индикатор визуализирует ключевые уровни объёмного профиля в виде линий на ценовом графике, а также отмечает узлы с высокой и низкой интенсивностью объёма и отрисовывает мини-гистограммы распределения объёма по корзинам. Расчёт профиля выполняется периодически при появлении новых баров в пределах заданного окна истории. Пользователь может выбрать использование реального биржевого объёма или тикового объёма для формирования профиля.
Настройки программы
| Настройка | Описание |
|---|---|
| Rolling window length (bars) used to build the profile (InpLookback) | Длина окна расчёта — Длина скользящего окна в барах, используемая для построения объёмного профиля. |
| Maximum number of price bins in the profile (InpMaxBins) | Макс. количество корзин — Максимальное количество ценовых корзин, используемых при формировании объёмного профиля. |
| ATR period used to adapt bin width to volatility (InpATRPeriod) | Период ATR — Период индикатора ATR (Average True Range), используемый для адаптации ширины корзин объёмного профиля к текущей волатильности цены. |
| Percent of total volume defining the Value Area (InpValueAreaPercent) | Процент Value Area — Процент от общего объёма, определяющий границы области стоимости (Value Area) объёмного профиля. |
| Bars between profile recalculations (InpRecalcBars) | Баров между пересчётом — Количество баров между пересчётами объёмного профиля. Профиль обновляется при достижении этого интервала на новом баре. |
| Use real (exchange) volume instead of tick volume (InpUseRealVolume) | Использовать реальный объём — Переключатель, определяющий, использовать ли реальный биржевой объём вместо тикового объёма при построении профиля. |
| StdDev multiplier for HVN / LVN node classification (InpNodeStdDevMult) | Множитель StdDev для узлов — Множитель стандартного отклонения, определяющий пороговое значение для классификации узлов как HVN или LVN. |
| High Volume Node color (InpHVNColor) | Цвет HVN — Цвет отображения узлов с высокой интенсивностью объёма (HVN) на графике. |
| Low Volume Node color (InpLVNColor) | Цвет LVN — Цвет отображения узлов с низкой интенсивностью объёма (LVN) на графике. |
Поиск по коду файла
#property version "1.00"
#property description "Rolling, volatility-adaptive volume profile with POC, Value Area,"
#property description "and High/Low Volume Node (HVN/LVN) tracking."
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 3
#property indicator_label1 "POC"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrDodgerBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
#property indicator_label2 "Value Area High"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrSilver
#property indicator_style2 STYLE_DASH
#property indicator_width2 1
#property indicator_label3 "Value Area Low"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrSilver
#property indicator_style3 STYLE_DASH
#property indicator_width3 1
input int InpLookback = 200; // Rolling window length (bars) used to build the profile
input int InpMaxBins = 24; // Maximum number of price bins in the profile
input int InpATRPeriod = 14; // ATR period used to adapt bin width to volatility
input double InpValueAreaPercent = 70.0; // Percent of total volume defining the Value Area
input int InpRecalcBars = 10; // Bars between profile recalculations
input bool InpUseRealVolume = false; // Use real (exchange) volume instead of tick volume
input double InpNodeStdDevMult = 1.0; // StdDev multiplier for HVN / LVN node classification
input color InpHVNColor = clrOrangeRed; // High Volume Node color
input color InpLVNColor = clrGray; // Low Volume Node color
double POCBuffer[];
double VAHBuffer[];
double VALBuffer[];
int g_atrHandle = INVALID_HANDLE;
datetime g_lastBarTime = 0;
int g_barsSinceCalc = 0;
string g_prefix = "APVNT_";
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(g_atrHandle != INVALID_HANDLE)
IndicatorRelease(g_atrHandle);
ObjectsDeleteAll(0, g_prefix);
}
void CreateLevelLine(const string name, const datetime t0, const double p0,
const datetime t1, const double p1, const color clr,
const ENUM_LINE_STYLE style, const int width)
{
if(ObjectFind(0, name) < 0)
ObjectCreate(0, name, OBJ_TREND, 0, t0, p0, t1, p1);
else
{
ObjectMove(0, name, 0, t0, p0);
ObjectMove(0, name, 1, t1, p1);
}
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_STYLE, style);
ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, false);
ObjectSetInteger(0, name, OBJPROP_RAY_LEFT, false);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
ObjectSetInteger(0, name, OBJPROP_BACK, true);
}
void DrawProfileObjects(const datetime t0, const datetime t1, const datetime tRight,
const double windowLow, const double binWidth, const int binCount,
const double &binVolume[], const double maxVol,
const double pocPrice, const double vahPrice, const double valPrice,
const double hvnThreshold, const double lvnThreshold)
{
ObjectsDeleteAll(0, g_prefix);
CreateLevelLine(g_prefix + "POC", t0, pocPrice, t1, pocPrice, clrDodgerBlue, STYLE_SOLID, 2);
CreateLevelLine(g_prefix + "VAH", t0, vahPrice, t1, vahPrice, clrSilver, STYLE_DASH, 1);
CreateLevelLine(g_prefix + "VAL", t0, valPrice, t1, valPrice, clrSilver, STYLE_DASH, 1);
int periodSeconds = PeriodSeconds();
int histogramBars = 15;
for(int b = 0; b < binCount; b++)
{
double binLow = windowLow + b * binWidth;
double binHigh = binLow + binWidth;
double binMid = (binLow + binHigh) / 2.0;
if(binVolume[b] > 0 && binVolume[b] >= hvnThreshold)
{
CreateLevelLine(g_prefix + "HVN_" + IntegerToString(b), t0, binMid, t1, binMid,
InpHVNColor, STYLE_SOLID, 3);
}
else if(binVolume[b] <= lvnThreshold)
{
CreateLevelLine(g_prefix + "LVN_" + IntegerToString(b), t0, binMid, t1, binMid,
InpLVNColor, STYLE_DOT, 1);
}
if(maxVol > 0)
{
double ratio = binVolume[b] / mПоказано первые 50% кода (символов: 8129)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.