fvggengulfing.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «fvggengulfing.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, написанный на языке MQL4. Он предназначен для обнаружения двух типов ценовых паттернов: имбалансов Fair Value Gap (FVG) и паттернов поглощения (Engulfing) на настраиваемых таймфреймах.
При формировании бычьего FVG (когда минимум текущей свечи превышает максимум свечи трёх баров назад) индикатор рисует залитый прямоугольник на графике. При медвежьем FVG (максимум текущей свечи ниже минимума свечи трёх баров назад) рисуется прямоугольник другого цвета. Для обоих типов FVG используются отдельно настраиваемые цвета для коротких и длинных позиций.
Индикатор также распознаёт бычье и медвежье поглощение на заданном таймфрейме. Бычье поглощение определяется по условиям: предыдущая свеча медвежья, текущая бычья, закрытие текущей свечи выше открытия предыдущей и минимум текущей ниже минимума предыдущей. Для медвежьего поглощения условия инвертированы. Результаты отображаются соответствующими прямоугольниками.
Поддерживаются уведомления через встроенный механизм Alert, а также отправка сообщений в Telegram. Время обнаружения паттернов привязано к появлению новых свечей на соответствующих таймфреймах, что реализуется через пользовательский класс отслеживания новых баров.
Настройки программы
| Настройка | Описание |
|---|---|
| FVG Timeframe (Inp_fvgTf) | Таймфрейм FVG — Таймфрейм, на котором выполняется поиск имбалансов Fair Value Gap (FVG). |
| Engulfing Timeframe (Inp_engulfingTf) | Таймфрейм Engulfing — Таймфрейм, на котором выполняется поиск паттернов поглощения (Engulfing). |
| Short FVG Color (shortFvgColor) | Цвет медвежьего FVG — Цвет залитого прямоугольника, обозначающего медвежий FVG. |
| Long FVG Color (longFvgColor) | Цвет бычьего FVG — Цвет залитого прямоугольника, обозначающего бычий FVG. |
| Short Engulfing Color (shortEngulfingColor) | Цвет бычьего поглощения — Цвет прямоугольника, обозначающего паттерн бычьего поглощения. |
| Long Engulfing Color (longEngulfingColor) | Цвет медвежьего поглощения — Цвет прямоугольника, обозначающего паттерн медвежьего поглощения. |
| Send Alerts (sendAlerts) | Отправка уведомлений — Включает или отключает отправку уведомлений через встроенный механизм Alert. |
| Send Telegram Notifications (sendTelegramNotifications) | Отправка в Telegram — Включает или отключает отправку уведомлений в Telegram. |
| Chat ID (chatID) | ID чата — Идентификатор чата Telegram для отправки уведомлений. |
Поиск по коду файла
#property version "1.00"
#property indicator_chart_window
input ENUM_TIMEFRAMES Inp_fvgTf = PERIOD_H4; // FVG Timeframe
input ENUM_TIMEFRAMES Inp_engulfingTf = PERIOD_D1; // Engulfing Timeframe
input color shortFvgColor = clrMaroon; // Short FVG Color
input color longFvgColor = clrDarkGreen; // Long FVG Color
input color shortEngulfingColor = clrMaroon; // Short Engulfing Color
input color longEngulfingColor = clrDarkGreen; // Long Engulfing Color
input bool sendAlerts = true; // Send Alerts
input bool sendTelegramNotifications = true; // Send Telegram Notifications
input string chatID = ""; // Chat ID
input string token = ""; // Token
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// код доступен только после оплаты
}
class CisNewBar
{
protected:
datetime m_lastbar_time;
string m_symbol;
int m_period;
uint m_retcode;
int m_new_bars;
public:
void CisNewBar()
{
m_retcode = 0;
m_lastbar_time = 0;
m_symbol = Symbol();
m_period = Period();
}
uint GetRetCode() const { return (m_retcode); }
string GetSymbol() const { return (m_symbol); }
int GetPeriod() const { return (m_period); }
void SetSymbol(string symbol) { m_symbol = (symbol == NULL || symbol == "") ? Symbol() : symbol; }
void SetPeriod(int period) { m_period = (period == PERIOD_CURRENT) ? Period() : period; }
bool isNewBar()
{
m_retcode = 0;
if (m_lastbar_time > iTime(m_symbol, m_period, 0))
{
m_retcode = -1;
return (false);
}
if (m_lastbar_time == 0)
{
m_lastbar_time = iTime(m_symbol, m_period, 0);
return (false);
}
if (m_lastbar_time < iTime(m_symbol, m_period, 0))
{
m_lastbar_time = iTime(m_symbol, m_period, 0);
return (true);
}
return (false);
}
};
CisNewBar fvgTF;
CisNewBar engulfingTF;
bool GetPostData(char &postData[], string &headers, string chat, string text, string filename)
{
ResetLastError();
if (!FileIsExist(filename))
{
Print("File '%s' does not exist", filename);
return false;
}
int flags = FILE_READ | FILE_BIN;
int file = FileOpen(filename, flags);
if (file == INVALID_HANDLE)
{
int err = GetLastError();
Print("Could not open file '%s', error=%i", filename, err);
return false;
}
int fileSize = (int)FileSize(file);
uchar photo[];
ArrayResize(photo, fileSize);
FileReadArray(file, photo, 0, fileSize);
FileClose(file);
string hash = "";
AddPostData(postData, hash, "chat_id", chat);
if (StringLen(text) > 0)
{
AddPostData(postData, hash, "caption", text);
}
AddPostData(postData, hash, "photo", photo, filename); // Send local file as binary data
ArrayCopy(postData, "--" + hash + "--\r\n");
headers = "Content-Type: multipart/form-data; boundary=" + hash + "\r\n";
return true;
}
void AddPostData(uchar &data[], string &hash, string key = "", string value = "")
{
uchar valueArr[];
StringToCharArray(value, valueArr, 0, StringLen(value));
AddPostData(data, hash, key, valueArr);
}
void AddPostData(uchar &data[], string &hash, string key, uchar &value[], string fileName = "")
{
if (hash == "")
{
hash = Hash();
}
ArrayCopy(data, "\r\n");
ArrayCopy(data, "--" + hash + "\r\n");
if (fileName == "")
{
ArrayCopy(data, "Content-DispПоказано первые 50% кода (символов: 11675)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.