错误、漏洞、问题 - 页 2324

 

1.为什么是 "应用 "部分? 简而言之,我不明白。

2.服务部门在哪里? 我想让他们把人送到这个地方。

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

谢谢

 
图表又开始移动,就像按下 "主页 "按钮时一样--没有检测到模式,大约半年没有问题,现在又回来了......。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

作为一个临时解决方案,使用运算符'!'。(矧其所不为也)

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:

作为一个临时解决方案,使用运算符'!'。(矧其所不为也)

双重否定是否被编译器优化了?