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