Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 74

 

проблема с оптимизацией: 

Не оптимизируется советник в новом 2039 билде. 

Долго ломал голову.

Раньше все было ок.

Нашел советник 2017 года. Сравнил функции, поочередно их начал удалять - ничего! 


Решил переименовать файл

было: 

Exp - хххххххххх ххх хххх ххх хххххххх

стало 

Exp - хххххххххх ххх хххххххх


короче на 8 символов. 


и оптимизация запустилась! 


Прошу учесть это. Ведь если в маркете будут длинные названия то оптимизация может не запускаться! 


оставлю здесь и в соседней ветке для себя. 

 
у меня на открепленном графике в панели аналитических инструментов отсутствуют временные зоны фибоначчи! другие инструменты - присутствуют.
 
Sebostyan:
у меня на открепленном графике в панели аналитических инструментов отсутствуют временные зоны фибоначчи! другие инструменты - присутствуют.
Очевидно, что нужно настроить внешний вид панели. Справка терминала в помощь.
 
Artyom Trishkin:
Очевидно, что нужно настроить внешний вид панели. Справка терминала в помощь.

настроил.

очевидно, что все аналитические инструменты, присутствующие в корневом окне, должны без потерь дублироваться в открепленных окнах.

например, я откреплю 6 окон. и мне в каждом потом настраивать панель аналитических инструментов?..


ctrl+z не отменяет удаление коридоров.


у меня смещение ("плавающее", а не указанное в настройках) сбивается на (открепленных) графиках при смене профиля туда-обратно.

 
Ilyas :

typedef пока только в планах

namespace в реализации

@Ilyas @Slava

Есть ли план по улучшению mql для создания действительно универсального кода?

Например, в настоящее время невозможно создать контейнер, который можно использовать с базовым типом, простой структурой, объектами и указателями. Вы можете иметь либо базовый тип и указатели (с некоторыми приемами), либо структуру и объект.

 template < typename T>
 class Container
  {
   T                 data[];
   int                size;
 public :
                     Container( void ) : size( 0 ) { ArrayResize (data,size, 100 ); };
                    ~Container( void )
     {
       //for(int i=0;i<size;i++) 
       //  { 
       //   if(CheckPointer(data[i])==POINTER_DYNAMIC) 
       //      delete data[i];                            // DOESN'T COMPILE : 'data' - object pointer expected 
       //  }                                              // Can be solved with a dynamic_cast, but need a super class 
     };
   //--- 
   void Add(T value)             // DOESN'T COMPILE : 'POD' - objects are passed by reference only 
     {                           // DOESN'T COMPILE : 'CObject' - objects are passed by reference only  Plan.mq5        26      13 
       ArrayResize (data,size+ 1 );
      data[size]=value;
      ++size;
     }

   //--- 
   T At( int i)
     {
       if (i< 0 && i>=size)
        {
         //T ret={};             // Can't be initialized ? => Warining : possible use of uninitialized variable 'ret' 
         //return(ret); 
         return ( NULL );        // DOESN'T COMPILE with POD  : 'NULL' - parameter passed as reference, variable expected 
        }
       return (data[i]);
     }
  };

Использование :

   Container< int >intsBag;               intsBag.Add( 1 ); intsBag.Add(a);       Print ( "int : " ,intsBag.At( 0 ),intsBag.At( 1 ));   // OK 
   //Container<POD>podsBag;               podsBag.Add(aPod);                                                                            // DOESN'T COMPILE 
   //Container<CObject>objectsBag;                                                                                                      // DOESN'T COMPILE 
   Container<CObject*>pointersBag;        pointersBag.Add( new CObject( 4 ));     Print ( "ptr : " ,pointersBag.At( 0 ));               // OK 
Файлы:
Plan.mq5  4 kb
 
Alain Verleyen:

@Ilyas @Slava

Есть ли план по улучшению mql для создания действительно универсального кода?

Например, в настоящее время невозможно создать контейнер, который можно использовать с базовым типом, простой структурой, объектами и указателями. Вы можете иметь либо базовый тип и указатели (с некоторыми приемами), либо структуру и объект.

Использование :

Да, планируются

Но пока на уровне обсуждения, планируем добавить условную компиляцию в зависимости от типа T, используя которую, можно будет включать/отключать части шаблонного класса, что-то напоминающее if constexpr из С++

Так же планируем добавить различные __builtin функции (например позволяющие определить является T классом или нет), которые можно будет использовать для условной компиляции

 
Ilyas:

Воспользуюсь моментом открытости. Возможно ли в MQL сделать так, чтобы функция возвращала разные типы?

(this.type == TYPE_STRING) ? this.string_value : this.double_value

Результатом этого выражения всегда является string. А нужно, чтобы был либо double, либо string, в зависимости от type.

 
fxsaber:

Воспользуюсь моментом открытости. Возможно ли в MQL сделать так, чтобы функция возвращала разные типы?

Результатом этого выражения всегда является string. А нужно, чтобы был либо double, либо string, в зависимости от type.

К сожалению нет, тип тернарного оператора определяется как старший из двух вариантов.

Иначе получается, что типизация должна происходить на этапе выполнения, а это не поддерживается в MQL

 
Ilyas:

Но пока на уровне обсуждения, планируем добавить условную компиляцию в зависимости от типа T, используя которую, можно будет включать/отключать части шаблонного класса, что-то напоминающее if constexpr из С++

Данная вещь безусловно будет очень полезна.  Но в рассматриваемом случае всё гораздо банальней:  нужно просто разрешить передачу объектов по значению.  Почему в MQL до сих пор действует это искусственное ограничение?  Ведь объекты можно свободно возвращать из функции, так почему их нельзя передать в функцию тем же путём?

 
Alain Verleyen:

@Ilyas @Slava

Есть ли план по улучшению mql для создания действительно универсального кода?

Например, в настоящее время невозможно создать контейнер, который можно использовать с базовым типом, простой структурой, объектами и указателями. Вы можете иметь либо базовый тип и указатели (с некоторыми приемами), либо структуру и объект.

Все можно реализовать средствами MQL.
Кроме части, где контейнер отвечает за результат инициализации объекта по умолчанию.
За инициализацию по умолчанию должен отвечать сам объект, а не контейнер.