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

clusterbox_ad.mq4

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

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

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

О программе

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

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

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

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

НастройкаОписание
Points in one cluster / ?????????? ??????? ? ????? ???????? (i_pointsInBox) Точек в одном кластере — Количество ценовых точек в одном кластере.
============================================== (i_string1) Разделитель 1 — Текстовый разделитель между группами настроек.
Minimal volume. Level 1 / ??????????? ?????. ??????? 1 (i_minVolumeLevel1) Минимальный объём уровня 1 — Минимальный объём для первого уровня.
Color of level 1 / ???? ?????? 1 (i_colorLevel1) Цвет уровня 1 — Цвет отображения первого уровня объёма.
Minimal volume. Level 2 / ??????????? ?????. ??????? 2 (i_minVolumeLevel2) Минимальный объём уровня 2 — Минимальный объём для второго уровня.
Color of level 2 / ???? ?????? 2 (i_colorLevel2) Цвет уровня 2 — Цвет отображения второго уровня объёма.
Minimal volume. Level 3 / ??????????? ?????. ??????? 3 (i_minVolumeLevel3) Минимальный объём уровня 3 — Минимальный объём для третьего уровня.
Color of level 3 / ???? ?????? 3 (i_colorLevel3) Цвет уровня 3 — Цвет отображения третьего уровня объёма.
Minimal volume. Level 4 / ??????????? ?????. ??????? 4 (i_minVolumeLevel4) Минимальный объём уровня 4 — Минимальный объём для четвёртого уровня.
Color of level 4 / ???? ?????? 4 (i_colorLevel4) Цвет уровня 4 — Цвет отображения четвёртого уровня объёма.
Minimal volume. Level 5 / ??????????? ?????. ??????? 5 (i_minVolumeLevel5) Минимальный объём уровня 5 — Минимальный объём для пятого уровня.
Color of level 5 / ???? ?????? 5 (i_colorLevel5) Цвет уровня 5 — Цвет отображения пятого уровня объёма.
============================================== (i_string2) Разделитель 2 — Текстовый разделитель между группами настроек.
Use the specific chart scale? / ?????? ??????? ???????? (i_useNeededScale) Использовать заданный масштаб — Переключатель использования заданного масштаба графика.
Chart scale / ??????? (i_chartScale) Масштаб графика — Выбор масштаба графика для отображения кластеров.
Display the cluster grid / ?????????? ????? ????????? (i_showClusterGrid) Отображение кластерной сетки — Включает или отключает отображение кластерной сетки.
Color of clusters lines / ???? ????? ????????? (i_gridColor) Цвет линий кластеров — Цвет линий кластерной сетки на графике.
Number of bars to display / ???-?? ????? ??????????? (i_indBarsCount) Количество баров для отображения — Количество баров, отображаемых на графике.
Получить полный код

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

#property description "English: Displays the ticks volume of candles in the form of clusters.\nRussian: ??????????? ??????? ??????? ????? ? ???? ?????????."
#property strict

#property indicator_chart_window
#property indicator_buffers 1

#define MAX_POINTS_IN_CANDLE 30000                                                                 // ????????? ??? ?????? ????????? ??????? ?????????
#define MAX_TICKS_IN_CANDLE 1000000                                                                // ????????? ??? ?????? ????????? ??????? ?????????
#define MAX_VOLUMES_SHOW      5                                                                    // ?????????? ??????? ????????????? ??????, ??????? ??????? ??????????

struct LevelVolumeColor                                                                            // ????????? ???????????? ??????? ??????, ?????????? ??????? ?? ??????? ?????? ????????????.. 
  {                                                                                                 // ..??????????????? ??????
   color             levelColor;
   int               levelMinVolume;
  };

struct TickStruct                                                                                  // ????????? ??? ?????? ?????? ?? ????? ????
  {
   datetime          time;
   double            bid;
   double            ask;
  };

enum ENUM_YESNO
  {
   YES,                                                                                           // Yes / ??
   NO                                                                                             // No / ???
  };

enum ENUM_CHARTSCALE
  {
   SCALE_SMALLER,                                                                                  // Smallest / ??????????
   SCALE_SMALL,                                                                                    // Small / ?????
   SCALE_MEDIUM,                                                                                   // Medium / ???????
   SCALE_BIG,                                                                                      // Big / ???????
   SCALE_BIGGEST,                                                                                  // Greater / ???????
   SCALE_LARGE                                                                                     // Biggest / ??????????
  };

