Как проверить свечи - страница 4

 
Andy:


Класс Ctrade позволяет выбрать три режима печати логов (метод LogLevel)

ENUM_LOG_LEVELS

Идентификатор

Описание

Значение

LOG_LEVEL_NO

Вывод сообщений отключен

0

LOG_LEVEL_ERRORS

Выводятся только сообщения об ошибках

1

LOG_LEVEL_ALL

Выводятся все сообщения

2


По умолчания объект класса CTrade создаётся с директивой

LOG_LEVEL_ERRORS

Выводятся только сообщения об ошибках

1

- то есть логируются только сообщения об ошибках.

Другими словами будет выполняться только этот блок - и только если есть ошибка:

//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }
 

Володя, еще раз спасибо за ваши ответы!

Я это тоже смотрел - а первый блок когда-нибудь будет выполняться и для чего он тогда?

 
Andy:

Володя, еще раз спасибо за ваши ответы!

Я это тоже смотрел - а первый блок когда-нибудь будет выполняться и для чего он тогда?

Вызывайте метод метод LogLevel  с директивой LOG_LEVEL_ALL и будут логироваться все сообщения.

 

Эта директива автоматически устанавливается в режиме тестирования - а что и куда в этом случае выводится?

 
Andy:
Эта директива автоматически устанавливается в режиме тестирования - а что и куда в этом случае выводится?

Внимательно прочитайте, я указал информацию

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как проверить свечи

Vladimir Karputov, 2019.08.28 10:33

Класс Ctrade позволяет выбрать три режима печати логов (метод LogLevel)

ENUM_LOG_LEVELS

Идентификатор

Описание

Значение

LOG_LEVEL_NO

Вывод сообщений отключен

0

LOG_LEVEL_ERRORS

Выводятся только сообщения об ошибках

1

LOG_LEVEL_ALL

Выводятся все сообщения

2


По умолчания объект класса CTrade создаётся с директивой

LOG_LEVEL_ERRORS

Выводятся только сообщения об ошибках

1

- то есть логируются только сообщения об ошибках.

Другими словами будет выполняться только этот блок - и только если есть ошибка:

//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }

если нужно логирование всех сообщений, нужно вручную

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как проверить свечи

Vladimir Karputov, 2019.08.28 11:41

Вызывайте метод метод LogLevel  с директивой LOG_LEVEL_ALL и будут логироваться все сообщения.


 

Нужно наследоваться от класса CExpert и создать свой класс (путь это будет CExpertMy), в этот новом классе переписать метод InitTrade (прописать полное логирование).

 
Что за непотредная привычка писать в СТАРОМ СООБЩЕНИИ? Я такое игнорирую.
 
Vladimir Karputov:
Что за непотребная привычка писать в СТАРОМ СООБЩЕНИИ? Я такое игнорирую.

Извините, не успел сразу написать.

В тестере, кстати, функция PlaySound () не выполняется, поэтому и спросил - когда и как будет выводится этот звук, если первый блок по умолчанию будет работать в тестере?

 
Andy:

Извините, не успел сразу написать.

В тестере, кстати, функция PlaySound () не выполняется, поэтому и спросил - когда и как будет выводится этот звук, если первый блок по умолчанию будет работать в тестере?

Всё завит от того с какой директивой был метод LogLevel

По умолчания объект класса CTrade создаётся с директивой

LOG_LEVEL_ERRORS

Выводятся только сообщения об ошибках

1

значит смотрим, что с такой директивой LOG_LEVEL_ERRORS будет переход только во вторую часть и то только если при отсылке торгового приказа (переменная res == false) произошла ошибка 

//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }
 
Ну и в итоге - когда практически в советнике из Мастера MQL5 будет воспроизводиться звук из первой части, который мы добавили в начале этой темы?
Причина обращения: