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

Effective Volume

effective volume all.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор Effective Volume для MetaTrader 5 рассчитывает аналитические данные на основе соотношения цены и объёма на минутном уровне внутри торговых сессий. Он разделяет объём на крупный и мелкий компоненты, позволяя визуально оценить активность крупных участников рынка. Результаты отображаются в отдельном окне в виде трёх графических линий.

Индикатор использует настраиваемые фильтры объёма и цены, а также параметры торговой сессии для корректной обработки данных. Поддерживается работа с несколькими днями истории и возможность задания времени закрытия сессии. Все расчёты выполняются автоматически при обновлении графика.

Три линии индикатора отображаются в отдельном подокне графика: крупный объём (зелёный), мелкий объём (красный) и суммарный объём (синий). Индикатор предназначен для аналитических целей и не выполняет автоматическую торговлю.

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

НастройкаОписание
volume_filter Порог фильтрации объёма в процентах. Определяет минимальный объём сделки для учёта в расчётах.
price_filter Порог фильтрации по цене в процентах. Свечи с изменением цены меньше указанного значения исключаются из расчётов.
smallest_price_increment Минимальный инкремент цены, используемый для нормализации расчётов.
Size Масштабный коэффициент для отображения значений объёма на графике.
total_days Количество дней истории, используемых для расчёта индикатора.
multiple_days Переключатель, определяющий, учитывать ли данные нескольких торговых дней при расчёте.
session_close Время закрытия торговой сессии в формате ЧЧММСС (например, 170000 — 17:00:00).
Получить полный код

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

#property version   "1.1"
#property strict

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_label1 "PlotLEV"
#property indicator_color2 Red
#property indicator_label2 "PlotSEV"
#property indicator_color3 Blue
#property indicator_label3 "Total"

extern int volume_filter = 5; // VolumeFilter %
extern int price_filter = 1; // PriceFilter %
extern double smallest_price_increment = 0.01; // Smallest Price Increment
extern double Size = 0.001; // Size
extern int total_days = 15; // Total Days
extern bool multiple_days = true; // Multiple days
extern string session_close = "170000"; // Session close

double PlotLEV[], PlotSEV[], xDayCount[], TotalEffectiveVolume[], LargeEffectiveVolume[], SmallEffectiveVolume[], total[];
double aEffectiveVolume[1440], aTmp[1440];

string IndicatorName;
string IndicatorObjPrefix;

string GenerateIndicatorName(const string target)
{
   string name = target;
   int try = 2;
   while (WindowFind(name) != -1)
   {
      name = target + " #" + IntegerToString(try++);
   }
   return name;
}

int _total_days;
int SessionEndTime;

int ParseTime(const string time, string &error)
{
   int time_parsed = (int)StringToInteger(time);
   int seconds = time_parsed % 100;
   if (seconds > 59)
   {
      error = "Incorrect number of seconds in " + time;
      return -1;
   }
   time_parsed /= 100;
   int minutes = time_parsed % 100;
   if (minutes > 59)
   {
      error = "Incorrect number of minutes in " + time;
      return -1;
   }
   time_parsed /= 100;
   int hours = time_parsed % 100;
   if (hours > 23)
   {
      error = "Incorrect number of hours in " + time;
      return -1;
   }
   return (hours * 60 + minutes) * 60 + seconds;
}

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

int deinit()
{
   ObjectsDeleteAll(ChartID(), IndicatorObjPrefix);
   return(0);
}

int start()
{
      // код доступен только после оплаты
   }
   if (Bars <= 1) 
      return 0;
   int ExtCountedBars = IndicatorCounted();
   if (ExtCountedBars < 0) 
      return -1;

   double DayCount = 0;
   int NumBars = 0;
   datetime StartDate = iTime(NULL, PERIOD_D1, 0) - (_total_days + 2) * 86400;
   int limit = Bars - 2;
   int i = limit;
   long TotalDailyVolume = 0;
   double VolumeFilter = 0;
   double TotalDailyEV = 0;
   while (i >= 0)
   {
      if (Time[i] >= StartDate)
      {
         TotalDailyVolume += Volume[i];
         if (DayCount == 0)
         {
            NumBars                 = 0;
            LargeEffectiveVolume[i] = 0;
            SmallEffectiveVolume[i] = 0;
            PlotLEV[i]              = EMPTY_VALUE;
            PlotSEV[i]              = EMPTY_VALUE;
            total[i] = EMPTY_VALUE;
         }
         else
         {
            NumBars++;
            double EffectiveVolume = GetEffectiveVolume(i, VolumeFilter);
  

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

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

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

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

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

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

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