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

VSA MA3X

vsa ma3x murreymath with channel.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор VSA MA3X для MetaTrader 5 объединяет несколько методов технического анализа в одном окне. Он рассчитывает объёмное давление покупателей и продавцов на основе данных M1-таймфрейма, определяет зоны предложения и спроса по методике Volume Spread Analysis, строит уровни по системе Murree Math и отображает ценовые каналы с трендовыми линиями.

Индикатор использует восемь буферов для визуализации сигналов (Climax High, HighChurn, Climax Low, ClimaxChurn, Buyer Pressure, Seller Pressure и др.) и создаёт графические объекты для горизонтальных уровней, текстовых меток и трендовых линий канала. Параметры позволяют настраивать количество анализируемых баров, отображение подтверждений на следующей свече и смещение текстовых меток.

Функция RANGE вычисляет средние дневные диапазоны за различные периоды и выводит их в виде текстовых меток на графике. Все расчёты обновляются при каждом новом тике, а при деинициализации удаляются все созданные графические объекты.

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

НастройкаОписание
Note Заголовок блока VSA — Текстовый параметр, задающий заголовок блока сигналов VSA, отображаемый на графике.
WaitNextBarConfirmation Ожидание подтверждения на следующей свече — Включает ожидание подтверждения сигнала на следующей свече перед отображением сигналов предложения и спроса.
NumberOfBars Количество анализируемых баров — Задаёт количество баров, анализируемых индикатором для расчёта сигналов. При значении 0 используется количество доступных баров на графике.
P Период расчёта уровней — Задаёт период в барах для расчёта уровней Murree Math — количество баров назад от текущего бара для определения максимума и минимума цены.
StepBack Сдвиг назад для расчёта — Задаёт сдвиг в барах назад от параметра P для определения диапазона поиска экстремумов цены при расчёте уровней Murree Math.
Comments Отображать комментарии — Включает или отключает отображение комментариев на графике.
AngleText Угол текста — Задаёт угол наклона текста у объектов типа OBJ_TEXT, создаваемых индикатором.
Note2 Заголовок блока канала — Текстовый параметр, задающий заголовок блока канала, отображаемый на графике.
AllBars Количество баров для канала — Задаёт максимальное количество баров для построения ценового канала. При значении 0 или при меньшем количестве баров на графике используется текущее число баров.
BarsForFract Бары для фрактала — Задаёт количество баров для поиска фрактальных точек при построении канала. При значении 0 используется автоматический выбор в зависимости от таймфрейма.
Note3 Заголовок блока диапазона — Текстовый параметр, задающий заголовок блока среднего диапазона, отображаемый на графике.
Av_1 Период среднего диапазона 1 — Задаёт количество дней для расчёта среднего дневного диапазона, отображаемого в соответствующей текстовой метке.
Av_2 Период среднего диапазона 2 — Задаёт количество дней, используемое в подписи текстовой метки среднего диапазона за N дней.
Av_3 Период среднего диапазона 3 — Задаёт количество дней для расчёта среднего диапазона, отображаемого в соответствующей текстовой метке.
Av_4 Период среднего диапазона 4 — Задаёт количество дней для расчёта среднего диапазона, отображаемого в соответствующей текстовой метке.
Av_5 Период среднего диапазона 5 — Задаёт количество дней для расчёта среднего диапазона, отображаемого в соответствующей текстовой метке.
Av_6 Период среднего диапазона 6 — Задаёт количество дней для расчёта среднего диапазона, отображаемого в соответствующей текстовой метке.
Title_col Цвет заголовков — Задаёт цвет заголовочных текстовых меток на графике.
Label_col Цвет меток уровней — Задаёт цвет текстовых меток уровней Murree Math.
Av_col Цвет меток диапазона — Задаёт цвет текстовых меток значений среднего диапазона.
Total_col Цвет итоговых меток — Задаёт цвет текстовых меток итоговых значений среднего диапазона.
Total_Av_col Цвет меток общего диапазона — Задаёт цвет текстовых меток общего среднего диапазона.
Adjusts Signal Display Up & Down (Shift_UP_DN) Вертикальное смещение сигнальных меток — Задаёт вертикальное смещение текстовых меток сигнальных линий вверх и вниз в пикселях.
Adjusts Signal Display from side to side (Adjust_Side_to_side) Смещение текстовых меток по горизонтали — Задаёт горизонтальное смещение текстовых меток среднего диапазона в пикселях от правого края графика.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 8

#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_color3 White
#property indicator_color4 Magenta
#property indicator_color5 Lime
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_color8 Blue

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property indicator_width6 2

