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

clusterbox_ad neo_5978916310816397266.mq4

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

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

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

О программе

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

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

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

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

НастройкаОписание
i_pointsInBox Количество пунктов в одном кластере
i_string1 Разделитель групп настроек
i_minVolumeLevel1 Минимальный объём уровня 1
i_colorLevel1 Цвет уровня 1
i_minVolumeLevel2 Минимальный объём уровня 2
i_colorLevel2 Цвет уровня 2
i_minVolumeLevel3 Минимальный объём уровня 3
i_colorLevel3 Цвет уровня 3
i_minVolumeLevel4 Минимальный объём уровня 4
i_colorLevel4 Цвет уровня 4
i_minVolumeLevel5 Минимальный объём уровня 5
i_colorLevel5 Цвет уровня 5
i_string2 Разделитель групп настроек
i_useNeededScale Задать масштаб графика
i_chartScale Масштаб графика
i_showClusterGrid Показывать сетку кластеров
i_gridColor Цвет линий кластеров
i_indBarsCount Количество баров для отображения
i_string3 Разделитель групп настроек
i_markMaximum Маркировать максимум
i_MarkerWidth Ширина маркера в пикселах
i_MarkerHeight Высота маркера в пикселах
i_MarkerLineThickness Толщина линии маркера
i_colorMarker Цвет маркера
i_Transparency Прозрачность (0..255)
Получить полный код

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

#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           = 10;                                                       // 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           = clrAqua;                                               // Color of level 1 / Цвет уровня 1
input int      i_minVolumeLevel2       = 4;                                                      // Minimal volume. Level 2 / Минимальный объем. Уровень 2
input color    i_colorLevel2           = clrDarkSlateGray;                                             // Color of level 2 / Цвет уровня 2
input int      i_minVolumeLevel3       = 25;                                                      // Minimal volume. Level 3 / Минимальный объем. Уровень 3
input color    i_colorLevel3           = clrSalmon;                                             // Color of level 3 / Цвет уровня 3
input int      i_minVolumeLevel4       = 50;                                                     // Minimal volume. Level 4 / Минимальный объем. Уровень 4
input color    i_colorLevel4           = clrBlue;                                                  // Color of level 4 / Цвет уровня 4
input int      i_minVolumeLevel5       = 100;                                                     // 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 / Кол-во баров отображения
input string   i_string3               = "Расширенные параметры";                                  // ==============================================
extern bool    i_markMaximum           = true;                                                     // Mark Maximum? / Маркировать Максимум?
input int      i_MarkerWidth           = 25;                                                       // Marker Width in Pixels / Ширина Маркера в Пикселах
input int      i_MarkerHeight          = 15;                                                       // Marker Height in Pixels / Высота Маркера в Пикселах
input int      i_MarkerLineThickness   = 1;                                                        // Marker Line Thickness / Толщина Линии Маркера
input color    i_colorMarker           = clrWhite;                                                 // Color of Marker / Цвет Маркера
input int      i_Transparency          = 255;                                                      // Transparency (0..255) / Прозрачность (0..255)

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;                                                // Дата/время последнего з

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

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

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

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

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

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

Стоимость полного кода
1 795,10₽ ≈ $21.94