错误、漏洞、问题 - 页 1234

 
Tapochun:
那么这个问题。如果指标在M15上运行。一个新的蜡烛形成了。当要求提供M15和M30的数据时,它们是否应同时提供?

是的。

创建一个指标(将其纳入正常的处理周期)并进入正常的tick处理周期(ontik)后,数据将很有可能被获得。但不要忘了,由于可能有其他符号的历史下载,所以没有保证。

就是说,要经常检查指标数据请求的结果。如果你要求ontika中的数据,而它是不可用的,那么立即退出,在下一次打勾时检查。

不要犯典型的错误,"一切都准备好了,我不考虑数据交付和计算的技术过程,它不应该与我有关,我总是很幸运"。始终实现懒惰的初始化逻辑和数据控制。

请确保在一个空的图表基础上测试你的程序。通常只要用手动清除的历史数据库重新启动终端,就可以通过错误的索引或除以0得到各种访问错误。

如果你在一个符号上得到了一个M15条,那么在同一个符号上肯定有一个M30条。

 
Renat:

是的。

另一个问题。当从EA和指标中调用BarsCalculated()函数 时,其行为是否相同?
 
Tapochun:
另一个问题。当从EA和指标中调用BarsCalculated()函数 时,其行为是否相同?
它有什么问题呢?
 
Renat:
有什么问题吗?

只是我用不同的信息进行了实验。根据我的理解,它们应该以同样的方式工作。但他们没有。由于今天是星期天,没有办法查看当前时间。但它们在测试器中的工作方式也不同。这里有两个代码样本。要点如下。我们正试图从七个TFs获得数据。我们(顾问和指标)不是从最重要的TF开始。例如,从М15.如果当前的tick已经同步形成了一个新的蜡烛,并通过BarsCalculated()接收这个蜡烛的数据--那么我们就用BarsCalculated()记录计算的条数和当前蜡烛的时间。见代码中的细节。

该指标。

第一次打勾。

对于每个TF,都会形成一个新的蜡烛。但在TF M1, M5, M15上,BarsCalculated()返回0。但在TF M30, H1, H4, D1上,它返回-1。这里我们有一个问题,为什么该功能的工作方式不同?因此,如果我们在M30 TF上运行,对于M1、M5、M15、M30 TF,BarsCalculated()返回0,而对于H1、H4、D1 TF,它分别返回-1由此我们可以得出结论,对于较高的TF,数据最初是不可用的。

第二个勾。

根据代码逻辑,同步,即写参数(都是根据样本的日志)。

第三次和下一次打勾。

我们通过TF M30, H1, H4, D1的指标获得一个新条形。虽然,这些数据似乎已经得到了。结果发现,TF上的数字,比当前的数字大了1。非常奇怪的行为。在未来(使用目前的例子),我们将无法获得同步性。

专家顾问。

第一次打勾。

立即实施同步化。BarsCalculated()的新值是与新蜡烛的形成同步接收的。

第二次及以后的抽查。

函数的逻辑行为。一切都是同步的。

在测试器中按点运行这两个例子,你会自己看到。目前该函数的行为对专家顾问和指标来说是不同的。另外,来自指标的数据对于较高的时间框架来说是延迟的。因此,我认为,当请求提供M15和M30的数据时 它们不会同时提供 实际数据绝对不是这样的!

如果我弄错了,请告知如何正确地从旧的TF中获得指标数据?谢谢你。

附加的文件:
 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
标准 CList
为什么要给比较 公司打两次电话?这可能是一个昂贵的操作(如果我们需要检查大型对象的平等性,而不是某些字段的等价性)。
人们可以在第一次调用Compare 后简单地保存结果。
 
Renat:
我应该在这里等你的答复吗?还是我应该把它带到服务台?
 

图表底部的这些图标是从哪里来的?

图表上没有指标,但每次都会出现图标。 我已经厌倦了删除它们。 我怎样才能把这玩意关掉? 我在终端设置中找不到任何关于它的信息。

 
meat:

图表底部的这些图标是怎么来的?

图表上没有指标,但每次都会出现图标。 我已经厌倦了删除它们。 我怎样才能把这玩意关掉? 我在终端设置中找不到与之相关的东西。

这些是 "日历 "标签中的事件。要删除:在 "日历 "选项卡内点击右键->"在图表上显示"->"删除所有事件"。

P.S.并取消勾选 "自动更新 "选项。现在,新的日历事件将不会显示在图表上。

 
crOss:
以任何专家顾问(来自MetaQuotes的例子)为例,在某一时期以相同的参数在Build 975下运行它。
获得结果,即收益率曲线图和交易表。


现在,在相同的时期和相同的参数下,在build 1010下运行相同的EA,你会得到完全不同的结果......。

P.S. Metatester是32位的

哪个结果是正确的?在975构建中还是在1010构建中?
 

大家好)请帮助我启动定时器。

int OnInit()

{

bool setTimer=EventSetTimer(60)。

Print("setTimer")。

}

空白的OnTimer()

{

Print("passing time")。

}

问题:为什么它不工作?让我大跌眼镜......(((。