#define MMTop "MMTop"
#define MMBot "MMBot"
#define MMperiod "MMperiod"

extern string  Note = "VSA SIGNALS";
extern bool    WaitNextBarConfirmation = true;
extern int     NumberOfBars = 500;
extern int     P = 64;
extern int     StepBack = 0;
extern bool    Comments=true;
extern int     AngleText=90;
extern string  Note2 = "CHANNEL";
extern int     AllBars = 240;
extern int     BarsForFract = 0;
extern string  Note3 = "AVERAGE RANGE";
int Magic_num = 12345;
extern int Av_1  = 0;
extern int Av_2  = 1;
extern int Av_3  = 5;
extern int Av_4  = 10;
extern int Av_5  = 20;
extern int Av_6  = 30;
extern color Title_col    = DarkOrange;
extern color Label_col    = Gray;
extern color Av_col       = Red;
extern color Total_col    = Silver;
extern color Total_Av_col = Red;

extern int   Shift_UP_DN = 10;// Adjusts Signal Display Up & Down 
extern int   Adjust_Side_to_side  = 10;// Adjusts Signal Display from side to side

int     MAPeriod = 100;
int     LookBack = 20;

double  dmml = 0,
        dvtl = 0,
        sum  = 0,
        v1 = 0,
        v2 = 0,
        mn = 0,
        mx = 0,
        x1 = 0,
        x2 = 0,
        x3 = 0,
        x4 = 0,
        x5 = 0,
        x6 = 0,
        y1 = 0,
        y2 = 0,
        y3 = 0,
        y4 = 0,
        y5 = 0,
        y6 = 0,
        octave = 0,
        fractal = 0,
        range   = 0,
        finalH  = 0,
        finalL  = 0,
        mml[13];

string  ln_txt[13],        
        buff_str = "";

int     
        bn_v1   = 0,
        bn_v2   = 0,
        OctLinesCnt = 13,
        mml_thk = 8,
        mml_clr[13],
        mml_shft = 3,
        nTime = 0,
        CurPeriod = 0,
        nDigits = 0,
        i = 0;

double ExtMapBufferSHI[];

int    CurrentBar = 0;
double Step = 0;
int    B1 = -1, B2 = -1;
int    UpDown = 0;
double P1 = 0, P2 = 0, PP = 0;
int     AB = 300, BFF = 0;
int    ishift = 0;
double iprice = 0;
datetime T1, T2;

double red[],green[],white[],magenta[],P1Buffer[],P2Buffer[];

double ExtMapBuffer1[];
double ExtMapBuffer2[];

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {

  for(int i = 0; i < Bars; i++)
   {
      if(ObjectFind("VSA_BarSupply&Demand" + Time[i]) >= 0)
      {
         ObjectDelete("VSA_BarSupply&Demand" + Time[i]);
      }
   } 
   Comment(" ");   
for(i=0;i<OctLinesCnt;i++) {
    buff_str = "mml"+i;
    ObjectDelete(buff_str);
    buff_str = "mml_txt"+i;
    ObjectDelete(buff_str);
    }
     ObjectDelete("TL1");
	  ObjectDelete("TL2");
	  ObjectDelete("MIDL");
     DeleteLabels();

   return(0);
  }

void DelObj()
  {
	  ObjectDelete("TL1");
	  ObjectDelete("TL2");
	  ObjectDelete("MIDL");
  }

int TickVolume()
  {

   int i,ii;
   static int pii=-1;

   for(i = 0; i <iBars(Symbol(),PERIOD_M1) ; i++)
     {
       ii = iBarShift(Symbol(), Period(), iTime(Symbol(),PERIOD_M1,i), true);

       if (pii!=ii)
       {
         P1=0;
         P2=0;
         P1Buffer[ii]=0;
         P2Buffer[ii]=0;

       }

       if (ii != -1)
       {
         if (iClose(Symbol(),PERIOD_M1,i)>iClose(Symbol(),PERIOD_M1,i+1))
         {
           P1 = P1+(iVolume(Symbol(),PERIOD_M1,i));
         }
         if (iClose(Symbol(),PERIOD_M1,i)<iClose(Symbol(),PERIOD_M1,i+1))
         {
           P2 = P2+(iVolume(Symbol(),PERIOD_M1,i));
         }
         if (iClose(Symbol(),PERIOD_M1,i)==iClose(Symbol(),PERIOD_M1,i+1))
         {
           P1 = P1+(iVolume(Symbol(),PERIOD_M1,i)/2);
           P2 = P2+(iVolume(Symbol(),PERIOD_M1,i)/2);
         }
       }
       P1Buffer[ii]=P1;
       P2Buffer[ii]=P2;

       pii=ii;
    }

   return(0);
  }  

