错误、漏洞、问题 - 页 2995

 
   datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{

   if(handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}


有谁能回答为什么这段代码只在分钟上正确工作?

这是一个指标。


P.S.

在分钟以外的时间段,它输出错误的数值。

 
Francuz:


有谁能回答为什么这段代码只在分钟上正确工作?

这是一个指标。

P.S.

在分钟以外的时间段,它输出错误的数值。

因为你只在OnCalculate 的第一次访问时进行了一次迭代,当时prev_calculated = 0。在这一点上,酒吧可能还没有形成。而所有的TFs都是由1M个TFs组成。
在支票中插入。

if(prev_calculated>0 && handle != INVALID_HANDLE)

而且一切都会成功。

 

在ME中有两个EA标签打开,都有未保存的修改,我们在其中一个标签上按下编译按钮,看到ME在两个EA中都保存了修改。为什么?谁要求他这样做的?

如果ME在编译前保存了链接文件中的变化,这将是合乎逻辑的行为,但so....。 当然,因为它是如此简单,为什么要分清哪些文件属于谁? 保存所有打开的文件 并完成它要容易得多....。

 
Andrey Dik:
在ME中,两个EA的标签都打开了,都有未保存的修改,按下其中一个的编译按钮,看到ME在两个EA中都保存了修改。为什么?谁要求他这样做的?
否则它怎么能做到呢?
这是唯一的办法。
在所有的IDE中,情况都是如此。
 
Nikolai Semko:
还能怎样?
这是唯一的办法。
所有的IDE都是这样的。

是否在所有的IDE中都确定?

我刚刚试过VS,是的,行为是一样的。 但是,一个产品的弱智行为,即使是最有名的产品,也应该被视为一个基准吗? 让我们复制VS的所有错误和误解,为什么?

))

 
Andrey Dik:

是不是所有的都准确?

我刚刚试了一下VS,是的,行为是一样的。但是,一个产品的弱智行为,即使是最知名的产品,也应该被认为是基准吗? 那就让我们复制VS的所有错误和误解,为什么。

))

在去年,我至少使用了9个不同的IDE。到处都是这样。
好吧,从逻辑上想想,如果一个文件有几个主站,而这些主站又看不到对方的修改,会有多少问题呢? 如果一个用一种代码编译,另一个用另一种代码编译,你已经要创建两个同名的ex5文件,等等。
 

为什么不把导航仪做成市场观察窗口那样的表格?市场 观察》已经实施了分类,赞一个!- 我们已经要求了很久了。

现在,我们的新梦想的时代来临了,即显示导航器的内容并按列进行排序:标题、 作者、编译日期、最后运行日期、来源的可用性、程序类型(以及禁用排序并恢复到当前视图),这是最酷的实用性。

 
Nikolai Semko:
在过去一年中,我至少使用了9个不同的IDE。每个地方都是这样的。
那么从逻辑上想,如果一个文件有几个主机,而这些主机又看不到对方的修改,会有多少问题。 如果一个用一种代码编译,另一个用另一种代码编译,你已经需要创建两个同名的ex5文件,等等。

如果打开了两个不同的EA,它们之间会有什么联系呢? 只有属于猫头鹰的inludes应该被保存,而这些inludes属于谁并不重要。

例如,如果你打开一些没有保存的*txt文件,它与编译的文件和/或项目 没有任何关系,那么为什么要保存它?

 
Nikolai Semko:

因为你只在第一个OnCalculate 入口处进行了一次迭代,此时prev_calculated = 0。在这一点上,酒吧可能还没有形成。而所有的TFs都是由1M个TFs组成。
在支票中插入。

而且一切都会成功。

你错过了重点。该代码应该只工作一次。其目的是表明被调用的指标不起作用。问题是,在任何变体中,如果调用的指标(和调用者)的时间框架与分钟框架不同,则无法工作。我发现这是MetaTrader的 一个错误,只能用拐杖解决。而这个问题是相当古老的。你可以在 "我不能从较早的TF 123中获得指标数据 "中 阅读细节。

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2012.03.12
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 
Francuz:

你错过了重点。该代码应该只起一次作用。其目的是清楚地表明,被称为的指标不起作用。问题是,如果被调用的指标(以及调用者)的时间框架与分钟框架不同,那么该指标将无法工作。我发现这是MetaTrader的 一个错误,只能用拐杖解决。而这个问题是相当古老的。你可以在 "我无法从主要的TF123中获得指标数据 "中 详细了解。

那是很久以前的事了。这个问题早已经解决了。你需要至少每两分钟访问一次非本地时间框架/符号的数据。在主循环中,如果还没有来自请求的时间框架的数据,你需要退出循环--只需返回0来等待下一个tick,指标就知道历史数据还没有被计算。