FX5_MACD_Divergence_v1.0
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi_divergence_v1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, рассчитывающий значения RSI с настраиваемым периодом и определяющий расхождения между направлением индикатора и ценой. В зависимости от типа расхождения индикатор отрисовывает стрелки в отдельном окне и строит трендовые линии на графике цены и в окне индикатора. При обнаружении расхождения может отправлять уведомление через функцию Alert.
Настройки программы
| Настройка | Описание |
|---|---|
| separator1 | Разделитель настроек MACD — Текстовый разделитель для визуальной группировки параметров в окне настроек индикатора. |
| fastEMA | Период быстрой EMA — Целочисленный период для расчёта индикатора (используется как длина RSI). |
| separator2 | Разделитель настроек индикатора — Текстовый разделитель для визуальной группировки параметров отрисовки и уведомлений. |
| drawIndicatorTrendLines | Рисовать трендовые линии индикатора — Включает или отключает построение трендовых линий в окне индикатора между точками расхождения. |
| drawPriceTrendLines | Рисовать трендовые линии цены — Включает или отключает построение трендовых линий на графике цены между соответствующими точками расхождения. |
| displayAlert | Отображать оповещения — Включает или отключает отправку уведомлений через Alert при обнаружении расхождения. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Magenta
#property indicator_color4 Blue
#define arrowsDisplacement 0.0001
extern string separator1 = "*** MACD Settings ***";
extern int fastEMA = 12;
extern string separator2 = "*** Indicator Settings ***";
extern bool drawIndicatorTrendLines = true;
extern bool drawPriceTrendLines = true;
extern bool displayAlert = true;
double bullishDivergence[];
double bearishDivergence[];
double macd[];
double signal[];
static datetime lastAlertTime;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
for(int i = ObjectsTotal() - 1; i >= 0; i--)
{
string label = ObjectName(i);
if(StringSubstr(label, 0, 19) != "MACD_DivergenceLine")
continue;
ObjectDelete(label);
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
void CalculateIndicator(int countedBars)
{
for (int i = Bars - countedBars; i >= 0; i--)
{
CalculateMACD(i);
CatchBullishDivergence(i + 1);
CatchBearishDivergence(i + 1);
}
}
void CalculateMACD(int i)
{
macd[i] = iRSI(NULL, 0, fastEMA, PRICE_CLOSE,i);
}
void CatchBullishDivergence(int shift)
{
if(IsIndicatorTrough(shift) == false)
return;
int currentTrough = shift;
int lastTrough = GetIndicatorLastTrough(shift);
if(macd[currentTrough] > macd[lastTrough] &&
Low[currentTrough] < Low[lastTrough])
{
bullishDivergence[currentTrough] = macd[currentTrough] -
arrowsDisplacement;
if(drawPriceTrendLines == true)
DrawPriceTrendLine(Time[currentTrough], Time[lastTrough],
Low[currentTrough],
Low[lastTrough], Green, STYLE_SOLID);
if(drawIndicatorTrendLines == true)
DrawIndicatorTrendLine(Time[currentTrough],
Time[lastTrough], macd[currentTrough],
macd[lastTrough], Green, STYLE_SOLID);
if(displayAlert == true)
DisplayAlert("Classical bullish divergence on: ",
currentTrough);
}
if(macd[currentTrough] < macd[lastTrough] &&
Low[currentTrough] > Low[lastTrough])
{
bullishDivergence[currentTrough] = macd[currentTrough] -
arrowsDisplacement;
if(drawPriceTrendLines == true)
DrawPriceTrendLine(Time[currentTrough], Time[lastTrough],
Low[currentTrough],
Low[lastTrough], Green, STYLE_DOT);
if(drawIndicatorTrendLines == true)
DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough],
macd[currentTrough],
macd[lastTrough], Green, STYLE_DOT);
if(displayAlert == true)
DisplayAlert("Reverse bullish divergence on: ", currentTrough);
}
}
void CatchBearishDivergence(int shift)
{
if(IsIndicatorPeak(shift) == false)
return;
int currentPeak = shift;
int lastPeak = GetIndicatorLastPeak(shift);
if(macd[currentPeak] < macd[lastPeak] &&
High[currentPeak] > High[lastPeak])
{
bearishDivergence[currentPeak] = macd[currentPeak] +
arrowsDisПоказано первые 50% кода (символов: 5494)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.