错误、漏洞、问题 - 页 1177

 
svds75:

你好。你能告诉我为什么当我查询趋势线的 属性时,变量res总是为真,尽管我手动设置标志只显示W1,或只显示MN1?

它只需要显示在其中一个半边上。

...得到...- 是得到属性。而如果res=true,它只是表明成功地获取了财产。

要设置属性,请使用...设置...

 

作为我上一篇文章的继续,我设法用科学的方法找到了导致该错误的问题区域。

我们有这样一个库,有这样一个功能。

//---- testbuglib.mq5 ------

#property library

class A { }; class B   { private:    A* a; public:    A* b; }; int Test() export {   return 0; }

这里是主文件。

#include <Files\File.mqh>  // тут можно указать любой файл mqh

#import "testbuglib.ex5"
  int Test();
#import  

int OnInit() {  Test(); return 0; }

结果专家顾问不能工作,并在日志中显示:"EX5加载失败"。

附加的文件:
TestBug.mq5  1 kb
 
svds75:

你好。你能告诉我为什么在请求趋势线 属性时,变量res总是为真,尽管我手动设置标志只显示W1,或只显示MN1?

我想让它只显示在其中一个半边。

参数的数量不正确,你是以1个选项来调用函数,应该以2个选项来调用,或者比较结果。
 
TheLiteShadow:
这是真的,但这是否意味着每一个新的条形图都必须对定义的缓冲区的所有最后 "索引 "进行 "清理"?问题是为什么?在MT4中没有这种情况,我明白,在初始化过程中,我已经清理了它,但那时应该由MT自己来做,同样的道理,在初始化中应该由MT来做,而不是由程序员来做,指标缓冲区只是一个内存分配 的目的,我不太理解...
几年前我问这个问题时,有人告诉我,这样做是为了优化。你需要多少就初始化多少。而如果你马上填写一些计算数据,就根本不用预先写零了。MT5在许多方面与MT4不同。
 
marketeer:
几年前,当我问这个问题时,有人告诉我,这是为了优化的目的。你需要多少就初始化多少。而如果你马上填写一些计算数据,根本不需要预先写零。MT5在许多方面与MT4不同。
MT4与MT5不同的事实大家都明白,但我不会同意优化,另外程序员有太多的东西需要掌握,不能与低级语言相比,但对我来说是没有必要的,总的来说,很清楚,谢谢...
 
TheLiteShadow:
参数数量不正确,你是以1个选项来调用函数,你应该以2个选项来调用或比较结果。
也试过这种方式。虽然旗子真的起作用了(线只显示一次),而且专家顾问看到这两个旗子都启用了。
long res;
ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1|OBJ_PERIOD_MN1,res);
if((bool)res) Alert("линия line показывается на OBJ_PERIOD_W1 и OBJ_PERIOD_MN1");
 
svds75:
这样试过了。虽然,真正的旗帜工作(线只显示在一个时间框架上),但专家顾问看到两个旗帜都启用了。

你实际上想要什么?你要求的是在每周 或每月的时间框架内的可见性。因此,如果其中至少有一个人处于开启状态,程序将返回真。

分别在2个电话中要求。

 
svds75:
也试过这种方式。虽然真正的旗帜起作用(线只显示在一半上),而且EA看到两个旗帜都是启用的。

所以也许你需要直接设置可见性?

 ObjectSetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1);
 
svds75:

你好。你能告诉我为什么在请求趋势线 属性时,变量res总是为真,尽管我手动设置标志只显示W1,或只显示MN1?

我想让它只显示在其中一个半边。

因为该行总是存在,所以它总是读到该值。无形的线并不意味着没有线。
 
barabashkakvn:

所以也许你需要直接设置可见性?

不,我需要手动设置可见性并以编程方式检查。