
Разработка инструментария для анализа движения цен (Часть 4): Советник Analytics Forecaster
Содержание
- Введение
- Обзор предыдущей статьи
- Обзор проекта
- Создание бота Telegram и получение идентификаторов графиков
- Интеграция Telegram в советник
- Тестирование
- Заключение
Введение
Мы перешли от скрипта к советнику, создав Analytics Master для анализа ключевых показателей и предоставления постоянных обновлений непосредственно на графике. Хотя он и оказался полезен, его возможности были ограничены доступом к аналитической информации исключительно внутри самого графика. Прежде чем приступить к разработке более продвинутых инструментов анализа, необходимо улучшить качество передачи нашей аналитической информации.
В этой статье мы сосредоточимся на интеграции нашей трансляции с Telegram для обеспечения более широкого доступа к анализируемой информации. Я выбрал Telegram для этой цели из-за его популярности и доступного интерфейса среди трейдеров. Интеграция обновлений графиков MetaTrader 5 с Telegram дает активным трейдерам значительные преимущества. Такая настройка обеспечивает немедленный доступ к важной рыночной информации, повышает удобство использования и улучшает коммуникацию. Следовательно, вы сможете разрабатывать более эффективные стратегии и оперативно реагировать на быстро меняющийся рынок. Благодаря такой интеграции вы сможете повысить свои шансы на успех и принимать более обоснованные и своевременные решения.
Обзор предыдущей статьи
Давайте вспомним наш предыдущий инструмент - советник Analytics Master. Мы интегрируем ту же аналитическую информацию из этого инструмента в Telegram. Подробности о нем можно узнать здесь - https://www.mql5.com/ru/articles/16434. Советник Analytics Master был разработан для анализа и расчета следующих ключевых показателей рынка:
- Открытие и закрытие предыдущего дня
- Объем предыдущего дня
- Объем текущего дня
- Максимум и минимум предыдущего дня
- Ключевые уровни поддержки и сопротивления
- Баланс счета
- Эквити
- Рыночный спред
- Минимальный и максимальный размер лота
- Рыночная волатильность
Понимание этих показателей имеет решающее значение для трейдеров, поскольку они дают представление о поведении рынка и трендах. Показатели предыдущего дня помогают установить контекст текущих рыночных условий, в то время как текущие показатели помогают оценить производительность. Определяя уровни поддержки и сопротивления, трейдеры могут принимать более обоснованные решения о точках входа и выхода. Более того, знание баланса счета и эквити обеспечивает эффективное управление торговыми рисками. Знание рыночного спреда, размеров лотов и волатильности имеет решающее значение для оптимизации исполнения сделок и максимизации потенциальной прибыли при минимизации рисков. В целом, четкое понимание этих показателей позволяет трейдерам разрабатывать обоснованные стратегии и повышать общую эффективность торговли.
Советник строил линии тренда для ключевых уровней поддержки и сопротивления и прогнозировал направление рынка на основе рассчитанных показателей. Вся эта информация была представлена на графике в табличном формате и обновлялась регулярно каждые два часа. См. рис. 1 ниже.
Рис 1. Результат анализа
Раздел анализа также включает время последнего обновления для удобного доступа к актуальной информации. Инструмент предназначен исключительно для анализа рынка и не совершает сделки автоматически. Пользователи должны вручную совершать сделки на основе проанализированной информации и сгенерированных сигналов. Для достижения оптимальных результатов важно сочетать эти данные с собственной торговой стратегией пользователя.
Обзор проекта
Telegram — сервис обмена сообщениями, позволяющий трейдерам получать мгновенные уведомления, оповещения и аналитику о своей торговой деятельности непосредственно в чате Telegram. Интеграция с MetaTrader 5 включает использование API Telegram Bot, обеспечивая автоматическую связь между торговым алгоритмом или советником (EA), работающим на MetaTrader 5, и чатом Telegram. Структура показана на диаграмме ниже.
Рис 2. Путь интеграции
Ключевые компоненты интеграции
- Telegram-бот: Создайте бота Telegram с помощью BotFather в Telegram, который предоставляет токен доступа, необходимый для аутентификации запросов, отправляемых в API Telegram.
- Идентификатор чата: Определите идентификатор чата, куда следует отправлять сообщения. Это может быть персональный чат или групповой чат, который используется для указания, куда будут отправляться оповещения.
- MetaTrader 5: Используйте язык программирования MQL5 для разработки или модификации советников или скриптов, которые могут подключаться к API Telegram. Обычно это подразумевает использование HTTP-запросов POST для отправки сообщений.
Создание бота Telegram и получение идентификаторов графиков
Telegram-боты — это автоматизированные приложения, работающие в мессенджере Telegram и позволяющие взаимодействовать с пользователями посредством автоматизированных задач. Одной из их основных функций является оптимизация коммуникации путем предоставления быстрых и релевантных ответов на запросы пользователей без вмешательства человека. Эта возможность позволяет компаниям и разработчикам автоматизировать различные задачи, такие как отправка уведомлений и обработка команд, что улучшает пользовательский опыт и вовлеченность.
Кроме того, боты Telegram отлично справляются с поиском информации: они могут извлекать данные из внешних источников, таких как рыночные данные или новостные ленты, и доставлять их напрямую пользователям. В контексте торговли боты особенно ценны для оповещения пользователей о конкретных рыночных событиях, изменениях цен или сигналах на основе заранее определенных критериев. Возможность интеграции с API и другими сервисами позволяет им выполнять такие задачи, как анализ данных и составление отчетов, что делает их универсальными инструментами для различных приложений. Чтобы создать своего Telegram-бота, выполните следующие шаги:
Шаг 1: Откройте Telegram
Убедитесь, что на вашем устройстве установлено приложение Telegram.
Шаг 2: Найдите BotFather
Рис. 3. Botfather
В строке поиска приложения введите BotFather.
BotFather — официальный бот Telegram, который позволяет создавать и управлять другими ботами.
Шаг 3: Начните чат с BotFather
Рис 4. Шаги 3 и 4
Нажмите на результат поиска BotFather, чтобы открыть чат.
Нажмите кнопку Start или введите /start, чтобы начать разговор.
Шаг 4: Создайте нового бота
Введите команду /newbot и отправьте ее.
BotFather предложит вам выбрать имя для вашего бота. Это имя, которое будут видеть пользователи.
После ввода имени вам будет предложено указать имя пользователя для вашего бота. Имя пользователя должно заканчиваться на "bot" (например, MyCoolBot).
Шаг 5: Получите токен бота
Рис. 5. Шаг 5
После выполнения предыдущих шагов BotFather создаст вашего бота и предоставит вам уникальный токен API. Этот токен необходим для взаимодействия с API Telegram Bot, поэтому сохраните его в надежном месте.
Следующий шаг - поиск идентификатора графика. Идентификаторы присваиваются определенным визуализациям данных или графикам в приложениях. Они играют решающую роль в идентификации и поиске графиков, позволяя пользователям и разработчикам легко ссылаться на определенные визуализации. Идентификаторы облегчают извлечение текущих или исторических данных, относящихся к конкретным графикам, что позволяет применять индивидуальный подход к анализу данных. Этот аспект особенно полезен в торговле, поскольку он позволяет пользователям быстро получать доступ к необходимой информации, что приводит к принятию обоснованных решений.
Более того, идентификаторы обеспечивают возможность настройки, позволяя разработчикам изменять параметры и настройки в соответствии с индивидуальными предпочтениями пользователя или торговыми стратегиями. При интеграции с Telegram-ботами идентификаторы графиков могут значительно расширить функциональность; они позволяют ботам предоставлять пользователям визуализацию определенных данных непосредственно в интерфейсе чата, оптимизируя процесс получения аналитики и принятия торговых решений. Ниже приведены два способа получения идентификатора с помощью Telegram-ботов.
Метод 1: Использование ботов Get ID
Всё просто. Вы можете находить и запускать таких ботов, как @get_id_bot или @userinfobot. После того, как вы запустите бота, нажав кнопку «Пуск» или введя команду /start, он ответит вам идентификатором чата, который вы затем можете записать.
Рис. 6. Get ID
Метод 2: С помощью веб-браузера
Начните с отправки любого сообщения вашему боту в Telegram. Затем откройте веб-браузер и введите следующий URL-адрес, заменив <YourBotToken> реальным токеном вашего бота:
https://api.telegram.org/bot<YourBotToken>/getUpdates
После нажатия Enter проверьте ответ, возвращенный API. Ваш идентификатор будет указан в разделе result.
Интеграция Telegram в советник
Реализация интеграции Telegram в советник подразумевает включение функций обмена сообщениями Telegram в наш торговый советник на MetaTrader. Благодаря этой интеграции советник может отправлять мгновенные уведомления и оповещения непосредственно на аккаунт Telegram, информируя пользователей о рыночных условиях, ключевых показателях и других важных торговых данных. Используя API Telegram, я могу улучшить функциональность советника, гарантируя пользователям получение важных обновлений без необходимости постоянно проверять торговую платформу. Это повышает скорость реагирования на изменения рынка, в конечном итоге делая торговлю более эффективной.
Код Analytics Master был улучшен за счет включения команд, которые позволяют ему передавать проанализированные показатели в приложение Telegram. Я предоставлю вам полный интегрированный код MQL5 и проведу вас шаг за шагом через процесс интеграции.
Код Analytics Forecaster
//+-------------------------------------------------------------------+ //| Analytics Forecaster EA.mq5| //| Copyright 2024, Christian Benjamin| //| https://www.mql5.com| //+-------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/en/users/lynnchris" #property description "EA for market analysis,commenting and Telegram Integeration" #property version "1.1" #property strict // Inputs for risk management input double RiskPercentage = 1.0; // Percentage of account balance to risk per trade input double StopLossMultiplier = 1.0; // Multiplier for determining the stop loss distance input int ATR_Period = 14; // Period for ATR calculation // Telegram configuration input string TelegramToken = "YOUR BOT TOKEN"; // Your Telegram bot token input string ChatID = "YOUR CHART ID"; // Your chat ID input bool SendTelegramAlerts = true; // Option to enable/disable Telegram notifications // Global variables for storing values datetime lastUpdateTime = 0; double previousDayOpen, previousDayClose, previousDayHigh, previousDayLow; double previousDayVolume; double currentDayVolume; double support, resistance; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { lastUpdateTime = 0; // Set the initial update time return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0); // Clean up any drawn objects on the current chart } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { UpdateMetrics(); // Call to the function that fetches and displays the metrics } //+------------------------------------------------------------------+ //| Update metrics and display them | //+------------------------------------------------------------------+ void UpdateMetrics() { // Check if 2 hours have passed since the last update if(TimeCurrent() - lastUpdateTime >= 2 * 3600) { // Fetch previous day's data datetime prevDay = iTime(NULL, PERIOD_D1, 1); previousDayOpen = iOpen(NULL, PERIOD_D1, 1); previousDayClose = iClose(NULL, PERIOD_D1, 1); previousDayHigh = iHigh(NULL, PERIOD_D1, 1); previousDayLow = iLow(NULL, PERIOD_D1, 1); previousDayVolume = iVolume(NULL, PERIOD_D1, 1); // Fetch current day's volume currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Volume for today // Calculate support and resistance support = previousDayLow - (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level resistance = previousDayHigh + (previousDayHigh - previousDayLow) * 0.382; // Fibonacci level // Determine market direction string marketDirection = AnalyzeMarketDirection(previousDayOpen, previousDayClose, previousDayHigh, previousDayLow); // Calculate possible lot size based on risk management double lotSize = CalculateLotSize(support, resistance); // Retrieve account metrics double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE); double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY); // Calculate market spread manually double marketBid = SymbolInfoDouble(_Symbol, SYMBOL_BID); double marketAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double marketSpread = marketAsk - marketBid; // Calculate spread double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); double maxLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); // Calculate market volatility using ATR int atrHandle = iATR(NULL, PERIOD_H1, ATR_Period); // Get the ATR handle double atrValue = 0.0; if(atrHandle != INVALID_HANDLE) // Check if the handle is valid { double atrBuffer[]; // Array to hold the ATR values if(CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) // Copy the latest ATR value { atrValue = atrBuffer[0]; // Retrieve the ATR value from the buffer } IndicatorRelease(atrHandle); // Release the indicator handle } // Create the output string, including pair name and last update time string pairName = Symbol(); // Get the current symbol name string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES); string infoStr = StringFormat("Pair: %s\nPrev Day Open: %.2f\nPrev Day Close: %.2f\nPrev Day High: %.2f\nPrev Day Low: %.2f\n" "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\nMarket Direction: %s\n" "Support: %.2f\nResistance: %.2f\nAccount Balance: %.2f\nAccount Equity: %.2f\n" "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n" "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f", pairName, previousDayOpen, previousDayClose, previousDayHigh, previousDayLow, previousDayVolume, currentDayVolume, marketDirection, support, resistance, accountBalance, accountEquity, marketSpread, minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize); // Log the information Print(infoStr); // Display information on the chart Comment(infoStr); // Send Telegram notification if(SendTelegramAlerts) SendTelegramMessage(infoStr); // Remove old trend lines and create new ones for previous day's high/low ObjectsDeleteAll(0); // Draw continuous trend lines DrawContinuousTrendLine("PrevDayHigh", previousDayHigh); DrawContinuousTrendLine("PrevDayLow", previousDayLow); // Update last update time lastUpdateTime = TimeCurrent(); } } //+------------------------------------------------------------------+ //| Analyze market direction | //+------------------------------------------------------------------+ string AnalyzeMarketDirection(double open, double close, double high, double low) { string direction; if(close > open) { direction = "Bullish"; } else if(close < open) { direction = "Bearish"; } else { direction = "Neutral"; } // Include current trends or patterns based on high and low for further analysis if(high > open && high > close) { direction += " with bullish pressure"; // Example addition for context } else if(low < open && low < close) { direction += " with bearish pressure"; // Example addition for context } return direction; } //+------------------------------------------------------------------+ //| Draw a continuous trend line to the left on the chart | //+------------------------------------------------------------------+ void DrawContinuousTrendLine(string name, double price) { datetime startTime = TimeCurrent() - 720 * 3600; // Extend 24 hours into the past ObjectCreate(0, name, OBJ_TREND, 0, startTime, price, TimeCurrent(), price); ObjectSetInteger(0, name, OBJPROP_COLOR, (StringFind(name, "High") >= 0) ? clrRed : clrBlue); ObjectSetInteger(0, name, OBJPROP_WIDTH, 2); // Set thickness of the line ObjectSetInteger(0, name, OBJPROP_XSIZE, 0); // Set this property to extend the line infinitely to the left } //+------------------------------------------------------------------+ //| Calculate the lot size based on risk management | //+------------------------------------------------------------------+ double CalculateLotSize(double support, double resistance) { double stopLossDistance = MathAbs((support - resistance) * StopLossMultiplier); double riskAmount = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercentage / 100.0); // Get the tick size for the current symbol double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); // Calculate the lot size based on the stop loss and tick size double lotSize = riskAmount / (stopLossDistance / tickSize); // Adjusted for the correct pip size lotSize = NormalizeDouble(lotSize, 2); // Normalize the lot size to two decimal places // Ensure lot size is above minimum lot size allowed by broker double minLotSize = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); if(lotSize < minLotSize) lotSize = minLotSize; return lotSize; } //+------------------------------------------------------------------+ //| Send message to Telegram API | //+------------------------------------------------------------------+ void SendTelegramMessage(string message) { string url = StringFormat("https://api.telegram.org/bot%s/sendMessage", TelegramToken); string headers = "Content-Type: application/json\r\n"; // Content type for JSON int timeout = 1000; // Timeout in milliseconds // Format the data as JSON string postData = StringFormat("{\"chat_id\":\"%s\",\"text\":\"%s\"}", ChatID, message); // Convert the string to a char array char dataArray[]; StringToCharArray(postData, dataArray); // Prepare the result buffer and response headers char result[]; string responseHeaders; // Perform the web request int responseCode = WebRequest("POST", url, headers, timeout, dataArray, result, responseHeaders); if(responseCode == 200) // HTTP 200 OK { Print("Message sent successfully!"); } else { PrintFormat("Error sending message. HTTP Response Code: %d. Error: %s", responseCode, GetLastError()); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
1. Объявляем входные переменные:
В начале нашего советника нам следует объявить необходимые входные переменные. Входные переменные в MQL5 позволяют трейдерам настраивать работу советника, не углубляясь в сам код. Это позволяет быстрее адаптировать торговые стратегии. Важно называть наши переменные интуитивно понятными именами. Например, TelegramToken четко указывает на свое предназначение. Рассмотрите возможность использования значений по умолчанию для ваших переменных, которые соответствуют общепринятой практике или настройкам вашей торговой стратегии, чтобы уменьшить сложность конфигурации при тестировании.
input string TelegramToken = "YOUR_BOT_API_TOKEN"; // Replace with your actual bot token input string ChatID = "YOUR_CHAT_ID"; // Replace with your actual chat ID input bool SendTelegramAlerts = true; // Control whether alerts are sent
Не забудьте заменить YOUR_BOT_API_TOKEN и YOUR_CHAT_ID фактическими значениями.
2. Создаем функцию отправки сообщений:
Функция SendTelegramMessage эффективно создает структурированный HTTP-запрос POST к API Telegram, отправляя уведомление в указанный чат. Подготавливая URL-адрес API, устанавливая заголовки, форматируя данные сообщения как JSON, выполняя запрос и обрабатывая ответ, эта функция позволяет советнику мгновенно отправлять обновления пользователям через Telegram. Эта оптимизированная логика обеспечивает быструю передачу сделок и оповещений, а также повышает общую функциональность советника как торгового помощника, легко информируя пользователя.
- Цель функции: Управление взаимодействием с API Telegram. Функция инкапсулирует логику, необходимую для отправки сообщения нашему Telegram-боту. Создавая повторно используемые функции, мы обеспечиваем ясность кода и сокращаем дублирование.
- Обработка ошибок. Каждый раз, когда мы отправляем сообщение, мы должны регистрировать не только успешные отправки, но и любые возникающие ошибки. Такая практика способствует отладке и обеспечивает обратную связь.
void SendTelegramMessage(string message) { string url = StringFormat("https://api.telegram.org/bot%s/sendMessage", TelegramToken); string headers = "Content-Type: application/json\r\n"; int timeout = 1000; string postData = StringFormat("{\"chat_id\":\"%s\",\"text\":\"%s\"}", ChatID, message); char dataArray[]; StringToCharArray(postData, dataArray); char result[]; string responseHeaders; int responseCode = WebRequest("POST", url, headers, timeout, dataArray, result, responseHeaders); if (responseCode == 200) { Print("Message sent successfully! Response: ", CharArrayToString(result)); } else { PrintFormat("Error sending message. HTTP Response Code: %d. Error: %s", responseCode, GetLastError()); } }
- Разбор WebRequest: Функция WebRequest имеет решающее значение, поскольку она позволяет нашему советнику отправлять HTTP-запросы к API. Для корректной работы убедитесь, что в свойствах советника включена опция "Разрешить автоматическую торговлю".
3. Запуск сообщения Telegram
- Проверка времени и получение данных
Первая часть кода инициирует проверку времени, чтобы определить, прошло ли два часа с момента последнего обновления рыночных показателей. Используя функцию TimeCurrent(), код извлекает текущее время и сравнивает его с переменной lastUpdateTime. Если прошло более двух часов, советник приступает к сбору последних данных о рыночных условиях. Эта проверка крайне важна для предотвращения переполнения чата Telegram сообщениями от советника.
// Check if 2 hours have passed since the last update if (TimeCurrent() - lastUpdateTime >= 2 * 3600) { // ... [Code that fetches data and calculates support/resistance, etc.] }
- Создание выходной строки
Во второй части создается подробная выходная строка infoStr для консолидации рыночных показателей, собранных в ходе работы советника. Код извлекает текущий торговый символ с именем пары, а также форматирует текущее время сообщения, используя lastUpdateStr. Функция StringFormat используется для построения сообщения, включающего различные заполнители, которые будут заменены определенными показателями, такими как максимум, минимум, открытие и закрытие предыдущего дня, объем текущего дня, направление рынка и другие данные счета. Эта отформатированная строка является неотъемлемой частью операции, поскольку она представляет собой четкое и структурированное резюме текущих рыночных условий, которое впоследствии будет отправлено через Telegram.
// Create the output string, including pair name and last update time string pairName = Symbol(); // Get the current symbol name string lastUpdateStr = TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES); string infoStr = StringFormat("Pair: %s\nPrev Day Open: %.2f\nPrev Day Close: %.2f\n" "Prev Day High: %.2f\nPrev Day Low: %.2f\n" "Prev Day Volume: %.0f\nCurrent Day Volume: %.0f\n" "Market Direction: %s\nSupport: %.2f\nResistance: %.2f\n" "Account Balance: %.2f\nAccount Equity: %.2f\n" "Market Spread: %.2f\nMin Lot Size: %.2f, Max Lot Size: %.2f\n" "Market Volatility (ATR): %.2f\nLast Update Time: %s\nPossible Lot Size: %.2f", pairName, previousDayOpen, previousDayClose, previousDayHigh, previousDayLow, previousDayVolume, currentDayVolume, marketDirection, support, resistance, accountBalance, accountEquity, marketSpread, minLotSize, maxLotSize, atrValue, lastUpdateStr, lotSize);
- Регистрация и отображение информации
Третья часть посвящена регистрации и отображению сконструированной информации. Функция Print (infoStr); служит для регистрации сообщения на вкладке "Эксперты" платформы MetaTrader, позволяя просматривать информацию, отправляемую через Telegram. Это дает полезный инструмент отладки, позволяющий подтвердить правильность формулирования показателей. Кроме того, команда Comment(infoStr); отображает ту же информацию непосредственно на торговом графике, предлагая трейдерам визуальное подтверждение показателей без необходимости обращения к журналу. Эти шаги информируют пользователя о предоставленных показателях и проверяют точность данных перед их отправкой в Telegram.
// Log the information Print(infoStr); // Here the information is logged for debugging // Display information on the chart Comment(infoStr); // Display the same information on the chart
- Отправка Telegram-уведомления
В заключительной части код управляет фактической отправкой Telegram-уведомления. Оператор (SendTelegramAlerts) проверяет, включена ли опция отправки оповещений, что позволяет пользователям легко отключать уведомления без необходимости внесения изменений в код. Если оповещения включены, вызывается функция SendTelegramMessage(infoStr), которая отправляет тщательно сформированное сообщение в указанный Telegram-чат. Этот шаг имеет решающее значение, поскольку именно на нем рыночные показатели эффективно доводятся до пользователя. После этого код обновляет переменную lastUpdateTime к текущему времени с помощью lastUpdateTime = TimeCurrent();, тем самым отмечая завершение этого цикла обновления и гарантируя, что время следующего обновления будет соответствовать двухчасовому интервалу, установленному ранее.
// Send Telegram notification if (SendTelegramAlerts) // Check if sending alerts is enabled SendTelegramMessage(infoStr); // Send the constructed message // Update last update time lastUpdateTime = TimeCurrent();
- Имя текущей пары
Я также добавил функцию, которая отображает название текущей пары рядом с анализируемыми показателями, что упрощает определение анализируемой пары.
// Create the output string, including pair name and last update time string pairName = Symbol(); // Get the current symbol name
Ниже показано, как информация будет выглядеть в Telegram:
Рис. 7. Результат
Тестирование
Перед тестированием необходимо внести несколько изменений в ваш MetaTrader 5, чтобы обеспечить бесперебойную передачу информации в Telegram.
Разрешить веб-запросы:
- Откройте MetaTrader 5 и перейдите в "Сервис" > "Настройки" > "Советники".
Рис. 8. Настройка веб-запросов
- Поставьте галочку в "Разрешить WebRequest для следующих URL" и добавьте https://api.telegram.org в список. Этот параметр позволяет советнику отправлять запросы к API Telegram.
Рис. 9. Настройка веб-запросов
В целях тестирования вы также можете настроить частоту обновления на более низкую. В этом случае я сокращу ее с 2 часов до 15 секунд.
//+------------------------------------------------------------------+ //| Update metrics and display them | //+------------------------------------------------------------------+ void UpdateMetrics() { // Check if 15 seconds have passed since the last update if(TimeCurrent() - lastUpdateTime >= 15)
Теперь скомпилируем наш MQL5-код в MetaEditor и прикрепим советник или скрипт к графику в MetaTrader 5. После успешной компиляции, перетащите советника на график. После этого вы начнете получать уведомления в Telegram об обновлениях, отправленных советником. Ниже я проиллюстрировал результаты теста из моего Telegram.
Рис. 10. Результат
Скриншот ниже также показывает, что информация, представленная на графике MetaTrader 5, аналогична информации, относящейся к Telegram.
Рис. 11. Результаты тестирования
Заключение
Успех советника Analytics Forecaster, как показывают представленные выше скриншоты, кроется в его продуманном подходе к анализу рынка и своевременных уведомлениях посредством интеграции с Telegram. Используя различные торговые показатели, такие как данные предыдущего дня, сравнение текущих объемов, направление рынка и принципы управления рисками, советник предоставляет трейдерам ценную информацию. Рассчитанные уровни поддержки и сопротивления в сочетании с автоматическим определением размера лота позволяют принимать более обоснованные торговые решения, гарантируя, что как начинающие, так и опытные трейдеры смогут адаптировать стратегии к рыночным условиям, эффективно управляя своими рисками.
Кроме того, тесная интеграция с Telegram улучшает взаимодействие с пользователем, предоставляя оперативные обновления, что позволяет трейдерам оперативно реагировать на изменения рынка. Возможность получать важную торговую информацию на мобильной платформе значительно повышает удобство мониторинга сделок, а также способствует созданию более гибкой торговой среды. Советник Analytics Forecaster демонстрирует выдающиеся возможности в автоматизации анализа и управления рисками, тем самым предоставляя трейдерам возможность оптимизировать свою деятельность на динамичном рынке. Благодаря акценту на точности данных и удобных для пользователя функциях советник выделяется как мощный инструмент в арсенале трейдера, прокладывая путь для будущих достижений в области автоматизированных торговых решений.
Дата | Название инструмента | Описание | Версия | Обновления | Примечания |
---|---|---|---|---|---|
01/10/24 | Chart Projector | Скрипт для наложения эффекта призрака на движение цены за предыдущий день. | 1.0 | Первоначальная версия | Первый инструмент в Lynnchris Tools Chest |
18/11/24 | Analytical Comment | Предоставляет информацию за предыдущий день в табличном формате, а также прогнозирует будущее направление рынка. | 1.0 | Первоначальная версия | Второй инструмент в Lynnchris Tools Chest |
27/11/24 | Analytics Master | Регулярное обновление рыночных показателей каждые два часа | 1.01 | Вторая версия | Третий инструмент в Lynnchris Tools Chest |
02/12/2024 | Analytics Forecaster | Регулярное обновление рыночных показателей каждые два часа с интеграцией с Telegram | 1.1 | Третья версия | Инструмент номер 5 |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/16559





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования