错误、漏洞、问题 - 页 712

 
你好。

谢谢你的回答,这有助于解决申报问题。

顺便说一下,我也许发现了一个与调试有关的错误。

当你在调试一个指标时,处于断点模式,按MetaTrader中的指标列表。
该应用程序冻结,只能由任务管理器停止(杀)。


请注意。
 
speedy:


请注意。
注意到了,谢谢你。
 

策略测试器中的OnTimer()函数,在每秒钟都被请求时,执行速度相当慢。 void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor,有两个外部指标,运行所有的ticks,正在运行2012.04。11 14:32:07 Core 1 EURUSD,H1: 在70418毫秒内产生了8083516个ticks(4557个bar)(历史上共有6270个bar,总时间70528毫秒)如果OnTimer()被评论,执行速度会明显加快 2012.04.11 14:36:22 核心 1 EURUSD,H1: 在22730毫秒内产生了8083516点(4557条)(历史总条数6270,总时间22870毫秒)这些延迟是由测试器造成的,还是我们可以通过某种方式加快它?

P.S. 如果能对信息进行预览,就能实现(

 
sion:

策略测试器中的OnTimer()函数,在每秒钟都被请求时,执行速度相当慢。 void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor,有两个外部指标,运行所有的ticks,正在运行2012.04。11 14:32:07 Core 1 EURUSD,H1: 在70418毫秒内产生了8083516个ticks(4557个bar)(历史上共有6270个bar,总时间70528毫秒)如果OnTimer()被评论,执行速度会明显加快 2012.04.11 14:36:22 核心 1 EURUSD,H1: 在22730毫秒内产生了8083516点(4557条)(历史总条数6270,总时间22870毫秒)这些延迟是由测试器造成的,还是我们可以通过某种方式加快它?

P.S. 如果能对信息进行预览,就能实现(

最好是通过编辑器面板上的 "SRC "按钮插入代码。
 
papaklass:

测试器中的这个条目是什么意思?

这是一个关于历史传呼的系统信息。
 

不好笑。

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

我理解在mql5中一般情况下 链接是不会从函数中返回的(顺便说一下,为什么不呢?),但这样就需要做一些事情来使l值的索引器成为可能。 例如,为左翼索引器的一般规则做一个语法例外。或某种关键词。

跛脚显然不会让mql5.... 看起来很好。

 
MetaDriver:

Limp显然没有让mql5.... 看起来很好

不要侮辱mql5,它仍然是 "小 "的,但它从构建到构建都非常成熟。
 
MetaDriver:

跛脚显然不会让mql5.... 看起来很好

你需要建立成熟的链接来实现这一点 :)

ZS:它在漏水 :)

 

错误?


下面的代码在编译器中产生了一种永久的循环。点击取消

并不马上起作用,但当它起作用时,它就会重新获得对编辑器的控制。

取消按钮本身并没有消失,但它也无法访问。

编译按钮永远消失了(你必须重新加载编辑器才能找回来)。


#include <Object.mqh>.

B类。

类A:B {
void a();
};

B类:A {

CObject* a;
void b()。
};
 
MetaDriver:

不好笑。

正如我所理解的那样,一般情况下 mql5函数中的链接不会返回(顺便说一下,为什么不能返回?),但我应该做一些事情来使l-value索引器成为可能,例如为左撇子索引器的一般规则做一个语法例外。或某种关键词。

跛脚显然不会让mql5.... 看起来很好。

将内部的非基类元素 "传递 "到外部(在这个例子中不是属性本身,而只是一个数组元素!),特别是有可能改变它的值,这是不安全的。

此外,它与面向对象编程的 "精神 "相抵触:所有与对象数据有关的工作都应该在对象内部由它自己的方法来完成。


只对数据属性使用Setter怎么样?

代码将在可读性方面获胜。最终,这种带有l值索引器的 "简单性 "将使没有人理解这段代码的工作原理......

你会花更多的时间去寻找错误,而不是写Setter。

下面是一个例子。

如果你能用一些较长但容易消化的代码来取代像 while ((double)date[++i -1] < 10) 这样的代码,你最好这样做...

结构测试

{

double data[];

int大小。

void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max)); }

空白的setDataElement(int index, double value)。

{

data[index] = value。

}


私下里。

静态 int 最大。

};

//+------------------------------------------------------------------+


int Test::Max=1024。

//+------------------------------------------------------------------+

//| 脚本程序启动功能|

//+------------------------------------------------------------------+

空白的OnStart()

{

测试t。

t.Init(16)。

for(int i=0;i<t.size;i++)

{

//t[i]=i*i; // ERROR :'=' - 需要l值

t.setDataElement(i, i*i)。

}

}