Ошибки, баги, вопросы - страница 2324

 

1. а зачем раздел "приложения"? в 2х словах. не понимаю.

2. а где раздел сервисдеск? я хочу, чтоб они отправили кого-нибудь в эту тему:

https://www.mql5.com/ru/forum/290284

спасибо

 
Опять начались сдвиги чарта, как при нажатии кнопки "Home" - закономерность не выявлена, примерно пол года проблемы небыло и теперь вернулась... билд 1940.
 
Баг с указателем
class A {};

void OnStart()
{
  A* a = NULL;
  
  if (true && a) // '&&' - illegal operation use
    ;
    
  if (a) // OK
    ;
}
 
Vladimir Pastushak:

Это нормальное поведение функции ? Если да то как можно сократить время ? История была предварительно прогружена

Результат :

Символ ARSA  16 544 647 

Символ AVAN  16 506 592

Символ AVAZ  16 553 408

Символ AVAZP  16 511 019

Символ ASSB  16 521 310


Такое поведение проявляется на CFD 


Поведение проявляется у всех 

Вот скрипт,  по 16 секунд на запрос цен , в этот момент программа виснет намертво...

void OnStart()
  {
   int     all_symbols = SymbolsTotal(false);
   string  sym_name    = "";
   MqlRates   mas[];
   Print("Symbols all ",all_symbols);
   ulong time_=GetMicrosecondCount();
   
   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         CopyRates(sym_name,PERIOD_D1,0,1,mas);

         Print("Copy   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }

   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         double rez = iOpen(sym_name,PERIOD_D1,0);

         Print("iOpen   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }
  }

А вот лог частично

DJ 0 12:18:33.507 TestCopy (EURUSD,H1) Copy   N 63 Name SGDJPY time = 46076

OP 0 12:18:33.552 TestCopy (EURUSD,H1) Copy   N 64 Name USDEUR_BASKET time = 44995

IG 0 12:18:33.597 TestCopy (EURUSD,H1) Copy   N 65 Name EURRUB_TOD time = 44863

LI 0 12:18:33.642 TestCopy (EURUSD,H1) Copy   N 66 Name EURRUB_TOM time = 45040

GS 0 12:18:33.698 TestCopy (EURUSD,H1) Copy   N 67 Name USDRUB_TOD time = 56006

CF 0 12:18:33.743 TestCopy (EURUSD,H1) Copy   N 68 Name USDRUB_TOM time = 44925

CI 0 12:18:33.787 TestCopy (EURUSD,H1) Copy   N 69 Name CNYRUB_TOD time = 44820

ES 0 12:18:33.833 TestCopy (EURUSD,H1) Copy   N 70 Name CNYRUB_TOM time = 45086

CF 0 12:18:50.336 TestCopy (EURUSD,H1) Copy   N 71 Name ABRD time = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) Copy   N 72 Name AESL time = 16499892

FF 0 12:19:06.881 TestCopy (EURUSD,H1) Copy   N 73 Name AFKS time = 44842

CH 0 12:19:06.926 TestCopy (EURUSD,H1) Copy   N 74 Name AFLT time = 44963

DP 0 12:19:23.429 TestCopy (EURUSD,H1) Copy   N 75 Name AKRN time = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) Copy   N 76 Name ALBK time = 16499755

RL 0 12:19:56.433 TestCopy (EURUSD,H1) Copy   N 77 Name ALNU time = 16503651

EG 0 12:19:56.478 TestCopy (EURUSD,H1) Copy   N 78 Name ALRS time = 44989

OK 0 12:20:12.978 TestCopy (EURUSD,H1) Copy   N 79 Name AMEZ time = 16500788

QS 0 12:20:13.034 TestCopy (EURUSD,H1) Copy   N 80 Name APTK time = 55954

GF 0 12:20:29.541 TestCopy (EURUSD,H1) Copy   N 81 Name ARMD time = 16506946

HM 0 12:20:46.051 TestCopy (EURUSD,H1) Copy   N 82 Name ARSA time = 16509620

DD 0 12:21:02.553 TestCopy (EURUSD,H1) Copy   N 83 Name ASSB time = 16501809

GK 0 12:21:19.083 TestCopy (EURUSD,H1) Copy   N 84 Name AVAN time = 16529765

HP 0 12:21:35.586 TestCopy (EURUSD,H1) Copy   N 85 Name AVAZ time = 16502812

HK 0 12:21:52.085 TestCopy (EURUSD,H1) Copy   N 86 Name AVAZP time = 16499796

NO 0 12:21:52.130 TestCopy (EURUSD,H1) Copy   N 87 Name BANE time = 44973


Полный лог в низу.

Файлы:
20181120.log  196 kb
 
fxsaber:
Баг с указателем

А какая с этим разница?

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

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

fxsaber, 2018.09.17 14:17

Это баг?
class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

 
A100:

А какая с этим разница?

У меня очень плохая память. Некоторые "велосипеды" изобретаю по несколько раз.

 
Думаю что такая ошибка неспроста, потому что (если было бы свободное неявное приведение указателя к bool) не ясно как интерпретировать
class A {
public:
        bool operator&&( bool a ) { return a; }
};
void OnStart()
{
        A *a, *b;
        if (a && b);
}

то ли как

        if ((bool)a &&(bool)b);       //(1)

то ли как

        if ((*a).operator&&((bool)b));//(2)
 
A100:
Думаю что такая ошибка неспроста, потому что (если было бы свободное неявное приведение указателя к bool) не ясно как интерпретировать

Да, в Вашем случае неоднозначность. По-хорошему, на такое должно быть, как минимум, предупреждение компилятора.

В моем же гораздо более простом случае все четко. Думаю, и C++ с этим согласен.

 

fxsaber:
Это баг?

class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

Как временное решение, используйте оператор '!' (logical not)

class A {};

A* a = NULL;

bool b1 = !!a && true;
bool b2 = true && !!a;


Мы подумаем на решением (можно ли менять поведение сейчас, когда существует большое количество кодов ?)
Возможно, что для указателя, операция приведения к bool, будет операцией над указателем, а не объектом на который он указывает.

В этом случае, для выполнения операции над объектом необходимо будет записать код так

class A {};

A* a = NULL;

bool b1 = *a && true;
bool b2 = true && *a;

Операторы приведения, тоже хотим добавить, но эта задача (очень) неприоритетная
 
Ilyas:

Как временное решение, используйте оператор '!' (logical not)

Двойное отрицание компилятор оптимизирует?