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

bettervolumeticks_ alerts + text.mq4

Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, написанный на языке MQL4. Он выполняет расчёт аналитических показателей на основе данных тикового объёма и отображает результаты в отдельном окне с использованием девяти индикаторных буферов.

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

Продукт оснащён системой уведомлений, которая срабатывает при появлении новых объёмных сигналов на заданном баре. Уведомления могут отправляться в виде всплывающих сообщений, звуковых сигналов, электронных писем или push-уведомлений. Также индикатор отображает на графике метки с текущим соотношением объёма покупок и продаж.

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

НастройкаОписание
VolPeriod Период сглаживания объёма — Целочисленный параметр периода сглаживания объёма
Jurik phase (VolPhase) Фаза сглаживания Jurik — Числовой параметр фазы сглаживания Jurik
Jurik smooth double (VolDouble) Jurik двойное сглаживание — Переключатель Jurik-двойного сглаживания
LookBack Глубина анализа — Целочисленный параметр, задающий глубину анализа для поиска минимального и максимального объёма
BuySellDistance Расстояние покупок и продаж — Числовой параметр, задающий расстояние для разделения покупок и продаж
alertsOn Включить уведомления — Главный переключатель, включающий или отключающий все уведомления
alertsOnCurrent Уведомлять о текущем баре — Переключатель, определяющий, уведомлять ли о сигнале на текущем баре
alertsMessage Всплывающие сообщения — Переключатель отображения всплывающих сообщений-уведомлений
alertsSound Звуковой сигнал — Переключатель воспроизведения звукового сигнала при уведомлении
alertsEmail Уведомления по электронной почте — Переключатель отправки уведомлений по электронной почте
alertsNotify Push-уведомления — Переключатель отправки push-уведомлений
soundFile Файл звукового уведомления — Текстовый параметр, указывающий путь к звуковому файлу уведомления
ShowLabels Показывать метки — Переключатель, определяющий отображение меток покупок и продаж на графике
labelsIdentifier Идентификатор меток — Текстовый параметр, задающий идентификатор меток для их поиска и удаления
fontSize Размер шрифта меток — Целочисленный параметр размера шрифта меток на графике
xDistance Горизонтальное смещение меток — Целочисленный параметр горизонтального смещения меток от угла графика
yDistance Вертикальное смещение меток — Целочисленный параметр вертикального смещения меток от угла графика
LabelsColorUp Цвет меток покупателей — Цвет меток, отображающих преобладание покупателей
LabelsColorNeutral Цвет нейтральных меток — Цвет меток, отображающих нейтральное соотношение объёмов
LabelsColorDown Цвет меток продавцов — Цвет меток, отображающих преобладание продавцов
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 9
#property indicator_color1  clrRed
#property indicator_color2  clrDarkGray
#property indicator_color3  clrYellow
#property indicator_color4  clrLime
#property indicator_color5  clrWhite
#property indicator_color6  clrMagenta
#property indicator_color7  clrLime
#property indicator_color8  clrRed
#property indicator_color9  clrRed
#property indicator_width1  2
#property indicator_width2  2
#property indicator_width3  2
#property indicator_width4  2
#property indicator_width5  2
#property indicator_width6  2
#property indicator_width7  2
#property indicator_width8  2
#property indicator_width9  2

input int       VolPeriod          = 15;
input double    VolPhase           = 0.0;              // Jurik phase 
input bool      VolDouble          = false;            // Jurik smooth double
input int       LookBack           = 7;
input double    BuySellDistance    = 50;
input string    note               = "turn on Alert = true; turn off = false";
input bool      alertsOn           = true;
input bool      alertsOnCurrent    = true;
input bool      alertsMessage      = true;
input bool      alertsSound        = true;
input bool      alertsEmail        = false;
input bool      alertsNotify       = false;
input string    soundFile          = "alert2.wav";
input bool      ShowLabels         = true;
input string    labelsIdentifier   = "better volume1";
input int       fontSize           = 8;
input int       xDistance          = 10;
input int       yDistance          = 10;
input color     LabelsColorUp      = clrLimeGreen;
input color     LabelsColorNeutral = clrDimGray;
input color     LabelsColorDown    = clrRed;

double modifier = 1,ClimaxHi[],Neutral[],LoVolume[],Churn[],ClimaxLo[],ClimaxChurn[],AvgVol[],avda[],avdb[],UpTicks[],DnTicks[],VolRange[],VolSort[],slope[];
string symbol,shortName;
int    digits;

