Новая версия платформы MetaTrader 5 build 3210: изменен алгоритм расчета Sharpe Ratio и добавлено управление минимальным/максимальным значением индикатора - страница 10

 
Slava #:

Очередная просьба поправить часть работы Терминала, что касается торговли. В b2958 работает правильно, далее - нет.

 
//+------------------------------------------------------------------+
//| Matrix to string (limit output rows/cols: 1024)                  |
//+------------------------------------------------------------------+
string MatrixToString(const matrix &m,int digits)
  {
//--- check rows and cols
   uint rows=(uint)MathMin(m.Rows(),1024);
   uint cols=(uint)MathMin(m.Cols(),1024);

   if(!rows || !cols)
      return(StringFormat("[%u,%u]",rows,cols));
//--- helper
   struct Num { static uint Digits(uint num) { return(num<10 ? 1 : (num<100 ? 2 : ( num<1000 ? 3 : (num<10000 ? 4 : (num<100000 ? 5 : (num<1000000 ? 6 : (num<10000000 ? 7 : (num<100000000 ? 8 : (num<1000000000 ? 9 : 10))))))))); }};
//--- calculate indices strings max
   uint   max_row=Num::Digits(rows);
   uint   max_col=Num::Digits(cols);
   uint   max_len=max_col+3;
//--- stringize elements and calculate max length
   string items[];
   if(ArrayResize(items,rows*cols)<=0)
      return("");

   for(uint r=0; r<rows; r++)
      for(uint c=0; c<cols; c++)
        {
         items[r*cols+c]=DoubleToString(m[r,c],digits);

         if(max_len<items[r*cols+c].Length())
            max_len=items[r*cols+c].Length();
        }
//--- separator
   string sep;
   StringInit(sep,MathMax(max_row+3,max_len)+1,' ');
//--- header
   string result=StringSubstr(sep,0,max_row+4);
   for(uint c=0; c<cols; c++)
      result+=StringFormat("%s[,%u] ",StringSubstr(sep,0,max_len-(Num::Digits(c)+3)),c);
//--- rows
   for(uint r=0; r<rows; r++)
     {
      result+=StringFormat("\r\n[%s%u,] ",StringSubstr(sep,0,max_row-Num::Digits(r)),r);
     
      for(uint c=0; c<cols; c++)
         result+=StringSubstr(sep,0,max_len-items[r*cols+c].Length())+items[r*cols+c]+" ";
     }
//---
   return(result);
  }
Для большой матрицы, Print надо делать построчно, т.к. внутренний буфер при выводе в журнал имеет отраничения (размер ограничения не пишу, т.к. он может поменяться в будущем)
 
Ilyas #:
Для большой матрицы, Print надо делать построчно, т.к. внутренний буфер при выводе в журнал имеет отраничения (размер ограничения не пишу, т.к. он может поменяться в будущем)

ArrayPrint не имеет такого ограничения?

 

Функция не возвращает накопленного профита

HistoryDealGetDouble(ticket, DEAL_PROFIT);
 

Вчера ещё было всё нормально, а сегодня эксперт выдаёт ошибку "Abnormal termination". 

Никаких изменений эксперта не было, это может быть связано с текущими обновлениями терминала? обновление обновлений ещё будет в ближайшие дни?

 
Konstantin Kulikov #:

Вчера ещё было всё нормально, а сегодня эксперт выдаёт ошибку "Abnormal termination". 

Никаких изменений эксперта не было, это может быть связано с текущими обновлениями терминала? обновление обновлений ещё будет в ближайшие дни?

Abnormal termination означает, что в неком бесконечном цикле нет проверки IsStopped. Поэтому эксперт не может завершиться нормально. Терминал завершает его жёстко.

Вы не привели никаких подробностей

 

Инструмент «Прямоугольник» все еще неисправен после последнего обновления... Только две ручки.

 
beto_gauer #:

Инструмент «Прямоугольник» все еще неисправен после последнего обновления... Только две ручки.

Графический объект "Прямоугольник" работает исправно. Всегда имел ДВЕ точки привязки.

 
Vladimir Karputov # :

Графический объект "Прямоугольник" работает исправно. Всегда имел ДВЕ точки привязки.

Лучше иметь ЧЕТЫРЕ ручки, даже если нет ошибки, это не значит, что ее нельзя улучшить. Разве МТ5 не для удобства трейдеров?
 
Slava #:

Abnormal termination означает, что в неком бесконечном цикле нет проверки IsStopped. Поэтому эксперт не может завершиться нормально. Терминал завершает его жёстко.

Вы не привели никаких подробностей

Спасибо за ответ. 

Программа действительно попадала в замкнутый цикл. Проверка IsStopped() присутствовала, но не останавливала программу (может из-за паузы sleep(1000) в цикле?).

Ошибку "Abnormal termination" в журнале я получал уже при удалении ЕА с чарта. Свою проблему я решил, возможно следующая информация будет полезной.

В цикле была фунция WebRequest, она вроде как стала по-другому работать. 

При неработающей ссылке на сайте (ошибка 5203 - ошибка в результате выполнения HTTP запроса) WebRequest сейчас возвращает 1001. 

В МТ4 возвращается в таком случае -1 (если не ошибаюсь, в МТ5 раньше тоже возвращалось -1).

Причина обращения: