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

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 и перейдите к оплате.

Стоимость полного кода
1 242,80₽ ≈ $15.19