int OnInit()
{
      // код доступен только после оплаты
   }
void OnDeinit(const int reason)
{
   string lookFor       = labelsIdentifier+":";
   int    lookForLength = StringLen(lookFor);
   for (int i=ObjectsTotal()-1; i>=0; i--)
   {
      string objectName = ObjectName(i);
         if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
   }
}

int  OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
      // код доступен только после оплаты
   }
   int i=rates_total-prev_calculated+1; if (i>=rates_total) i=rates_total-1; 

   if  (slope[i] == -1) CleanPoint(i,avda,avdb);
   for (; i>=0 && !_StopFlag; i--)
   {
      VolSort[i]   = tick_volume[i]/modifier;
      AvgVol[i]    = iDSmooth(VolSort[i],VolPeriod,VolPhase,VolDouble,i);
      double Range = high[i]-low[i];
      double CountUp = (tick_volume[i]+(close[i]-open[i])/_Point)/2;
      double CountDn = tick_volume[i]-CountUp;
      double diff    = fabs(CountUp-CountDn);
      slope[i] = (i<rates_total-1) ? (AvgVol[i]>AvgVol[i+1]) ? 1 : (AvgVol[i]<AvgVol[i+1]) ? -1 : slope[i+1] : 0;  
      avda[i]  = avdb[i]  = EMPTY_VALUE; if (slope[i] == -1) PlotPoint(i,avda,avdb,AvgVol);  

      UpTicks[i] = CountUp*Range;
      DnTicks[i] = CountDn*Range;

      if (Range != 0) { VolRange[i] = tick_volume[i]/Range; }

      double LoVol = tick_volume[iLowest(NULL, 0,MODE_VOLUME,LookBack,i)];
      double HiVol = tick_volume[iHighest(NULL,0,MODE_VOLUME,LookBack,i)];

      double HiUpTick = UpTicks[FindMaxUp(i)];
      double HiDnTick = DnTicks[FindMaxDn(i)];
      double MaxVol   = VolRange[FindMaxVol(i)];

      Neutral[i]     = tick_volume[i]/modifier;
      ClimaxHi[i]    = EMPTY_VALUE;      
      ClimaxLo[i]    = EMPTY_VALUE;      
      Churn[i]       = EMPTY_VALUE;      
      LoVolume[i]    = EMPTY_VALUE;      
      ClimaxChurn[i] = EMPTY_VALUE;      

      if (tick_volume[i] == LoVol)
      {
         LoVolume[i] = tick_volume[i]/modifier;
         Neutral[i]  = EMPTY_VALUE;
      }

      if (VolRange[i] == MaxVol)
      {
         Churn[i]    = tick_volume[i]/modifier;                
         Neutral[i]  = EMPTY_VALUE;
         LoVolume[i] = EMPTY_VALUE;
      }

      if (UpTicks[i] == HiUpTick && close[i] >= (high[i]+low[i])*0.5)
      {
         ClimaxHi[i] = tick_volume[i]/modifier;
         Neutral[i]  = EMPTY_VALUE;
         LoVolume[i] = EMPTY_VALUE;
         Churn[i]    = EMPTY_VALUE;
      }   

      if (DnTicks[i] == HiDnTick && close[i] <= (high[i]+low[i])*0.5)
      {
         ClimaxLo[i] = tick_volume[i]/modifier;
         Neutral[i]  = EMPTY_VALUE;
         LoVolume[i] = EMPTY_VALUE;
         Churn[i]    = EMPTY_VALUE;
      }   

      if (VolRange[i] == MaxVol && (ClimaxHi[i] != EMPTY_VALUE || ClimaxLo[i] != EMPTY_VALUE))
      {
         ClimaxChurn[i] = tick_volume[i]/modifier;
         ClimaxHi[i]    = EMPTY_VALUE;
         ClimaxLo[i]    = EMPTY_VALUE;
         Churn[i]       = EMPTY_VALUE;
         Neutral[i]     = EMPTY_VALUE;
       }

      }

      if (alertsOn)
      {
        int whichBar = 1; if (alertsOnCurrent) whichBar = 0; 
        static datetime time1 = 0;
        static string   mess1 = "";
   

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

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

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

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

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

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

Стоимость полного кода
1 024,60₽ ≈ $12.52