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