错误、漏洞、问题 - 页 270

 
Rosh:

运行这样一个指标,你就会看到自己的情况。

所以在

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

open[]也不是一个时间序列?

我什么都不明白,请给我一个时间序列的例子。

 
Voodoo_King:

建立375。这个错误真的很糟糕,其结果是我已经失去了相当多的钱......

关闭/打开终端后,EA参数不会恢复到设置。

更确切地说,它们中的一部分可以被恢复(例如6个中的3个),而其余的被重置为默认设置。


建381。什么都没有改变!!!

每次终端重新启动时,EA都会以不同的参数(无论他们想要什么)进行初始化。

专家参数的初始化不正确

 
AlexSTAL:

这个函数检查 的是方向,而不是变化。

1) 没有初始化

2) 有了初始化

3) 上面的代码,只用了ArrayGetAsSeries 数组索引 方向的函数

我在服务台犯了一个错误,功能名称只是


是的,我发现了编译器的错误。谢谢你的信息。下一个版本中会有一个修复。
 
BoraBo:

所以在

open[]也不是一个时间序列?

我不明白,请给我一个时间序列的例子。

所以,它不是一个TC,那又怎样?通过 "设置 "将其设置为一个时间序列,它将成为一个TC。这是你第一次运行终端吗?这对你来说是个大新闻。我想,刚才有人写道,我们应该自己决定如何在他们的程序中工作--用TS还是只用数组。
 
joo:


这就是为什么我在OnCalculate()中这样做。

你能帮助我使ArrayGetAsSeries(low)给出真实吗?

 
BoraBo:

你能帮助使ArrayGetAsSeries(low)输出为真 吗?

我已经厌烦了:))按你的要求设置,你好。没有什么可检查的。:))
 
BoraBo:

所以在

open[]也不是一个时间序列?

我什么都不明白,请给我一个时间序列的例子。

open[]和OnCalculate中的所有其他数组都是时间序列。在最开始的时候,当MQL5语言被编写时,ArrayGetAsSeries()对它们返回true,它们的索引是完全按照时间序列来执行的,也就是向后。

但后来发现,用MQL4风格写指标缓冲区计算非常不方便,也不自然,只有一个办法--把时间序列的索引倒过来,方便使用。我们本着这种精神开始编写自定义指标

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

但每次我们不得不写这样乱七八糟的转换,结果也不是一个好主意。因此,我们决定像通常的数组一样,用索引来传递这些时间序列。这就是我们如何得到这样一个悖论,当时间序列不像时间序列那样被索引。这就是为什么帮助中说,应该检查索引顺序,如果有必要,就按要求设置。

 
BoraBo:

帮助我使ArrayGetAsSeries(low)输出为真

它已经返回真,但由于编译器错误,它的值被错误地作为参数输出。这样检查吧。

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


结果。


 
Rosh:

它确实给出了真,只是由于编译器的错误,它作为参数的值被错误地输出。这样检查吧。


结果。


谢谢,想通了。

条件if()运算符中的ArrayIsSeries()和ArrayGetAsSeries() 按描述工作,但Print()总是输出错误。


 

开发人员。

1.请检查历史记录加载到测试器的情况(这是我第一次测试)。

我正在使用H1上的标准MACD样本测试欧元兑美元,间隔时间为 "上个月"。

我达到了57%的下载数据并成功冻结,日志中只有这一行

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2.是否有可能在新的构建中不断地使1:200和1:500的杠杆作用在测试器中得到体现?

我理解并不是所有的经纪公司都有这样的杠杆,特别是在MT5上,但在策略测试器中,可能应该留下这一点,因为在新平台上测试策略更方便。