MetaTrader 4 Build 529测试版发布,带有新的编译器 - 页 39

 
超出范围 毫不含糊地表示代码中的错误--超出了数组。那里显示了字符串和错误位置,所以要寻找错误。
 

下面是代码。


datetime   prevtime0 = 0;
double prevVolume0 =0;
double prevClose0 =0;
void init()
{
   Print("_______Test init");
   prevtime0 = iTime(NULL,PERIOD_M1,0); 
   prevVolume0 = iVolume(NULL,PERIOD_M1,0);
   prevClose0 = iClose(NULL,PERIOD_M1,0);
}

void start()
{
  Print(" prevtime0!!!!! = ",prevtime0," iTime(NULL,PERIOD_M1,0) =",iTime(NULL,PERIOD_M1,0) );
  Print(" prevVolume0!!!!! = ",prevVolume0," iVolume(NULL,PERIOD_M1,0) =",iVolume(NULL,PERIOD_M1,0) );
  Print(" prevClose0!!!!! = ",prevClose0," iClose(NULL,PERIOD_M1,0) =",iClose(NULL,PERIOD_M1,0) );
  Print("");

  prevtime0 = iTime(NULL,PERIOD_M1,0); 
  prevVolume0 = iVolume(NULL,PERIOD_M1,0);
  prevClose0 = iClose(NULL,PERIOD_M1,0);

}

以下是在终端4.0版Build 536中的执行结果

2013.11.11 22:53:08 测试 EURJPY,M1: prevClose0!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 测试 EURJPY,M1: prevVolume0!!!!!=133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 测试EURJPY,M1: prevtime0!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 测试 EURJPY,M1: prevVolume0!!!!!=133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 测试EURJPY,M1: prevtime0!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

如你所见,iClose、iVolume和iTime都没有变化。

我认为是这样,其他以i开头的函数也是这样。

另外,本例中的iVolume功能明显显示不是Volume。

同时在测试器中,除了iVolume之外,一切都在工作和变化。它在那里也不起作用。

请注意。

 
thecore:

下面是代码。


以下是在终端4.0版Build 536中的执行结果

2013.11.11 22:53:08 测试 EURJPY,M1: prevClose0!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 测试 EURJPY,M1: prevVolume0!!!!!=133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 测试 EURJPY,M1: prevtime0!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 测试EURJPY,M1。
2013.11.11 22:52:25 测试 EURJPY,M1: prevClose0!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 测试 EURJPY,M1: prevVolume0!!!!!=133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 测试 EURJPY,M1: prevtime0!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

如你所见,iClose、iVolume和iTime都没有变化。

我想,其他以i开头的函数也不会改变。

另外,本例中的iVolume功能明显显示不是Volume。

同时在测试器中,除了iVolume之外,一切都在工作和变化。它在那里也不起作用。

请注意。

嗯,我做到了。怎么了?
 
tara:
嗯,我做到了。怎么了?


对...

iTime(NULL,PERIOD_M1,0)函数从左边的终端给出错误的时间。

终端显示2013.11.11 22:53:08,iTime显示2013.11.11 22:38:00,并应显示

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0)应该返回一些整数,例如1、2、3、100,而不是

如本例中的133.02

在第一种情况下,iClose应该给出133.02,在第二种情况下给出133.03。

 

所有这些功能的工作方式都有些不同,以每分钟为单位。你的打印工作以刻度为单位。MT中的时间以秒计算。

而第二个终端,一般来说,在左边 :)

 
tara:

所有这些功能的工作方式都有些不同,以每分钟为单位。你的打印工作以刻度为单位。MT中的时间以秒计算。

而第二个终端,一般来说,在左边 :)

听着,我理解你在晚上没有人可以说话。

我知道那份会议记录,这就是为什么在打印结果的时候,显示了SPECIAL

在不同的分钟有两个结果。

此外,这个消息不是给你的,而是给开发者的。

 
thecore:

iVolume(NULL,PERIOD_M1,0)应该返回一个整数,例如1、2、3、100,但不是

如本例中的133.02

看起来iVolume确实返回最后的价格(收盘价)而不是成交量。

但我对帮助中的描述感到非常有趣(第一条来自文件,第二条来自网站)。

1

datetime  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

2

double iVolume(string symbol, int timeframe, int shift)
 
thecore:


对...

iTime(NULL,PERIOD_M1,0)函数从左边的终端给出错误的时间。

终端显示2013.11.11 22:53:08,iTime显示2013.11.11 22:38:00,应该显示

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0)应该返回一些整数,例如1、2、3、100,而不是

如本例中的133.02

在第一种情况下,iClose应该输出133.02,在第二种情况下输出133.03。


尝试使用RefreshRates(),OnTick也有同样的问题,时间和价格在测试器中没有更新,但当使用RefreshRates()时,一切都很好 ...
 
还有两个指标的问题,请看服务台!
 
thecore:

正如你所看到的,无论是iClose,还是iVolume,或者是iTime都没有变化。

我想,其他以i开头的函数也是如此。

另外,本例中的iVolume功能明显显示不是Volume。


纠正了。谢谢你