input int      i_pointsInBox           = 50;                                                       // Points in one cluster / ?????????? ??????? ? ????? ????????
input string   i_string1               = "Min volumes and colors / ???. ?????? ? ?????";           // ==============================================
input int      i_minVolumeLevel1       = 1;                                                        // Minimal volume. Level 1 / ??????????? ?????. ??????? 1
input color    i_colorLevel1           = clrSkyBlue;                                               // Color of level 1 / ???? ?????? 1
input int      i_minVolumeLevel2       = 250;                                                      // Minimal volume. Level 2 / ??????????? ?????. ??????? 2
input color    i_colorLevel2           = clrTurquoise;                                             // Color of level 2 / ???? ?????? 2
input int      i_minVolumeLevel3       = 500;                                                      // Minimal volume. Level 3 / ??????????? ?????. ??????? 3
input color    i_colorLevel3           = clrRoyalBlue;                                             // Color of level 3 / ???? ?????? 3
input int      i_minVolumeLevel4       = 1000;                                                     // Minimal volume. Level 4 / ??????????? ?????. ??????? 4
input color    i_colorLevel4           = clrBlue;                                                  // Color of level 4 / ???? ?????? 4
input int      i_minVolumeLevel5       = 2000;                                                     // Minimal volume. Level 5 / ??????????? ?????. ??????? 5
input color    i_colorLevel5           = clrMagenta;                                               // Color of level 5 / ???? ?????? 5
input string   i_string2               = "????????? ???????";                                      // ==============================================
input ENUM_YESNO i_useNeededScale      = YES;                                                      // Use the specific chart scale? / ?????? ??????? ????????
input ENUM_CHARTSCALE i_chartScale     = SCALE_LARGE;                                              // Chart scale / ???????
input ENUM_YESNO i_showClusterGrid     = YES;                                                      // Display the cluster grid / ?????????? ????? ?????????
input color    i_gridColor             = clrDarkGray;                                              // Color of clusters lines / ???? ????? ?????????

input int      i_indBarsCount=10000;                                                    // Number of bars to display / ???-?? ????? ???????????

bool g_activate,                                                                              // ??????? ???????? ????????????? ??????????
g_isShowInfo,                                                                                 // ??????? ????????????? ??????????? ?????? ??????????
g_chartForeground,                                                                            // ??????? ?????????? ?????? ?? ???????? ?????
g_init;                                                                                       // ?????????? ??? ????????????? ??????????? ?????????? ?????? ??????? ? ?????? ??????????..

int g_currentScale,// ??????? ??????? ??????????? ?? ?????? ????????????? ??????????
g_volumePriceArray[MAX_POINTS_IN_CANDLE];                                                      // ??????? ?????? ???????, ? ??????? ???????????? ?????????? ?????, ??????? ?????? ??..

double g_ticksPrice[MAX_TICKS_IN_CANDLE];                                                      // ?????? ??? ?????????? ???????? ?????? ?????, ???????????? ?? ???? ?????

double g_point,
g_tickSize;

TickStruct        g_ticks[];                                                                       // ?????? ??? ???????? ?????, ??????????? ????? ?????? ?????? ??????????                    
LevelVolumeColor g_volumeLevelsColor[MAX_VOLUMES_SHOW];                                            // ?????? ??????? ?, ??????????????? ??, ?????? ???????

#define PREFIX                                  "CLSTRBX_"                                         // ??????? ??????????? ????????, ???????????? ??????????? 

#define SIGN_BUTTON                             "INFO_BUTTON_"                                     // ?????? ????? ???????????? ??????? "??????"
#define BUTTON_FONT_NAME                        "MS Sans Serif"                                    // ??? ?????? ??? ??????????? ?????? ??????
#define BUTTON_TOOLTIP                          "???/???? ??????????? ????????? ? ?????"           // ????????? ? ?????????? ??????
#define BUTTON_XCOORD                           2                                                  // ?-?????????? ?????? ???????? ???? ??????
#define BUTTON_YCOORD                           14                                                 // Y-?????????? ?????? ???????? ???? ??????
#define BUTTON_WIDTH                            110                                                // ?????? ??????
#define BUTTON_HEIGHT                           20                                                 // ?????? ??????
#define BUTTON_FONT_SIZE                        7                                                  // ?????? ?????? ??? ?????? ??????
#define BUTTON_TEXT_COLOR                       clrBlack                                           // ???? ?????? ?????? ? ??????
#define BUTTON_BORDER_COLOR                     clrNONE                                            // ???? ??????? ??????
#define BUTTON_BACKGROUND_COLOR                 clrLightGray                                       // ???? ??????? ??????

#define FONT_NAME                               "MS Sans Serif"
#define FONT_SIZE                               7

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

