В индикаторах сетевые функции запрещены, так как они неминуемо будут тормозить цикл обработки данных.
Уважаемый Ренат, прошу подсказать корректную методику отправки уведомлений в Телеграм - для этого нужно исполнить POST Web запрос с передачей параметров.
Суть библиотеки (TelegramMQLsoftBot.mq4 в моём случае) в том, чтобы её можно было использовать в произвольном индикаторе или советнике для отправки уведомлений в Телеграм.
Или сетевые функции в советниках разрешены (запрещены только в индикаторах)?
Или сетевые функции в советниках разрешены (запрещены только в индикаторах)?
Сетевые функции разрешены везде, кроме индикаторов.
Спасибо.
В советнике успешно получится вызов функции отправки сообщений в Телеграм:
//+------------------------------------------------------------------+ //| MQLTestExpert.mq4 | //| Copyright 2018, Valery V. Chesnokov (MQLsoft.ru) | //| http://www.mqlsoft.ru/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, Valery V. Chesnokov (MQLsoft.ru)" #property link "http://www.mqlsoft.ru/" #property version "1.00" #property strict #include "..\Libraries\TelegramMQLsoftBot.mq4" input int Counter = 20; // Counter int curr_count = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- TelegramSend(); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- TelegramSend(); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| My Telegram function | //+------------------------------------------------------------------+ int TelegramSend() { ++curr_count; if (true)//curr_count >= 20) { //curr_count = 0; string UserName = "vchesnokov"; string Message = "Message from MQLTestIndicator"; int result = TelegramSendMessage(UserName, Message); Alert ("TelegramSend return: ", result); } return curr_count; } //+------------------------------------------------------------------+
Уважаемый Ренат, прошу подсказать корректную методику отправки уведомлений в Телеграм - для этого нужно исполнить POST Web запрос с передачей параметров.
Суть библиотеки (TelegramMQLsoftBot.mq4 в моём случае) в том, чтобы её можно было использовать в произвольном индикаторе или советнике для отправки уведомлений в Телеграм.
Или сетевые функции в советниках разрешены (запрещены только в индикаторах)?
А у вас провайдер не блокирует телеграм? Было время, тоже думал, что проблема в вебреквесте, а оказалось блокировка провайдера.
А у вас провайдер не блокирует телеграм? Было время, тоже думал, что проблема в вебреквесте, а оказалось блокировка провайдера.
Вы знаете, Телеграм (тфу-тфу) работает исправно. Если его и пытаются блокировать, то совсем безуспешно :) Причём и на десктопе (один провайдер), и на мобильном инете (другой провайдер) Telegram успешно работает - молодцы его создатели.
Мне удалось успешно из советника MetaTrader 4 передавать сообщения в Телеграм через штатную MQL4 функцию WebRequest в своего Telegram бота @MQLsoftBot:
НО. Одно но - в бота не доходят сообщения с кириллицей.
Только с латиницей и цифрами - т.е. думаю, что проходят сообщения с ANSI символами.
Отправку сообщений в Телеграм бота из своей MQL4 библиотеки делаю таким кодом:
//+------------------------------------------------------------------+ //| Telegram Send Message Function | //+------------------------------------------------------------------+ int TelegramSendMessage(string UserName, string Message) export { int res; char data[]; char result[]; string str = ""; string params = "&userlogin=" + UserName + "&messtext=" + Message; StringToCharArray(params, data); res = WebRequest("POST", "https://mqlsoft.ru/api/<INSERT_YOUR_URL_HERE>", NULL, 0, data, result, str); if(res == 200) { Print ("В бота @MQLsoftBot в Telegram успешно отправлен запрос"); return (0); } else { Print ("Ошибка POST WEB запроса на сервер #" + (string)res + ", LastError="+(string)GetLastError()); //Print ("result: " + CharArrayToString(result)); return (res); } } //+------------------------------------------------------------------+
При этом тестирование POST HTTPS запроса, к примеру, на сервисе resttesttest.com, т.е. минуя MetaTrader 4, прекрасно отправляет в бота и сообщения с кириллицей.
Т.е. отправка с кириллицей не доходит до бота именно при вызове WebRequest из MT4.
Может, как-то нужно обернуть параметры POST запроса?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Для отправки данных в Telegram в MetaTrader 4 (билд 1147 от 16 Nov 2018) использую функцию WebRequest.
Код библиотеки пишу так (там 2 варианта функции отправки: TelegramSendMessage - через WebRequest, и TelegramSendMessage2 - через испорт "Wininet.dll", не работают обе):
И в тестовом индикаторе вызываю функцию отправки:
При этом в настройках терминала разрешил доступ к нужным URL домена:
Несмотря на выданные разрешения, вызов:
возвращает в GetLastError() код 4060.
При этом тестирование моего веб-сервиса через тестер https://resttesttest.com даёт успешную отправку POST запроса в Телеграм бота:
Прошу помочь с поиском причины ошибки и её устранением.
Не нашёл на сайте адреса, к сожалению, куда можно отправить ticket в support компании MetaQuotes с этом вопросом.
Прилагаю оба файла (библиотека TelegramMQLsoftBot.mq4 и индикатор MQLTestIndicator.mq4).