dynamic_zones_absolutestrength_of_averages_diff_2.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «dynamic_zones_absolutestrength_of_averages_diff_2.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, рассчитывающий разность сглаженных бычьей и медвежьей силы ценовых данных с использованием динамических зон. Поддерживает два режима расчёта моментума: на основе ценового диапазона за заданный период или на основе RSI-анализа. Для определения уровней перекупленности и перепроданности используется внешняя библиотека dynamicZone.dll. Результат отображается в отдельном окне в виде цветной линии с градиентной заливкой, а также позволяет визуализировать свечной график с цветовой индикацией направления силы. Индикатор предоставляет обнаружение классических и обратных дивергенций между ценой и значениями индикатора, а также систему оповещений через всплывающие сообщения, звуковые сигналы, email и push-уведомления. Доступен выбор из 20 методов скользящих средних для сглаживания, поддержка мультитаймфрейм-режима и настройка внешнего вида линий, свечей и объектов дивергенций.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Выбор таймфрейма для расчётов или специальный режим возврата количества баров |
| UseRsi | Использовать RSI — Переключает расчёт моментума на RSI-основу вместо ценового диапазона |
| Length | Длина периода — Период расчёта ценового диапазона или RSI |
| Signal | Сигнал — Параметр сигнальной линии, передаваемый при мультитаймфрейм-расчётах |
| Smooth | Сглаживание — Период дополнительного сглаживания рассчитанных средних значений |
| Price | Тип цены — Источник цены для расчёта: стандартная цена, среднее Open/Close или среднее всех четырёх цен |
| MaMethod | Метод скользящей средней — Индекс выбранного метода сглаживания из доступного набора |
| DzLookBackBars | Баров динамической зоны — Количество баров для расчёта динамических зон |
| DzStartBuyProbability | Вероятность покупки — Начальная вероятность для расчёта динамической зоны покупки |
| DzStartSellProbability | Вероятность продажи — Начальная вероятность для расчёта динамической зоны продажи |
| ColorUp | Цвет вверх — Цвет отображения при положительных значениях индикатора |
| ColorDown | Цвет вниз — Цвет отображения при отрицательных значениях индикатора |
| ColorUniqueID | Идентификатор цвета — Уникальный идентификатор для объектов раскраски линий на графике |
| ColorWidth | Толщина цвета — Толщина линий раскраски значений индикатора |
| ColorBars | Баров цвета — Максимальное количество баров, для которых применяется раскраска |
| divergenceVisible | Дивергенции видимы — Включает обнаружение и отображение дивергенций |
| divergenceOnValuesVisible | Дивергенции на значениях — Отображает линии тренда дивергенций на графике значений индикатора |
| divergenceOnChartVisible | Дивергенции на графике — Отображает линии тренда дивергенций на ценовом графике |
| divergenceBullishColor | Цвет бычьей дивергенции — Цвет линий бычьих дивергенций |
| divergenceBearishColor | Цвет медвежьей дивергенции — Цвет линий медвежьих дивергенций |
| divergenceUniqueID | Идентификатор дивергенций — Уникальный идентификатор для объектов дивергенций на графике |
| divergenceAlert | Оповещение о дивергенции — Включает оповещения при обнаружении дивергенций |
| divergenceAlertsMessage | Сообщение о дивергенции — Отображает всплывающее сообщение при обнаружении дивергенции |
| divergenceAlertsSound | Звук дивергенции — Воспроизводит звуковой сигнал при обнаружении дивергенции |
| divergenceAlertsEmail | Email дивергенции — Отправляет email-уведомление при обнаружении дивергенции |
| divergenceAlertsNotify | Уведомление дивергенции — Отправляет push-уведомление при обнаружении дивергенции |
| divergenceAlertsSoundName | Файл звука дивергенции — Имя звукового файла для оповещений о дивергенциях |
| barsVisible | Свечи видимы — Отображает цветные свечи на графике в соответствии с направлением силы |
| widthWick | Толщина теней — Толщина теней свечей при режиме отображения баров |
| widthBody | Толщина тел — Толщина тел свечей при режиме отображения баров |
| drawInBackgound | Рисовать на фоне — Рисует свечи на заднем плане графика |
| _ | Разделитель оповещений — Текстовый разделитель группы настроек оповещений |
| alertsOn | Оповещения включены — Включает систему оповещений индикатора |
| alertsOnobLineCross | Пересечение зоны продаж — Срабатывает при пересечении линии динамической зоны продаж |
| alertsOnosLineCross | Пересечение зоны покупки — Срабатывает при пересечении линии динамической зоны покупки |
| alertsOnzeroLineCross | Пересечение нуля — Срабатывает при пересечении нулевой линии индикатора |
| alertsOnCurrent | На текущем баре — Использует текущий бар для проверки условий оповещений |
| alertsMessage | Сообщения оповещений — Включает всплывающие сообщения в системе оповещений |
| alertsSound | Звук оповещений — Включает звуковые сигналы в системе оповещений |
| alertsEmail | Email оповещений — Включает отправку email в системе оповещений |
| alertsNotify | Уведомления оповещений — Включает push-уведомления в системе оповещений |
| MaMethods | Методы скользящих — Группа выбора метода скользящей средней |
| __0 | Метод 0 — Название первого метода скользящей средней (SMA) |
| __1 | Метод 1 — Название второго метода скользящей средней (EMA) |
| __2 | Метод 2 — Название третьего метода скользящей средней |
| __3 | Метод 3 — Название четвёртого метода скользящей средней (DEMA) |
| __4 | Метод 4 — Название пятого метода скользящей средней (TEMA) |
| __5 | Метод 5 — Название шестого метода скользящей средней |
| __6 | Метод 6 — Название седьмого метода скользящей средней |
| __7 | Метод 7 — Название восьмого метода скользящей средней |
| __8 | Метод 8 — Название девятого метода скользящей средней |
| __9 | Метод 9 — Название десятого метода скользящей средней |
| __10 | Метод 10 — Название одиннадцатого метода скользящей средней (Hull MA) |
| __11 | Метод 11 — Название двенадцатого метода скользящей средней |
| __12 | Метод 12 — Название тринадцатого метода скользящей средней |
| __13 | Метод 13 — Название четырнадцатого метода скользящей средней (Linear regression) |
| __14 | Метод 14 — Название пятнадцатого метода скользящей средней (IE/2) |
| __15 | Метод 15 — Название шестнадцатого метода скользящей средней (NonLag MA) |
| __16 | Метод 16 — Название семнадцатого метода скользящей средней (Zero lag EMA) |
| __17 | Метод 17 — Название восемнадцатого метода скользящей средней (Leader EMA) |
| __18 | Метод 18 — Название девятнадцатого метода скользящей средней (Super smoother) |
| __19 | Метод 19 — Название двадцатого метода скользящей средней (Smoother) |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 DimGray
#property indicator_color2 DarkOrange
#property indicator_color3 LimeGreen
#property indicator_color4 LimeGreen
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_width4 2
#import "dynamicZone.dll"
double dzBuyP(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i, double precision);
double dzSellP(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i, double precision);
#import
extern string TimeFrame = "Current time frame";
extern bool UseRsi = false;
extern double Length = 10;
extern double Signal = 5;
extern double Smooth = 5;
extern int Price = 0;
extern int MaMethod = 2;
extern int DzLookBackBars = 35;
extern double DzStartBuyProbability = 0.05;
extern double DzStartSellProbability = 0.05;
extern color ColorUp = LimeGreen;
extern color ColorDown = Red;
extern string ColorUniqueID = "DZ AbsoluteStrength Diff color";
extern int ColorWidth = 2;
extern int ColorBars = 1000;
extern bool divergenceVisible = false;
extern bool divergenceOnValuesVisible = true;
extern bool divergenceOnChartVisible = true;
extern color divergenceBullishColor = LimeGreen;
extern color divergenceBearishColor = PaleVioletRed;
extern string divergenceUniqueID = "DZ AbsoluteStrength Diff ";
extern bool divergenceAlert = true;
extern bool divergenceAlertsMessage = true;
extern bool divergenceAlertsSound = true;
extern bool divergenceAlertsEmail = false;
extern bool divergenceAlertsNotify = false;
extern string divergenceAlertsSoundName = "alert1.wav";
extern bool barsVisible = true;
extern int widthWick = 0;
extern int widthBody = 2;
extern bool drawInBackgound = false;
bool Interpolate = true;
extern string _ = "Alerts Settings";
extern bool alertsOn = true;
extern bool alertsOnobLineCross = true;
extern bool alertsOnosLineCross = true;
extern bool alertsOnzeroLineCross = true;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = true;
extern bool alertsSound = true;
extern bool alertsEmail = false;
extern bool alertsNotify = true;
extern string MaMethods = "";
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";
double obLine[];
double osLine[];
double zeroLine[];
double SmthBulls[];
double SmthBears[];
double diff[];
double ratios[];
double trends[][3];
#define _tob 0
#define _tos 1
#define _tzl 2
string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
string shortName;
int window;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int lookForLength = StringLen(divergenceUniqueID);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string name = ObjectName(i); if (StringSubstr(name,0,lookForLength) == divergenceUniqueID) ObjectDelete(name);
}
lookForLength = StringLen(ColorUniqueID);
for (i=ObjectsTotal()-1; i>=0; i--)
{
name = ObjectName(i); if (StringSubstr(name,0,lookForLength) == ColorUniqueID) ObjectDelete(name);
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
void interpolate(double& target[], int ttimeFrame, int i)
{
int t = iBarShift(NULL,ttimeFrame,Time[i]);
double y0 = target[i];
double y1 = target[iBarShift(NULL,0,iTime(NULL,ttimeFrame,t+0))+1];
double y2 = target[iBarShift(NULL,0,iTime(NULL,ttimeFrame,t+1))+1];
datetime time = iTime(NULL,ttimeFrame,t);
for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
for(int k = 1; k < n; k++)
target[i+k] = target[i] + (target[i+n] - target[i])*k/n;
}
void CatchBullishDivergence(double& values[], int i)
{
i++;
ObjectDelete(divergenceUniqueID+"l"+DoubleToStr(Time[i],0));
ObjectDelete(divergenceUniqueID+"l"+"os" + DoubleToStr(Time[i],0));
if (!IsIndicatorLow(values,i)) return;
int currentLow = i;
int lastLow = GetIndicatorLastLow(values,i+1);
if (values[currentLow] > values[lastLow] && Low[currentLow] < Low[lastLow])
{
if(divergenceOnChartVisible) DrawPriceTrendLine("l",Time[currentLow],Time[lastLow],Low[currentLow],Low[lastLow],divergenceBullishColor,STYLE_SOLID);
if(divergenceOnValuesVisible) DrawIndicatorTrendLine("l",Time[currentLow],Time[lastLow],values[currentLow],values[lastLow],divergenceBullishColor,STYLE_SOLID);
if (divergenceAlert) DisplayAlert("Classical bullish divergence",currentLow);
}
if (values[currentLow] < values[lastLow] && Low[currentLow] > Low[lastLow])
{
if(divergenceOnChartVisible) DrawPriceTrendLine("l",Time[currentLow],Time[lastLow],Low[currentLow],Low[lastLow], divergenceBullishColor, STYLE_DOT);
if(divergenceOnValuesVisible) DrawIndicatorTrendLine("l",Time[currentLow],Time[lastLow],values[currentLow],values[lastLow], divergenceBullishColor, STYLE_DOT);
if (divergenceAlert) DisplayAlert("Reverse bullish divergence",currentLow);
}
}
void CatchBearishDivergence(double& values[], int i)
{
i++;
ObjectDelete(divergenceUniqueID+"h"+DoubleToStr(Time[i],0));
ObjectDelete(divergenceUniqueID+"h"+"os" + DoubleToStr(Time[i],0));
if (IsIndicatorPeak(values,i) == false) return;
int currentPeak = i;
int lastPeak = GetIndicatorLastPeak(values,i+1);
if (values[currentPeak] < values[lastPeak] && High[currentPeak]>High[lastPeak])
{
if (divergenceOnChartVisible) DrawPriceTrendLine("h",Time[currentPeak],Time[lastPeak],High[currentPeak],High[lastPeak],divergenceBearishColor,STYLE_SOLID);
if (divergenceOnValuesVisible) DrawIndicatorTrendLine("h",Time[currentPeak],Time[lastPeak],values[currentPeak],values[lastPeak],divergenceBearishColor,STYLE_SOLID);
if (divergenceAlert) DisplayAlert("Classical bearish divergence",currentPeak);
}
if(values[currentPeak] > values[lastPeak] && High[currentPeak] < High[lastPeak])
{
if (divergenceOnChartVisible) DrawPriceTrendLine("h",Time[currentPeak],Time[lastPeak],High[currentPeak],High[lastPeak], divergenceBearishColor, STYLE_DOT);
if (divergenceOnValuesVisible) DrawIndicatorTrendLine("h",Time[currentPeak],Time[lastPeak],values[currentPeak],values[lastPeak], divergenceBearishColor, STYLE_DOT);
if (divergenceAlert) DisplayAlert("Reverse bearish divergence",currentPeak);
}
}
bool IsIndicatorPeak(double& values[], int i) { return(values[i] >= values[i+1] && values[i] > values[i+2] && values[i] > values[i-1]); }
bool IsIndicatorLow( double& values[], int i) { return(values[i] <= values[i+1] && values[i] < values[i+2] && values[i] < values[i-1]); }
int GetIndicatorLastPeak(double& values[], int shift)
{
for(int i = shift+5; i<Bars; i++)
if (values[i] >= values[i+1] && values[i] > values[i+2] && values[i] >= values[i-1] && values[i] > values[i-2]) return(i);
return(-1);
}
int GetIndicatorLastLow(double& values[], int shift)
{
for(int i = shift+5; i<Bars; i++)
if (values[i] <= values[i+1] && values[i] < values[i+2] && values[i] <= values[i-1] && values[i] < values[i-2]) return(i);
return(-1);
}
void DrawPriceTrendLine(string first,datetime t1, datetime t2, double p1, double p2, color lineColor, double style)
{
string label = divergenceUniqueID+first+"os"+DoubleToStr(t1,0);
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, 0, t1+Period()*60-1, p1, t2, p2, 0, 0);
ObjectSet(label, OBJPROP_RAY, false);
ObjectSet(label, OBJPROP_COLOR, lineColor);
ObjectSet(label, OBJPROP_STYLE, style);
}
void DrawIndicatorTrendLine(string first,datetime t1, datetime t2, double p1, double p2, color lineColor, double style)
{
int indicatorWindow = WindowFind(shortName);
if (indicatorWindow < 0) return;
string label = divergenceUniqueID+first+DoubleToStr(t1,0);
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, indicatorWindow, t1+Period()*60-1, p1, t2, p2, 0, 0);
ObjectSet(label, OBJPROP_RAY, false);
ObjectSet(label, OBJPROP_COLOR, lineColor);
ObjectSet(label, OBJPROP_STYLE, style);
}
void DisplayAlert(string doWhat, int shift)
{
string dmessage;
static datetime lastAlertTime;
if(shift <= 2 && Time[0] != lastAlertTime)
{
dmessage = StringConcatenate(Symbol()," ",timeFrameToString(Period())," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Dz Absolute Strength of Averages ",doWhat);
if (divergenceAlertsMessage) Alert(dmessage);
if (divergenceAlertsNotify) SendNotification(dmessage);
if (divergenceAlertsEmail) SendMail(StringConcatenate(Symbol()," Dz Absolute Strength of Averages "),dmessage);
if (divergenceAlertsSound) PlaySound(divergenceAlertsSoundName);
lastAlertTime = Time[0];
}
}
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 4
#define _maWorkBufferx2 8
#define _maWorkBufferx3 12
#define _maWorkBufferx5 20
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 *= Показано первые 50% кода (символов: 31178)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.