averages_ao_alertdivergence_2.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «averages_ao_alertdivergence_2.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор рассчитывает AO-подобное значение как разницу между двумя скользящими средними с настраиваемыми периодами и методами. Результат отображается в пяти гистограммных буферах, разделённых по направлению тренда и наклону. Поддерживается 20 типов скользящих средних, мног таймфреймовый анализ и интерполяция между барами.
Индикатор обнаруживает бычьи и медвежьи дивергенции между значениями индикатора и ценой, отрисовывая для них трендовые линии. Стрелки размещаются при изменении наклона и пересечении нуля, с настраиваемыми цветами, кодами и размерами.
Функция уведомлений включает текстовые сообщения, звуковые сигналы, email и платёжные уведомления, срабатывающие при смене наклона или пересечении нуля. Все визуальные элементы и оповещения настраиваются через параметры.
Поддерживается работа на нескольких таймфреймах с возможностью интерполяции значений между барами меньшего периода.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Таймфрейм для анализа |
| FastMaPeriod | Период быстрой СС — Период быстрой скользящей средней |
| FastMaMode | Метод быстрой СС — Метод быстрой скользящей средней |
| SlowMaPeriod | Период медленной СС — Период медленной скользящей средней |
| SlowMaMode | Метод медленной СС — Метод медленной скользящей средней |
| AoPrice | Тип цены AO — Тип цены для расчёта AO-значения |
| divergenceVisible | Дивергенции включены — Включение обнаружения дивергенций |
| divergenceOnValuesVisible | Дивергенция на значениях — Отображение дивергенции на значениях индикатора |
| divergenceOnChartVisible | Дивергенция на графике — Отображение дивергенции на графике цены |
| divergenceBullishColor | Цвет бычьей дивергенции — Цвет бычьей дивергенции |
| divergenceBearishColor | Цвет медвежьей дивергенции — Цвет медвежьей дивергенции |
| divergenceUniqueID | Идентификатор дивергенции — Уникальный идентификатор объектов дивергенции |
| HistogramOnSlope | Гистограмма по наклону — Отображение гистограммы, разделённой по наклону |
| Interpolate | Интерполяция — Интерполяция значений между барами |
| MaModes | Методы СС — Таблица доступных методов скользящих средних |
| __0 | Метод SMA — Название метода скользящей средней SMA |
| __1 | Метод EMA — Название метода скользящей средней EMA |
| __2 | Метод Double smoothed EMA — Название метода скользящей средней Double smoothed EMA |
| __3 | Метод DEMA — Название метода скользящей средней Double EMA (DEMA) |
| __4 | Метод TEMA — Название метода скользящей средней Triple EMA (TEMA) |
| __5 | Метод Smoothed MA — Название метода скользящей средней Smoothed MA |
| __6 | Метод Linear weighted MA — Название метода скользящей средней Linear weighted MA |
| __7 | Метод Parabolic weighted MA — Название метода скользящей средней Parabolic weighted MA |
| __8 | Метод Alexander MA — Название метода скользящей средней Alexander MA |
| __9 | Метод Volume weighted MA — Название метода скользящей средней Volume weighted MA |
| __10 | Метод Hull MA — Название метода скользящей средней Hull MA |
| __11 | Метод Triangular MA — Название метода скользящей средней Triangular MA |
| __12 | Метод Sine weighted MA — Название метода скользящей средней Sine weighted MA |
| __13 | Метод Linear regression — Название метода скользящей средней Linear regression |
| __14 | Метод IE/2 — Название метода скользящей средней IE/2 |
| __15 | Метод NonLag MA — Название метода скользящей средней NonLag MA |
| __16 | Метод Zero lag EMA — Название метода скользящей средней Zero lag EMA |
| __17 | Метод Leader EMA — Название метода скользящей средней Leader EMA |
| __18 | Метод Super smoother — Название метода скользящей средней Super smoother |
| __19 | Метод Smoother — Название метода скользящей средней Smoother |
| alertsOn | Уведомления включены — Включение всех уведомлений |
| alertsOnSlope | Уведомление при смене наклона — Уведомление при смене наклона |
| alertsOnZeroCross | Уведомление при пересечении нуля — Уведомление при пересечении нуля |
| alertsOnCurrent | Уведомление на текущем баре — Уведомление на текущем баре |
| alertsMessage | Всплывающие сообщения — Отображение всплывающих сообщений |
| alertsSound | Звуковое уведомление — Звуковое уведомление |
| alertsEmail | Email-уведомления — Отправка email-уведомлений |
| alertsNotify | Push-уведомления — Отправка push-уведомлений |
| arrowsVisible | Стрелки видны — Отображение стрелок на графике |
| arrowsIdentifier | Идентификатор стрелок — Идентификатор объектов стрелок на графике |
| arrowsDisplacement | Смещение стрелок — Смещение стрелок от цены |
| arrowsOnSlope | Стрелки при смене наклона — Отображение стрелок при смене наклона |
| arrowsOnSlopeUpColor | Цвет стрелки вверх (наклон) — Цвет стрелки вверх при смене наклона |
| arrowsOnSlopeDnColor | Цвет стрелки вниз (наклон) — Цвет стрелки вниз при смене наклона |
| arrowsOnSlopeUpCode | Код стрелки вверх (наклон) — Код стрелки вверх при смене наклона |
| arrowsOnSlopeDnCode | Код стрелки вниз (наклон) — Код стрелки вниз при смене наклона |
| arrowsOnSlopeUpSize | Размер стрелки вверх (наклон) — Размер стрелки вверх при смене наклона |
| arrowsOnSlopeDnSize | Размер стрелки вниз (наклон) — Размер стрелки вниз при смене наклона |
| arrowsOnZeroCross | Стрелки при пересечении нуля — Отображение стрелок при пересечении нуля |
| arrowsOnZeroCrossUpColor | Цвет стрелки вверх (нуль) — Цвет стрелки вверх при пересечении нуля |
| arrowsOnZeroCrossDnColor | Цвет стрелки вниз (нуль) — Цвет стрелки вниз при пересечении нуля |
| arrowsOnZeroCrossUpCode | Код стрелки вверх (нуль) — Код стрелки вверх при пересечении нуля |
| arrowsOnZeroCrossDnCode | Код стрелки вниз (нуль) — Код стрелки вниз при пересечении нуля |
| arrowsOnZeroCrossUpSize | Размер стрелки вверх (нуль) — Размер стрелки вверх при пересечении нуля |
| arrowsOnZeroCrossDnSize | Размер стрелки вниз (нуль) — Размер стрелки вниз при пересечении нуля |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 MediumVioletRed
#property indicator_color2 MediumVioletRed
#property indicator_color3 LimeGreen
#property indicator_color4 LimeGreen
#property indicator_color5 Gold
#property indicator_width1 2
#property indicator_width3 2
#property indicator_width5 2
#property indicator_levelcolor DarkSlateGray
extern string TimeFrame = "Current time frame";
extern int FastMaPeriod = 5;
extern int FastMaMode = MODE_EMA;
extern int SlowMaPeriod = 34;
extern int SlowMaMode = MODE_EMA;
extern int AoPrice = PRICE_MEDIAN;
extern bool divergenceVisible = true;
extern bool divergenceOnValuesVisible = true;
extern bool divergenceOnChartVisible = true;
extern color divergenceBullishColor = Green;
extern color divergenceBearishColor = Red;
extern string divergenceUniqueID = "AO divergence1";
extern bool HistogramOnSlope = true;
extern bool Interpolate = true;
extern string MaModes = "";
extern string __0 = "SMA";
extern string __1 = "EMA";
extern string __2 = "Double smoothed EMA";
extern string __3 = "Double EMA (DEMA)";
extern string __4 = "Triple EMA (TEMA)";
extern string __5 = "Smoothed MA";
extern string __6 = "Linear weighted MA";
extern string __7 = "Parabolic weighted MA";
extern string __8 = "Alexander MA";
extern string __9 = "Volume weghted MA";
extern string __10 = "Hull MA";
extern string __11 = "Triangular MA";
extern string __12 = "Sine weighted MA";
extern string __13 = "Linear regression";
extern string __14 = "IE/2";
extern string __15 = "NonLag MA";
extern string __16 = "Zero lag EMA";
extern string __17 = "Leader EMA";
extern string __18 = "Super smoother";
extern string __19 = "Smoother";
extern string note = "turn on Alert = true; turn off = false";
extern bool alertsOn = true;
extern bool alertsOnSlope = false;
extern bool alertsOnZeroCross = true;
extern bool alertsOnCurrent = true;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern bool alertsNotify = false;
extern bool arrowsVisible = true;
extern string arrowsIdentifier = "AO Arrows1";
extern double arrowsDisplacement = 1.0;
extern bool arrowsOnSlope = false;
extern color arrowsOnSlopeUpColor = LimeGreen;
extern color arrowsOnSlopeDnColor = Red;
extern int arrowsOnSlopeUpCode = 241;
extern int arrowsOnSlopeDnCode = 242;
extern int arrowsOnSlopeUpSize = 1;
extern int arrowsOnSlopeDnSize = 1;
extern bool arrowsOnZeroCross = true;
extern color arrowsOnZeroCrossUpColor = LimeGreen;
extern color arrowsOnZeroCrossDnColor = Red;
extern int arrowsOnZeroCrossUpCode = 119;
extern int arrowsOnZeroCrossDnCode = 119;
extern int arrowsOnZeroCrossUpSize = 3;
extern int arrowsOnZeroCrossDnSize = 3;
double Upa[];
double Upb[];
double Dna[];
double Dnb[];
double ao[];
double trend[];
double slope[];
string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
string shortName;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int lookForLength = StringLen(divergenceUniqueID);
for (int i=ObjectsTotal()-1; i>=0; i--) {
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == divergenceUniqueID) ObjectDelete(objectName);
}
if (!calculateValue && arrowsVisible) deleteArrows();
return(0);
}
int start()
{
// код доступен только после оплаты
}
double getPrice(int type, int i)
{
switch (type)
{
case 7: return((Open[i]+Close[i])/2.0);
case 8: return((Open[i]+High[i]+Low[i]+Close[i])/4.0);
default : return(iMA(NULL,0,1,0,MODE_SMA,type,i));
}
}
string methodNames[] = {"SMA","EMA","Double smoothed EMA","Double EMA","Triple EMA","Smoothed MA","Linear weighted MA","Parabolic weighted MA","Alexander MA","Volume weghted MA","Hull MA","Triangular MA","Sine weighted MA","Linear regression","IE/2","NonLag MA","Zero lag EMA","Leader EMA","Super smoother","Smoothed"};
string getAverageName(int& method)
{
int max = ArraySize(methodNames)-1;
method=MathMax(MathMin(method,max),0); return(methodNames[method]);
}
#define _maWorkBufferx1 2
#define _maWorkBufferx2 4
#define _maWorkBufferx3 6
#define _maWorkBufferx5 10
double iCustomMa(int mode, double price, double length, int i, int instanceNo=0)
{
int r = Bars-i-1;
switch (mode)
{
case 0 : return(iSma(price,length,r,instanceNo));
case 1 : return(iEma(price,length,r,instanceNo));
case 2 : return(iDsema(price,length,r,instanceNo));
case 3 : return(iDema(price,length,r,instanceNo));
case 4 : return(iTema(price,length,r,instanceNo));
case 5 : return(iSmma(price,length,r,instanceNo));
case 6 : return(iLwma(price,length,r,instanceNo));
case 7 : return(iLwmp(price,length,r,instanceNo));
case 8 : return(iAlex(price,length,r,instanceNo));
case 9 : return(iWwma(price,length,r,instanceNo));
case 10 : return(iHull(price,length,r,instanceNo));
case 11 : return(iTma(price,length,r,instanceNo));
case 12 : return(iSineWMA(price,length,r,instanceNo));
case 13 : return(iLinr(price,length,r,instanceNo));
case 14 : return(iIe2(price,length,r,instanceNo));
case 15 : return(iNonLagMa(price,length,r,instanceNo));
case 16 : return(iZeroLag(price,length,r,instanceNo));
case 17 : return(iLeader(price,length,r,instanceNo));
case 18 : return(iSsm(price,length,r,instanceNo));
case 19 : return(iSmooth(price,length,r,instanceNo));
default : return(0);
}
}
double workSma[][_maWorkBufferx2];
double iSma(double price, int period, int r, int instanceNo=0)
{
if (ArrayRange(workSma,0)!= Bars) ArrayResize(workSma,Bars); instanceNo *= 2;
workSma[r][instanceNo] = price;
if (r>=period)
workSma[r][instanceNo+1] = workSma[r-1][instanceNo+1]+(workSma[r][instanceNo]-workSma[r-period][instanceNo])/period;
else { workSma[r][instanceNo+1] = 0; for(int k=0; k<period && (r-k)>=0; k++) workSma[r][instanceNo+1] += workSma[r-k][instanceNo];
workSma[r][instanceNo+1] /= k; }
return(workSma[r][instanceNo+1]);
}
double workEma[][_maWorkBufferx1];
double iEma(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workEma,0)!= Bars) ArrayResize(workEma,Bars);
double alpha = 2.0 / (1.0+period);
workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]);
return(workEma[r][instanceNo]);
}
double workDsema[][_maWorkBufferx2];
#define _ema1 0
#define _ema2 1
double iDsema(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workDsema,0)!= Bars) ArrayResize(workDsema,Bars); instanceNo*=2;
double alpha = 2.0 /(1.0+MathSqrt(period));
workDsema[r][_ema1+instanceNo] = workDsema[r-1][_ema1+instanceNo]+alpha*(price -workDsema[r-1][_ema1+instanceNo]);
workDsema[r][_ema2+instanceNo] = workDsema[r-1][_ema2+instanceNo]+alpha*(workDsema[r][_ema1+instanceNo]-workDsema[r-1][_ema2+instanceNo]);
return(workDsema[r][_ema2+instanceNo]);
}
double workDema[][_maWorkBufferx2];
#define _dema1 0
#define _dema2 1
double iDema(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workDema,0)!= Bars) ArrayResize(workDema,Bars); instanceNo*=2;
double alpha = 2.0 / (1.0+period);
workDema[r][_dema1+instanceNo] = workDema[r-1][_dema1+instanceNo]+alpha*(price -workDema[r-1][_dema1+instanceNo]);
workDema[r][_dema2+instanceNo] = workDema[r-1][_dema2+instanceNo]+alpha*(workDema[r][_dema1+instanceNo]-workDema[r-1][_dema2+instanceNo]);
return(workDema[r][_dema1+instanceNo]*2.0-workDema[r][_dema2+instanceNo]);
}
double workTema[][_maWorkBufferx3];
#define _tema1 0
#define _tema2 1
#define _tema3 2
double iTema(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3;
double alpha = 2.0 / (1.0+period);
workTema[r][_tema1+instanceNo] = workTema[r-1][_tema1+instanceNo]+alpha*(price -workTema[r-1][_tema1+instanceNo]);
workTema[r][_tema2+instanceNo] = workTema[r-1][_tema2+instanceNo]+alpha*(workTema[r][_tema1+instanceNo]-workTema[r-1][_tema2+instanceNo]);
workTema[r][_tema3+instanceNo] = workTema[r-1][_tema3+instanceNo]+alpha*(workTema[r][_tema2+instanceNo]-workTema[r-1][_tema3+instanceNo]);
return(workTema[r][_tema3+instanceNo]+3.0*(workTema[r][_tema1+instanceNo]-workTema[r][_tema2+instanceNo]));
}
double workSmma[][_maWorkBufferx1];
double iSmma(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workSmma,0)!= Bars) ArrayResize(workSmma,Bars);
if (r<period)
workSmma[r][instanceNo] = price;
else workSmma[r][instanceNo] = workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period;
return(workSmma[r][instanceNo]);
}
double workLwma[][_maWorkBufferx1];
double iLwma(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workLwma,0)!= Bars) ArrayResize(workLwma,Bars);
workLwma[r][instanceNo] = price;
double sumw = period;
double sum = period*price;
for(int k=1; k<period && (r-k)>=0; k++)
{
double weight = period-k;
sumw += weight;
sum += weight*workLwma[r-k][instanceNo];
}
return(sum/sumw);
}
double workLwmp[][_maWorkBufferx1];
double iLwmp(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workLwmp,0)!= Bars) ArrayResize(workLwmp,Bars);
workLwmp[r][instanceNo] = price;
double sumw = period*period;
double sum = sumw*price;
for(int k=1; k<period && (r-k)>=0; k++)
{
double weight = (period-k)*(period-k);
sumw += weight;
sum += weight*workLwmp[r-k][instanceNo];
}
return(sum/sumw);
}
double workAlex[][_maWorkBufferx1];
double iAlex(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workAlex,0)!= Bars) ArrayResize(workAlex,Bars);
if (period<4) return(price);
workAlex[r][instanceNo] = price;
double sumw = period-2;
double sum = sumw*price;
for(int k=1; k<period && (r-k)>=0; k++)
{
double weight = period-k-2;
sumw += weight;
sum += weight*workAlex[r-k][instanceNo];
}
return(sum/sumw);
}
double workTma[][_maWorkBufferx1];
double iTma(double price, double period, int r, int instanceNo=0)
{
if (ArrayRange(workTma,0)!= Bars) ArrayResize(workTma,Bars);
workTma[r][instanceNo] = price;
double half = (period+1.0)/2.0;
double sum = price;
double sumw = 1;
for(int k=1; k<period && (r-k)>=0; k++)
{
double weight = k+1; if (weight > half) weight = period-k;
sumw += weight;
sum += weight*workTma[r-k][instanceNo];
}
return(sum/sumw);
}
double workSineWMA[][_maWorkBufferx1];
#define Pi 3.14159265358979323846264338327950288
double iSineWMA(double price, int period, int r, int instanceNo=0)
{
if (period<1) return(price);
if (ArrayRange(workSineWMA,0)!= Bars) ArrayResize(workSineWMA,Bars);
workSineWMA[r][instanceNo] = price;
double sum = 0;
double sumw = 0;
for(int k=0; k<period && (r-kПоказано первые 50% кода (символов: 25957)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.