错误、漏洞、问题 - 页 815

 
tol64:

你能告诉我,如果要调用的指标名称包含在一个变量中,为什么在获取指标句柄时发生错误?

我的意思是,不存在这样的错误。

这就是我们如何得到错误4802 (指标不能被创建)。

在这里 阅读关于测试仪_指示 器的信息。
 
marketeer:
在这里 阅读关于测试仪_指示器 的信息。
是的,我已经把所有的东西都读了又读了很多遍。))但我没有设法得到我需要的东西。我需要将指标的名称设置为一个变量。
 
tol64:
我一遍又一遍地读着,重读着。))但我无法得到我需要的东西。我需要将指标的名称设置为一个变量。
那么,你是否添加了test_indicator属性?我想没有它我就做不到。
 
marketeer:
那么,你是否添加了属性test_indicator?我不认为没有它,我就能做到。

我试过了。有些事情并不是这样的。你能给我看一个例子吗(也许我做错了)?

P.S. 它成功了。这再容易不过了。去休息了。))

P.S2。 但我得到的依赖是,我必须通过属性test_indicator 注册所有的指标。也就是说,如果指标名称是由外部参数指定的,而用户有一个新的指标,我们必须再次打开代码。这并不完全是我们想要的结果。

 
tol64:

P.S2。 但我们仍然得到了不得不通过属性test_indicator 来编写所有指标的依赖性。也就是说,如果指标名称是由外部参数指定的,而用户有一个新的指标,我们必须再次打开代码。这并不完全是我们想要的结果。

它是分五次完成的。我用它从其他一些随机选择的指数中建立指数。也许开发者会告诉我们他们的想法。
 
marketeer:
这是在五个方面的做法。我自己用它从其他几个随机选择的指数中建立指数。也许开发者会告诉我们他们的想法。

问题是,MT5测试器中的EA是在终端之外启动的,不具备MT4中的所有库环境。

例如,专家顾问根本就被发送到云端,为了通过额外的链接,我们必须。

  1. 在调用中使用静态指标名称,这使得编译器能够自动规定专家的依赖关系
  2. 通过属性明确规定所需的指标列表,手动建立依赖性列表。

如果使用动态指标调用,你需要手动规定使用的指标 列表。当运行第三方测试时,所有的依赖文件都会与专家顾问一起发送。这些既可以是本地的(无论如何它们都在终端之外),也可以是远程或云端的代理。

这就是为 "按下启动键,不用考虑其他事情,一切都会自动工作 "所付出的代价。

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
Renat:

整个观点是,MT5测试器中的EA在终端之外运行,没有MT4所拥有的所有库环境。

这就是为 "按下启动键,不用考虑其他事情,一切都会自动工作 "所付出的代价。

这是可以理解的,但另一方面,用户经常会有一个反问,因为通常和有效的灵活性已经丧失。你实际上只实现了一个静态绑定模型。而且人们也在要求动态链接。这个想法是,即使有些东西被发送到云端,开始被计算,并突然访问一个外部炮台,你可以查询和检索它,类似于环境的其他部分,从终端传递到代理。好吧,这只是一个大声的想法。我没有问这个问题;-)。
 

这个问题可能已经被提出来了,但我在论坛里找不到。

在下面的代码中(在test()方法中),当取一个对象的常量描述符(引用)并将其赋值给一个非常量对象时,编译器(MetaEditor 5.00, Build 687)没有产生错误。

class A{
   public:
      void someDo() {}
};

class B{
   public:
      void B( A* aA ) : mA( aA ) {}
      const A* getA() { return (mA); }   
   private:
      A* mA;
};

void test(){
   A a;
   B b( GetPointer( a ) );

   //Ошибки нет. И это правильно   
   const A* a1 = b.getA();
   //Ошибка есть: "...someDo' - call non-const method for constant object..". И это правильно   
   a1.someDo();
   
   //Ошибки нет. Это НЕ правильно(CONST A* B::getA())!
   A* a2 = b.getA();
   //ошибки нет. Правильно (а2 не const)
   a2.someDo();
}
 
mvk:

这个问题可能已经被提出来了,但我在论坛上没有找到。

在下面的代码中(在test()方法中),当获得一个对象的常量描述符(引用)并将其赋值给一个非常量对象时,编译器(MetaEditor 5.00, Build 687)并没有产生错误。

这将是没有错误的情况。

class A{
   public:
      void someDo() const {};
};
 

就对象指针的速度向开发者提出的问题


为什么第一个代码

class CSomeObj
{
public:
   double prm;
};

CSomeObj arr;

void OnStart()
{
        EventSetTimer(1);

        uint s0=GetTickCount();
        for (int i=0; i<100000000; i++) arr. prm=10;
        Print("1=", GetTickCount()-s0);
        
        s0=GetTickCount();
        CSomeObj *item=GetPointer(arr);
        for (int i=0; i<100000000; i++) item. prm=10;
        Print("2=", GetTickCount()-s0);
}

工作的速度是第二个的两倍

2012.08.21 09:56:40 信息 (EURUSD,D1) 2=1654
2012.08.21 09:56:38 信息 (EURUSD,D1) 1=795

你能优化它以提高速度吗?