ArrZZx2
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «arrzzx2 alerts final draft.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
ArrZZx2 — это пользовательский индикатор для MetaTrader 4, который анализирует ценовые данные и отображает сигналы о смене тренда на графике. Индикатор рассчитывает несколько вспомогательных рядов данных на основе скользящих средних и ценовых массивов, а затем определяет направление тренда, отмечая его стрелками. Восходящие тренды обозначаются зелёными маркерами, нисходящие — красными. Индикатор поддерживает настраиваемые уведомления: всплывающие сообщения, звуковые сигналы и email-рассылку при обнаружении смены тренда. Также имеется возможность отображения вспомогательных зигзаг-линий на графике для визуального анализа. Набор параметров позволяет настраивать периоды сглаживания, глубину зигзагов, тип цены и поведение алертов.
Настройки программы
| Настройка | Описание |
|---|---|
| =3..4 (SR) | Период SR — Период сглаживания для расчёта основного ряда |
| =4..12..20..12 (SRZZ) | Период SRZZ — Период малого зигзага |
| 20; // =12..20..54..20 (MainRZZ) | Период MainRZZ — Период основного зигзага |
| FP | Период FP — Период обратного просмотра для расчёта вспомогательного ряда |
| =1..5 (SMF) | Коэффициент сглаживания — Коэффициент сглаживания вспомогательного ряда |
| DrawZZ | Рисовать зигзаг — Переключатель отображения зигзаг-линий на графике |
| exaprice | Описание ценовых режимов 1 — Текстовый параметр с описанием режимов цен |
| exprice | Описание ценовых режимов 2 — Текстовый параметр с описанием режимов цен |
| exprice2 | Описание ценовых режимов 3 — Текстовый параметр с описанием режимов цен |
| PriceConst | Тип цены — Тип цены для расчётов (0 — Close, 1 — Open, 4 — Median, 5 — Typical, 6 — Weighted и др.) |
| alertsOn | Алерты включены — Включить систему уведомлений |
| alertsOnCurrent | Алерты на текущую свечу — Отправлять алерты по текущей (нулевой) свече |
| alertsMessage | Сообщения — Включить всплывающие сообщения при смене тренда |
| alertsSound | Звуковые алерты — Включить звуковые сигналы при смене тренда |
| alertsEmail | Email-алерты — Включить email-уведомления при смене тренда |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 White
#property indicator_width1 1
#property indicator_color2 Lime
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_color5 Aqua
#property indicator_width5 1
#property indicator_color6 Violet
#property indicator_width6 1
#property indicator_color7 Aqua
#property indicator_width7 1
#property indicator_color8 Violet
#property indicator_width8 1
extern int SR = 3; // =3..4
extern int SRZZ = 5; // =4..12..20..12
extern int MainRZZ = 12;//20; // =12..20..54..20
extern int FP = 21;
extern int SMF = 3; // =1..5
extern bool DrawZZ = false;
extern string exaprice = "Price modes";
extern string exprice = "0=close,1=open,2=high,3=low";
extern string exprice2 = "4=(h+l)/2,5=(h+l+c)/3,6=(H+L+2*C)/4";
extern int PriceConst = 0;
extern bool alertsOn = true;
extern bool alertsOnCurrent = true;
extern bool alertsMessage = true;
extern bool alertsSound = true;
extern bool alertsEmail = false;
double Lmt[];
double LZZ[];
double SA[];
double SM[];
double Up[];
double Dn[];
double pUp[];
double pDn[];
int LTF[6]={0,0,0,0,0,0},STF[5]={0,0,0,0,0};
int MaxBar, nSBZZ, nLBZZ, SBZZ, LBZZ;
bool First=true;
int prevBars=0;
void MainCalculation(int Pos) {
if((Bars-Pos)>(SR+1)) SACalc(Pos); else SA[Pos]=0;
if((Bars-Pos)>(FP+SR+2)) SMCalc(Pos); else SM[Pos]=0; return; }
void SACalc(int Pos) { int sw, i, w, ww, Shift; double sum;
switch(PriceConst) {
case 0:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_CLOSE,Pos);
break;
case 1:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
break;
/*case 2:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_HIGH,Pos);
break;
case 3:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_LOW,Pos);
break;*/
case 4:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_MEDIAN,Pos);
break;
case 5:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_TYPICAL,Pos);
break;
case 6:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_WEIGHTED,Pos);
break;
default:
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
break; }
for(Shift=Pos+SR+2;Shift>Pos;Shift--) { sum=0.0; sw=0; i=0; w=Shift+SR;
ww=Shift-SR; if(ww<Pos) ww=Pos;
while(w>=Shift) {i++; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
while(w>=ww) { i--; sum=sum+i*SnakePrice(w); sw=sw+i; w--; }
SA[Shift]=sum/sw; } return; }
double SnakePrice(int Shift) {
switch(PriceConst) {
case 0: return(Close[Shift]);
case 1: return(Open[Shift]);
/*case 2: return(High[Shift]);
case 3: return(Low[Shift]);*/
case 4: return((High[Shift]+Low[Shift])/2);
case 5: return((Close[Shift]+High[Shift]+Low[Shift])/3);
case 6: return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
default: return(Open[Shift]); } }
void SMCalc(int i) { double t, b;
for(int Shift=i+SR+2;Shift>=i;Shift--) {
t=SA[ArrayMaximum(SA,FP,Shift)]; b=SA[ArrayMinimum(SA,FP,Shift)];
SM[Shift]=(2*(2+SMF)*SA[Shift]-(t+b))/2/(1+SMF); } return; }
void LZZCalc(int Pos) {
int i,RBar,LBar,ZZ,NZZ,NZig,NZag;
i=Pos-1; NZig=0; NZag=0;
while(i<MaxBar && ZZ==0) { i++; LZZ[i]=0; RBar=i-MainRZZ;
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) { ZZ=1;NZag=i; } }
if(ZZ==0) return; NZZ=0;
if(i>Pos) { if(SM[i]>SM[Pos]) { if(ZZ==1) {
if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; } NZag=i;
LZZ[i]=SM[i]; } }
else { if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; }
NZig=i; LZZ[i]=SM[i]; } } }
while(i<LBZZ || NZZ<5) { LZZ[i]=0; RBar=i-MainRZZ;
if(RBar<Pos) RBar=Pos; LBar=i+MainRZZ;
if(i==ArrayMinimum(SM,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SM[i]<SM[NZig]) {
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZig]=0; LZZ[i]=SM[i];
NZig=i; }
if(ZZ==1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; }
LZZ[i]=SM[i]; ZZ=-1; NZig=i; } }
if(i==ArrayMaximum(SM,LBar-RBar+1,RBar)) {
if(ZZ==1 && SM[i]>SM[NZag]) {
if(i>=Pos+MainRZZ && NZZ<5) LTF[NZZ]=i; LZZ[NZag]=0; LZZ[i]=SM[i];
NZag=i; }
if(ZZ==-1) { if(i>=Pos+MainRZZ && NZZ<5) { NZZ++; LTF[NZZ]=i; }
LZZ[i]=SM[i]; ZZ=1; NZag=i; } } i++; if(i>MaxBar) return; }
nLBZZ=Bars-LTF[5Показано первые 50% кода (символов: 7310)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.