macddivergence_ea_stub.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «macddivergence_ea_stub.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Программа написана на языке MQL4 для платформы MetaTrader 4 и представляет собой торгового советника. Она предназначена для обнаружения расхождений между ценой и осциллятором OsMA, основанным на индикаторе MACD. Советник анализирует классические и инверсионные дивергенции на минимумах и максимумах, а также запускает пользовательские сценарии обработки и отправляет уведомления. Функция открытия сделок реализована как заглушка и не выполняет реальных торговых операций.
Настройки программы
| Настройка | Описание |
|---|---|
| separator1 | Разделитель настроек — Текстовый параметр-разделитель, отображаемый в окне настроек советника для визуальной группировки параметров. |
| fastEMA | Период быстрой EMA — Целочисленный период быстрой экспоненциальной скользящей средней, используемой при расчёте осциллятора OsMA. |
| slowEMA | Период медленной EMA — Целочисленный период медленной экспоненциальной скользящей средней, используемой при расчёте осциллятора OsMA. |
| signal | Период сигнальной линии — Целочисленный период сигнальной линии, применяемой при расчёте осциллятора OsMA. |
| displayAlert | Отображение оповещений — Переключатель, включающий или отключающий вывод визуальных оповещений на график при обнаружении дивергенции. |
| sendEmail | Отправка email — Переключатель, включающий или отключающий отправку электронных уведомлений при обнаружении дивергенции. |
Поиск по коду файла
#include <stdlib.mqh>
#include <stderror.mqh>
#define LONG 1
#define SHORT -1
#define FLAT 0
#define BULLISH 1
#define BEARISH 2
extern string separator1 = "*** OSMA Settings ***";
extern int fastEMA = 12;
extern int slowEMA = 26;
extern int signal = 9;
extern bool displayAlert = true;
extern bool sendEmail = true;
static datetime lastAlertTime, lastEmailTime;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double OsMA(int pos)
{
double val;
val = iOsMA(NULL, 0, fastEMA, slowEMA, signal, PRICE_CLOSE, pos);
return(val);
}
int GetSignal()
{
int bull = FLAT, bear = FLAT;
double myOsMA;
if(Volume[0]>1) return;
myOsMA = OsMA(0);
bull = CatchBullishDivergence(0 + 2);
if (bull != FLAT) return(LONG);
bear = CatchBearishDivergence(0 + 2);
if (bear != FLAT) return(SHORT);
return (FLAT);
}
int CatchBullishDivergence(int shift)
{
double OsMAcurrentTrough, OsMAlastTrough, LowCurrentTrough, LowLastTrough;
if(IsIndicatorTrough(shift) == false)
return(FLAT);
int currentTrough = shift;
int lastTrough = GetIndicatorLastTrough(shift);
OsMAcurrentTrough = OsMA(currentTrough);
OsMAlastTrough = OsMA(lastTrough);
LowCurrentTrough = iLow(NULL, 0, currentTrough);
LowLastTrough = iLow(NULL, 0, lastTrough);
if(OsMAcurrentTrough > OsMAlastTrough && LowCurrentTrough < LowLastTrough)
{
if(displayAlert == true)
DisplayAlert("Classical bullish divergence on: ", currentTrough);
if(sendEmail == true)
SendAnEmail("Classical bullish divergence on: ", currentTrough);
return(BULLISH);
}
if(OsMAcurrentTrough < OsMAlastTrough && LowCurrentTrough > LowLastTrough)
{
if(displayAlert == true)
DisplayAlert("Reverse bullish divergence on: ", currentTrough);
if(sendEmail == true)
SendAnEmail("Reverse bullish divergence on: ", currentTrough);
return(BULLISH);
}
return(FLAT);
}
int CatchBearishDivergence(int shift)
{
double OsMAcurrentPeak, OsMAlastPeak, HighCurrentPeak, HighLastPeak;
if(IsIndicatorPeak(shift) == false)
return;
int currentPeak = shift;
int lastPeak = GetIndicatorLastPeak(shift);
OsMAcurrentPeak = OsMA(currentPeak);
OsMAlastPeak = OsMA(lastPeak);
HighCurrentPeak = iHigh(NULL, 0, currentPeak);
HighLastPeak = iHigh(NULL, 0, lastPeak);
if(OsMAcurrentPeak < OsMAlastPeak && HighCurrentPeak > HighLastPeak)
{
if(displayAlert == true)
DisplayAlert("Classical bearish divergence on: ", currentPeak);
if(sendEmail == true)
SendAnEmail("Classical bearish divergence on: ", currentPeak);
return(BEARISH);
}
if(OsMAcurrentPeak > OsMAlastPeak && HighCurrentPeak < HighLastPeak)
{
if(displayAlert == true)
DisplayAlert("Reverse bearish divergence on: ", currentPeak);
if(sendEmail == true)
SendAnEmail("Reverse bearish divergence on: ", currentPeak);
return(BEARISH);
}
}
bool IsIndicatorPeak(int shift)
{
double OsMAshift, OsMAshift1, OsMAshiftm1, OsMAcurrent;
OsMAshift = OsMA(shift);
OsMAshift1 = OsMA(shПоказано первые 50% кода (символов: 4639)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.