bool IsTuningParametersCorrect()
  {
   string name=WindowExpertName();

   int period= Period();
   if(period == 0)
     {
      Alert(name,": ????????? ?????? ????????? - ?????? 0 ?????. ????????? ????????.");
      return (false);
     }

   g_point=Point;
   if(g_point==0)
     {
      Alert(name,": ????????? ?????? ????????? - ???????? ?????? ????? ????. ????????? ????????.");
      return (false);
     }

   g_tickSize=MarketInfo(Symbol(),MODE_TICKSIZE);
   if(g_tickSize==0)
     {
      Alert(name,": ????????? ?????? ????????? - ???????? ???? ?????? ???? ????? ????. ????????? ????????.");
      return (false);
     }

   if(i_pointsInBox<1)
     {
      Alert(name,": ?????????? ??????? ? ???????? ?????? ???? ?????????????. ????????? ????????.");
      return (false);
     }

   return (true);
  }

bool IsLoadTempTicks()
  {

   int hTicksFile=FileOpen(Symbol()+"temp.tks",FILE_BIN|FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE);
   if(hTicksFile<1)
      return true;

   int recSize=(int)(FileSize(hTicksFile)/sizeof(TickStruct));
   if(ArrayResize(g_ticks,recSize,1000)<0)
     {
      Alert(WindowExpertName(),": ?? ??????? ???????????? ?????? ??? ???????? ?????? ?? ?????????? ????? ?????. ????????? ????????.");
      FileClose(hTicksFile);
      return false;
     }

   int i=0;
   while(i<recSize)
     {
      if(FileReadStruct(hTicksFile,g_ticks[i])==0)
        {
         Alert(WindowExpertName(),": ?????? ?????? ?????? ?? ?????????? ?????. ????????? ????????.");
         return false;
        }
      i++;
     }

   FileClose(hTicksFile);
   return true;
  }

void CreateVolumeColorsArray()
  {
   g_volumeLevelsColor[0].levelMinVolume = i_minVolumeLevel1;
   g_volumeLevelsColor[1].levelMinVolume = i_minVolumeLevel2;
   g_volumeLevelsColor[2].levelMinVolume = i_minVolumeLevel3;
   g_volumeLevelsColor[3].levelMinVolume = i_minVolumeLevel4;
   g_volumeLevelsColor[4].levelMinVolume = i_minVolumeLevel5;

   g_volumeLevelsColor[0].levelColor = i_colorLevel1;
   g_volumeLevelsColor[1].levelColor = i_colorLevel2;
   g_volumeLevelsColor[2].levelColor = i_colorLevel3;
   g_volumeLevelsColor[3].levelColor = i_colorLevel4;
   g_volumeLevelsColor[4].levelColor = i_colorLevel5;
  }

void SetChartView()
  {

   g_chartForeground=(bool)ChartGetInteger(0,CHART_FOREGROUND);
   ChartSetInteger(0,CHART_FOREGROUND,false);

   if(i_useNeededScale==NO)
      return;

   g_currentScale=(int)ChartGetInteger(0,CHART_SCALE);
   ChartSetInteger(0,CHART_SCALE,(long)i_chartScale);
  }

void OnDeinit(const int reason)
  {
   if(!IsSavedFile())    // ???? ?? ???? ?? ???????????? ??????????? ?? ???????? ??????, ?? ?? ???????? ??????? ?????????
      SaveTempTicks();   // ?????????? ?????? ? ?????, ??????????? ?? ??????? ?????? ?????? ??????????   
   DeleteAllObjects();
   RestoreChartView();
  }

bool IsSavedFile()
  {

   int lastTickIndex=ArraySize(g_ticks)-1;
   if(lastTickIndex<0) // ?? ???? ??? ?? ??? ???????. ?????? ?????? ?? ?????????
      return true;

   int hTicksFile=FileOpen(Symbol()+"temp.tks",FILE_BIN|FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE);
   if(hTicksFile<1)
      return false;

   if(!FileSeek(hTicksFile,-sizeof(TickStruct),SEEK_END))
     {
      FileClose(hTicksFile);
      return false;
     }

   TickStruct tick;
   uint readBytes=FileReadStruct(hTicksFile,tick);
   FileClose(hTicksFile);
   if(readBytes==0)
      return false;

   return tick.time >= g_ticks[lastTickIndex].time;                                                // ????/????? ?????????? ??????????? ? ????? ???? ?????? ??? ????? ????/???????..

  }

void SaveTempTicks()
  {

   int hTicksFile=FileOpen(Symbol()+"temp.tks",FILE_BIN|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);
   if(hTicksFile<1)
      return;

   int total=ArraySize(g_ticks),i=0;
   while(i<total)
     {
      if(FileWriteStruct(hTicksFile,g_ticks[i])==0)
        {
         Print("?????? ?????????? ?????? ?? ????????? ????...");
         return;
        }
      i++;
     }

   FileClose(hTicksFile);

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

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

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

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

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

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

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