Коллеги, подскажите, как прочитать из советника логи с закладки Эксперты или Журнал?
Не хочется извлекать текст из SysListView, хочется более элегантного решения.
Может, есть команда "сброс логов на диск" и ее можно отправить терминалу?
У кого какие мысли есть?
Если логи будет читать сторонняя программа, то способ принудительного сброса лога - закрытие терминала ))) Потом сразу же открываем терминал.
Если программа основана на MQL и работает внутри терминала, то нужно исследовать, какое сообщение посылается, когда вызываем "Открыть" из контекстного меню журнала. Ведь именно так происходит сброс данных на HDD без закрытия терминала. Но такая возможность - недокументированная и придется с каждым новым билдом проверять, не изменилось ли там чего.
правый клик в окне терминала, и выбор команды "смотреть" приводит к сбросу логов в файл
Спрашиваю про конкретный код. Может, кто знает
Если логи будет читать сторонняя программа, то способ принудительного сброса лога - закрытие терминала ))) Потом сразу же открываем терминал.
Если программа основана на MQL и работает внутри терминала, то нужно исследовать, какое сообщение посылается, когда вызываем "Открыть" из контекстного меню журнала. Ведь именно так происходит сброс данных на HDD без закрытия терминала. Но такая возможность - недокументированная и придется с каждым новым билдом проверять, не изменилось ли там чего.
Это нужно в советнике, закрытие не подходит (да и долгое оно, не вариант).
Если никто не подскажет, буду исследовать команды.
Если никто не подскажет, буду исследовать команды.
Звучит, как угроза)) Но кто сказал, что мы испугаемся угроз?
Ну а если серьезно, то, на мой взгляд, это наиболее оптимальный вариант. Читать ListCtrl - проблемнее, т. к. там, скорее всего, двойной буфер используется.
1. если кто-то пишет во вкладку "Эксперты", то наверное этот кто-то может писать параллельно то же самое в конкретный файл
2. учитывая непреодолимое стремление МК к песочницам и безопасности, врядли есть стандартный способ получить данные из папки, которая частью песочницы не является, а потому рискну предположить, что единственный способ прочитать системные логи - это из DLL читать *.log файлы отсюда - https://www.metatrader5.com/ru/terminal/help/start_advanced/structure
Лично я все трассировочные сообщения вывожу с помощью макросов TRACE(), которые для DEBUG варианта разворачиваются в функцию (для RELEASE все зависит от установленных разрешений):
void PerformTrace(string strValue,string strFunc,string strLine)
{
if(FUNCTIONSIG4TRACE !="" && strFunc != FUNCTIONSIG4TRACE)
return;
if(TRACE_PERMITION != true)
return;
uint uiCurTickCounter = GetTickCount();
if(bDenyOftenTrace == true && uiCurTickCounter - uiGlobalTickCounter < TRACEMINTIME)
return;
uiGlobalTickCounter = uiCurTickCounter;
string strRes;
if(TRACEFUNCTIONSIG == 1)
#ifdef __MQL5__
StringConcatenate(strRes,strFunc,", line ",strLine,": ",strValue);
#else
strRes = StringConcatenate(strFunc,", line ",strLine,": ",strValue);
#endif
else
strRes = strValue;
if(TRACEREPEAT == 0)
{
if(strLastMessage == strValue)
{
++uiNumOfPassedMessages;
return;
};
if(uiNumOfPassedMessages > 0)
{
strRes = "(ВНИМАНИЕ !!! Пропущено одинаковых предыдущих сообщений: " + IntegerToString(uiNumOfPassedMessages) + "); " + strRes ;
uiNumOfPassedMessages = 0;
};
strLastMessage = strValue;
};
switch(TRACEMODE)
{
case 0:
return;
case 1:
Print(strRes);
return;
case 2:
CLogFile::GlobalLogString(strRes,"MyTrace.log");
return;
case 3:
MessageBox(strRes,"TRACE Message");
return;
case 4:
Print(strRes);
MessageBox(strRes,"TRACE Message");
return;
case 5:
Print(strRes);
CLogFile::GlobalLogString(strRes,"MyTrace.log");
return;
case 6:
Print(strRes);
CLogFile::GlobalLogString(strRes,"MyTrace.log");
CComment::GlobalCommentString(strRes);
return;
default:
break;
}
};
Определяя параметр TRACEMODE - можно выводить все сообщения так, как надо, и если эти сообщения будут потом использоваться - я их вывожу в отдельный файл, который потом читается в необходимом месте.
Кроме того, там есть дополнительные параметры, с помощью которого можно задавать режимы работы частых трейсов или вобще их запретить.
Таким образом, обеспечивается гибкий вывод сообщений так, как необходимо, или вобще выключение всякого вывода.
1. если кто-то пишет во вкладку "Эксперты", то наверное этот кто-то может писать параллельно то же самое в конкретный файл
2. учитывая непреодолимое стремление МК к песочницам и безопасности, врядли есть стандартный способ получить данные из папки, которая частью песочницы не является, а потому рискну предположить, что единственный способ прочитать системные логи - это из DLL читать *.log файлы отсюда - https://www.metatrader5.com/ru/terminal/help/start_advanced/structure
1. Спасибо, кэп)
Если бы надо было читать свои записи, вопроса бы не возникло
2. Понятно, что это будет dll, вопрос в том - какая.
Лично я все трассировочные сообщения вывожу с помощью макросов TRACE(), которые для DEBUG варианта разворачиваются в функцию (для RELEASE все зависит от установленных разрешений):
Таким образом, обеспечивается гибкий вывод сообщений так, как необходимо, или вобще выключение всякого вывода.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги, подскажите, как прочитать из советника логи с закладки Эксперты или Журнал?
Не хочется извлекать текст из SysListView, хочется более элегантного решения.
Может, есть команда "сброс логов на диск" и ее можно отправить терминалу?
У кого какие мысли есть?