int start()
  {
      // код доступен только после оплаты
   }

void VSA_BarSD()
{
   int    counted_bars=IndicatorCounted();
   int i = Bars - counted_bars + 1;
   if(counted_bars == 0)
   {
      i = 6000;
   }
   int volume = 0;
   int spread = 0;
   int close = 0;
   double range;
   double range1;
   bool ND = false;
   bool NS = false;

   while(i > 0)
   {
      ExtMapBuffer1[i] = 0;
      ExtMapBuffer2[i] = 0;

      range = High[i] - Low[i];
      range1 = High[i+1] - Low[i+1];
      ND = false;
      NS = false;

      if(Volume[i] <= Volume[i+1] && Volume[i] <= Volume[i+2])
      {

         if(High[i] > High[i+1] && Low[i] >= Low[i+1] && range <= range1 && Close[i] > Close[i+1])
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 1);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(Low[i] < Low[i+1] && High[i] <= High[i+1] && range <= range1 && Close[i] < Close[i+1])
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 1);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(High[i] > High[i+1] && Low[i] >= Low[i+1] && range > range1 && Close[i] == Open[i])
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 2);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(Low[i] < Low[i+1] && High[i] <= High[i+1] && range > range1 && Close[i] == Open[i])
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 2);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(High[i] > High[i+1] && Low[i] >= Low[i+1] && range > range1 && Close[i] == High[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 3);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(Low[i] < Low[i+1] && High[i] <= High[i+1] && range > range1 && Close[i] == Low[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 3);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(High[i] > High[i+1] && Low[i] >= Low[i+1] && range > range1 && Close[i] == (High[i]+Low[i])*0.5 && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 4);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(Low[i] < Low[i+1] && High[i] <= High[i+1] && range > range1 && Close[i] == (High[i]+Low[i])*0.5 && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 4);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(High[i] > High[i+1] && Low[i] >= Low[i+1] && range > range1 && Close[i] == Low[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 5);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(Low[i] < Low[i+1] && High[i] <= High[i+1] && range > range1 && Close[i] == High[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 5);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range < range1 && Close[i] > Close[i+1] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 6);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range < range1 && Close[i] < Close[i+1] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 6);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range == range1 && Close[i] > Close[i+1] && Close[i] == Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 7);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range == range1 && Close[i] < Close[i+1] && Close[i] == Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 7);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range == range1 && Close[i] > Close[i+1] && Close[i] == High[i] && Close[i] != Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 8);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range == range1 && Close[i] < Close[i+1] && Close[i] == Low[i] && Close[i] != Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 8);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range == range1 && Close[i] > Close[i+1] && Close[i] == (High[i]+Low[i])*0.5 && Close[i] != Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 9);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range == range1 && Close[i] < Close[i+1] && Close[i] == (High[i]+Low[i])*0.5 && Close[i] != Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 9);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range == range1 && Close[i] > Close[i+1] && Close[i] == Low[i] && Close[i] != Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 10);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range == range1 && Close[i] < Close[i+1] && Close[i] == High[i] && Close[i] != Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 10);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range < range1 && Close[i] == Close[i+1] && Close[i] == Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]))
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 11);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range < range1 && Close[i] == Close[i+1] && Close[i] == Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]))
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 11);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range < range1 && Close[i] == Close[i+1] && Close[i] == High[i] && Close[i] != Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 12);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range < range1 && Close[i] == Close[i+1] && Close[i] == Low[i] && Close[i] != Open[i] && NS == false)
         {
            if((WaitNextBarConfirmation && Close[i] < Close[i-1] && Low[i] <= Low[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], Low[i] - 3*Point, false, 12);
               ExtMapBuffer2[i] = Low[i];// + 3*Point;
               NS = true;
            }
         }

         if(range < range1 && Close[i] == Close[i+1] && Close[i] == (High[i]+Low[i])*0.5 && Close[i] != Open[i] && ND == false)
         {
            if((WaitNextBarConfirmation && Close[i] > Close[i-1] && High[i] >= High[i-1]) || WaitNextBarConfirmation == false)
            {
               TextOutput(Time[i], High[i] + 3*Point, true, 13);
               ExtMapBuffer1[i] = High[i];// + 3*Point;
               ND = true;
            }
         }
         if(range < range1 && Close[i] == Close[i+1] && Close[i] == (High[i]+Low[i])

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

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

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

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

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

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

Стоимость полного кода
2 846,10₽ ≈ $34.78