clusterbox_ad neo_5978916310816397266.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.