Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite - страница 34

 

@Renat Fatkhullin Было бы неплохо иметь доступ к API с mql, чтобы иметь возможность изменять курсор мыши, как, например, это делается при рисовании треугольника.

 

В последних билдах перестал в работать поиск по файлам в Метаэдиторе.  Ничего не находит.  В билде 2380 всё работает.

p.s. Разобрался, в чём дело.  Главный поисковик в правом верхнем углу панели инструментов раньше всегда искал в текущих папках MQL. А теперь он использует путь, задаваемый в настройках "Поиска в файлах" (кстати теперь там всё на английском языке почему-то).

И кстати смотрю, наконец-то, появилась возможность замены в файлах - это просто отличная новость.

 

Баг компилятора.  Следующий код почему-то компилируется и работает:

  class A { };
  
  void OnStart()
  {
    A* p[];
    int i[]= { 1,2,3,4,5,6,7,8,9 };
  
    ArrayCopy(p, i);

    Print(ArraySize(p)); // 9
 }

Размер массива увеличивается. Хорошо хоть значениями не заполняется )

p.s. Как я понял, у этой функции вообще проблемы с контролем типов.  Она принимает практически всё подряд.  В итоге ошибки со стадии компиляции переносятся в рантайм.

 
В билде 2398 что-то случилось с граф. объектами. В OnDeinit() советника удаляю объекты. При закрытий чарта с советником получаю Abnormal Termination.  Тот же код в предыдущих билдах работает норм.
 

Hallo,


das ist mir schon bei mehreren Brokern aufgefallen, nehm an das ist wieder mal ein Fehler von MT5,

Hab da mal zum testen ein Script gemacht, das listet alle aktiven Symbole im Marketwatch auf.

void OnStart()
  {

   int total = SymbolsTotal(true);

   for(int i = 0; i < total; i++)
     {
      Print(SymbolName(i,true));

     }

  }


als Ergebnis bekomme ich dann

das passt ja auch bis auf die letzten 3, und die sind nicht fix, das werden mal mehr, mal weniger


hier dazu zur gleichen zeit genommen, der Market Watch


 

Баг компилятора.  Вместо класса С он пытается найти класс с именем T:

class C
{
public:
  static void F() { } 
};

template<typename T>
void f(T& c)
{ 
  T::F(); // 'T' is not a class, struct or union
}

void OnStart()
{
  C c;
  f(c);
}
 
Alexey Navoykov:

Баг компилятора.  Вместо класса С он пытается найти класс с именем T:

Есть несколько способов обхода данного дефекта:

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

Ошибки, баги, вопросы

Sergey Dzyublik, 2020.03.22 16:41

Баг MT5 (build 2366),  ошибка компиляции при доступе к статическому методу класса, доступ к которому осуществляется через шаблонный тип аргумента функции.

template<typename _Tp>
struct It_g{
   class Opt{
      template<typename _It>
      static void test(_It &it){               
         _Tp p = it.p;                  
      };
   };
   
   _Tp p;
};

template<typename _Tp>
class V{
public:
   struct It : public  It_g<_Tp>{};
   It b;
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);   // Ok
   
   _It::Opt opt;
   opt.test(it);                              // Ok
   
   _It::Opt::test(it);                        // '_It' is not a class, struct or union | 'Opt' is not a class, struct or union
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

 
Sergey Dzyublik:

Есть несколько способов обхода данного дефекта:

Можно более просто:  it.Opt::test(it);

 
Alexey Navoykov:

Можно более просто:  it.Opt::test(it);

Приводился именно этот вариант вызова, так как версию до этого он тоже не работал и выдавал ошибку компиляции:

   ......
   _It::Opt opt;
   opt.test(it);                              // Ok
   ......
 
Sergey Dzyublik:
Alexey Navoykov:

До сих пор нельзя передать в качестве указателя метод класса. Это возможно только для функций.

Приходится через гланды делать, создавая такую функцию и уродливый обвес вокруг.


Есть какой-нибудь универсальный обход данного ограничения?

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