akif_market_statistics_drag_v6_noexpire.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «akif_market_statistics_drag_v6_noexpire.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Market Statistics» для MetaTrader 4 рассчитывает и отображает аналитические уровни на графике: профиль объёма (PVP), объёмно-взвешенную среднюю цену (VWAP), стандартные отклонения (SD1–SD3) и гистограмму объёмов с тепловой раскраской. Также строится линия точки контроля (POC) и отображается показатель перекоса (Skew) между VWAP и PVP.
Период анализа задаётся двумя перетаскиваемыми вертикальными линиями времени (начальная и конечная). Пользователь может выбрать режим объёма — тиковый или TPO (Time Price Opportunity), а также настроить видимость каждого аналитического элемента и стиль отображения меток.
Индикатор использует 8 буферов для отрисовки линий PVP, VWAP и стандартных отклонений, а также создаёт графические объекты для гистограммы, линии POC и текстовых меток. При каждом новом баре или перетаскивании линий происходит пересчёт всех значений.
Настройки программы
| Настройка | Описание |
|---|---|
| InstanceOnChart | Экземпляр на графике — Номер экземпляра индикатора на графике, используемый для уникальной идентификации объектов. |
| UseTPOInsteadTickVolume | Использовать TPO вместо тикового объёма — Переключатель выбора режима объёма: TPO вместо тикового объёма. |
| EndingDragLine | Конечная перетаскиваемая линия — Переключатель, определяющий, используется ли конечная перетаскиваемая линия для задания конца периода анализа. |
| DayStartingHour | Час начала дня — Час начала нового торгового дня, используемый для определения границ периода анализа. |
| HistogramAmplitudePercent | Амплитуда гистограммы в процентах — Процентная амплитуда гистограммы объёмов, задающая ширину отображаемых столбцов. |
| Show_SD1 | Показать SD1 — Переключатель видимости первого уровня стандартного отклонения от VWAP. |
| Show_SD2 | Показать SD2 — Переключатель видимости второго уровня стандартного отклонения от VWAP. |
| Show_SD3 | Показать SD3 — Переключатель видимости третьего уровня стандартного отклонения от VWAP. |
| Show_Histogram | Показать гистограмму — Переключатель видимости гистограммы объёмов с тепловой раскраской. |
| Show_PVP | Показать PVP — Переключатель видимости линии профиля объёма (PVP). |
| Show_VWAP | Показать VWAP — Переключатель видимости линии объёмно-взвешенной средней цены (VWAP). |
| Show_POC | Показать POC — Переключатель видимости линии точки контроля (POC). |
| POC_Color | Цвет линии POC — Цвет линии точки контроля (POC). |
| POC_Width | Толщина линии POC — Толщина линии точки контроля (POC). |
| POC_Style | Стиль линии POC — Стиль отображения линии точки контроля (POC). |
| LabelFontSize | Размер шрифта меток — Размер шрифта текстовых меток стандартного отклонения и перекоса на графике. |
| SDLabelColor | Цвет меток стандартного отклонения — Цвет текста меток стандартного отклонения. |
Поиск по коду файла
???#property copyright "Copyright ? 2020, Akif TOKUZ"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Crimson //PVP
#property indicator_width1 2
#property indicator_color2 Aqua //VWAP
#property indicator_width2 2
#property indicator_color3 Gray //SD1Pos
#property indicator_width3 1
#property indicator_style3 2
#property indicator_color4 Gray //SD1Neg
#property indicator_width4 1
#property indicator_style4 2
#property indicator_color5 Gray//SD2Pos
#property indicator_width5 1
#property indicator_style5 2
#property indicator_color6 Gray //SD2Neg
#property indicator_width6 1
#property indicator_style6 2
#property indicator_color7 Gray //SD2Pos
#property indicator_width7 1
#property indicator_style7 2
#property indicator_color8 Gray //SD2Neg
#property indicator_width8 1
#property indicator_style8 2
extern int InstanceOnChart = 1;
extern bool UseTPOInsteadTickVolume = false;
extern bool EndingDragLine = false;
extern int DayStartingHour=0;
extern int HistogramAmplitudePercent = 50;
extern bool Show_SD1 = true;
extern bool Show_SD2 = true;
extern bool Show_SD3 = true;
extern bool Show_Histogram = true;
extern bool Show_PVP = true;
extern bool Show_VWAP = true;
extern bool Show_POC = true;
extern color POC_Color = clrAqua;
extern int POC_Width = 4;
extern int POC_Style = 0;
extern int LabelFontSize = 15;
extern color SDLabelColor = clrGray;
int startDaysBack=1;
int endDaysBack=0;
double PVP[];
double VWAP[];
double SD1Pos[];
double SD1Neg[];
double SD2Pos[];
double SD2Neg[];
double SD3Pos[];
double SD3Neg[];
double Hist[]; // drawn specifically
string label="MS_Daily_"+InstanceOnChart+"_";
string OBJECT_PREFIX;
int Bars_Back = 0; // Shows the starting bar for given date
int Bars_Back_End = 0; // Shows the end bar for given date
int items; // numbers of items inside volume histogram
double SD; // standart deviation
datetime CurrentCandleTime = D'2034.03.05 15:46:58';
bool startLineDragged = false;
bool endLineDragged = false;
bool firstRun;
int FindStartIndex()
{
if (Bars>=Bars_Back) return(Bars_Back);
return(0);
}
int FindEndIndex()
{
if (Bars_Back_End<0) return(0);
return(Bars_Back_End);
}
int init()
{
// код доступен только после оплаты
}
int findStartingIndexOfDayPrior(int prior){
int result=0;
if (prior==0) return 0;
MqlDateTime currentTime;
MqlDateTime prevTime;
int counter=0;
int endIndex=0;
for (int i=0;i<Bars-2;i++){
TimeToStruct(Time[i],currentTime);
TimeToStruct(Time[i+1],prevTime);
if (currentTime.day_of_year!=prevTime.day_of_year){ // day change
if (currentTime.hour<DayStartingHour && i>0){
MqlDateTime hourTime;
for (int j=i-1;j>=0;j--){
TimeToStruct(Time[j],hourTime);
if (hourTime.day_of_year!=currentTime.day_of_year) break;
if (hourTime.hour==DayStartingHour){
i=j;
break;
}
}
}
result=i;
counter++;
if (counter>=prior) break;
}
}
return result;
}
void ObDeleteObjectsByPrefix(string Prefix)
{
int L = StringLen(Prefix);
int i = 0;
while(i < ObjectsTotal())
{
string ObjName = ObjectName(i);
if(StringSubstr(ObjName, 0, L) != Prefix)
{
i++;
continue;
}
ObjectDelete(ObjName);
}
}
void drawLine(string prefix,datetime startTime,datetime endTime,double upLimit,double downLimit,int size,color rectColor)
{
string ObjectText=prefix;
ObjectCreate(ObjectText,OBJ_TREND,0,startTime,upLimit,endTime,downLimit);
ObjectSet(ObjectText,OBJPROP_STYLE,DRAW_LINE);
ObjectSet(ObjectText,OBJPROP_COLOR,rectColor);
ObjectSet(ObjectText,OBJPROP_BACK,false);
ObjectSet(ObjectText,OBJPROP_RAY,false);
ObjectSet(ObjectText,OBJPROP_WIDTH,size);
}
int start()
{
// код доступен только после оплаты
}
double TotalVolume=0;
double TotalPV=0;
int n;
int old_Bars_Back = Bars_Back;
int old_Bars_Back_End = Bars_Back_End;
color SkewLabelColor = clrGray;
if(ObjectFind(label+"Starting_Time") == 0)
{
Bars_Back= iBarShift(NULL,0,ObjectGet(label+"Starting_Time", OBJPROP_TIME1));
}
if(ObjectFind(label+"End_Time") == 0)
{
Bars_Back_End= iBarShift(NULL,0,ObjectGet(label+"End_Time", OBJPROP_TIME1));
}
if (old_Bars_Back != Bars_Back){
startLineDragged = true;
}
if (old_Bars_Back_End != Bars_Back_End){
endLineDragged = true;
}
if(ObjectFind(label+"Starting_Time") != 0)
{
Bars_Back=FindStartIndex();
if (Bars_Back != 0){
ObjectCreate(label+"Starting_Time", OBJ_VLINE, 0, Time[Bars_Back], 0);
ObjectSet(label+"Starting_Time", OBJPROP_TIME1, Time[Bars_Back]);
ObjectSet(label+"Starting_Time", OBJPROP_COLOR, Red);
ObjectSet(label+"Starting_Time", OBJPROP_WIDTH, 2);
}
}
if(ObjectFind(label+"End_Time") != 0)
{
Bars_Back_End=FindEndIndex();
if (Bars_Back_End != 0){
ObjectCreate(label+"End_Time", OBJ_VLINE, 0, Time[Bars_Back_End], 0);
ObjectSet(label+"End_Time", OBJPROP_TIME1, Time[Bars_Back_End]);
ObjectSet(label+"End_Time", OBJPROP_COLOR, Blue);
ObjectSet(label+"End_Time", OBJPROP_WIDTH, 1);
ObjectSet(label+"End_Time", OBJPROP_STYLE, STYLE_DOT);
}
}
int rectangleWidth = Bars_Back-Bars_Back_End + 1;
if (endLineDragged || startLineDragged || (Bars_Back_End==0 && CurrentCandleTime != Time[0]) || firstRun )
{
firstRun = false;
CurrentCandleTime = Time[0];
startLineDragged = false;
endLineDragged = false;
ArrayInitialize(PVP, EMPTY_VALUE);
ArrayInitialize(VWAP, EMPTY_VALUE);
ArrayInitialize(SD1Pos, EMPTY_VALUE);
ArrayInitialize(SD1Neg, EMPTY_VALUE);
ArrayInitialize(SD2Pos, EMPTY_VALUE);
ArrayInitialize(SD2Neg, EMPTY_VALUE);
ArrayInitialize(SD3Pos, EMPTY_VALUE);
ArrayInitialize(SD3Показано первые 50% кода (символов: 12428)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.