初学者的问题 MQL5 MT5 MetaTrader 5 - 页 988

 
Aleksey Vyazmikin:

我已经为自己做了一个检查,但这个检查是为了绕过这个函数的错误,帮助中完全没有说需要检查,这意味着它应该是内置的。

然后,你说的是指标检查,而我是用Bars来计算正确的柱状体开始时间,因为iBarShift在我看来只适合于外汇,在外汇市场上,由于清算和交易时段 不是一整天,历史记录不会经常出现故障。

而你的验证在哪里?为什么要引入一些变量,如果(当你碰撞历史或改变历史)你只需要完全重新计算指标。这通常是从 "0 "到 "rate_total-1 "进行。

 
Vladimir Karputov:

而你的支票在哪里?而且,如果你只是需要完全重新计算指标(当你交换历史或改变历史时),你为什么要输入一个变量。通常情况下,它是从 "0 "到 "rate_total-1 "进行的。

我的问题与指标或历史分页没有关系。这里有一段代码

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
在一般情况下,当打开一个新的条形图 时,当条形图的开始日期大于当前TF上的零条形图的移动量时,就会出现这个问题。
 
Aleksey Vyazmikin:

这不是辩护,而是检测代码中的错误的障碍!这是不可能的。

此外,如果日期重合,返回数字2是完全不符合逻辑的--这里的推理是什么?

FORTS上酒吧的开始时间可能不一致,这导致了计算的错误,例如,一个酒吧不是在14:00开盘,而是在14:05开盘--我也遭遇了这种情况。

也许程序员开始是按照文档中所说的方式工作的,但后来决定最好是返回'之间'而不是'从'和'到'所示的日期,但文档中没有纠正这种描述。实际上,这并不是很有必要。

我甚至没有FORTS的演示。我不能检查它。

 
Alexey Viktorov:

也许他们最初是按照文档中的描述做的,但后来决定最好是返回 "之间 "的日期,而不是 "从 "和 "到 "的日期,但文档中的描述没有得到纠正。但他们并没有修复描述。

我甚至没有FORTS的演示。我不能检查它。

怎么可能是不必要的,我猜不出来,如果是错误,以后会改正的,那么代码就不会再工作了,我将会在很长一段时间内寻找错误......但Artem认为这不是一个错误,并没有在essence....,也没有写任何东西。

似乎在MQ的模拟账户 上,人们连接到FORTS...

 
Aleksey Vyazmikin:

怎么可能不是呢,我猜不出来,如果是错误,以后会改正的,那么这个代码就不会再工作了,我就会在关键的时候寻找错误......但Artem认为这不是一个错误,并没有在essence....,也没有写任何东西。

似乎人们正在从MQ连接到FORTS的模拟账户上...

好吧,如果你现在足够小心,不能把开始时间和结束时间弄错,那么就没什么好怕的。让他们统治。

 
Aleksey Vyazmikin:

我对指标或历史分页没有问题。这里有一段代码

一般来说,当打开一个新条形图 时,当条形图的开始日期与当前TF上的零条形图相差超过1条时,问题就会出现。
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

对iTime()、Bars()返回的内容没有检查

你应该有。你真的应该这样做。在帮助中查看 - iTime()和Bars()返回什么?那么注释中是怎么说的呢?

 
Alexey Viktorov:

好吧,如果你现在足够小心,不能把开始时间和结束时间弄错,那就没什么好怕的了。让他们统治。

我只是不喜欢坐着被动地等待,而且我被禁止具体询问开发者--这个问题原本是针对他们的。

 
Artyom Trishkin:

对iTime()、Bars()返回的内容没有检查。

嗯,你应该这样做。你真的应该这样做。在帮助中查找--iTime()和Bars()返回什么?那么注释中是怎么说的呢?

在代码中做一次这些检查就够了,还是应该在每个函数调用 之后/之前做这些检查?

建议做什么样的检查,对于当前的酒吧/历史?什么是最好的方法?

 

我怎样才能找到这条信息的原因?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

在代码中做一次这些检查就够了,还是应该在每个函数调用 之后/之前做这些检查?

你建议做什么样的检查,对于目前的酒吧/历史?什么是最好的方法?

你不知道如何检查返回值是否为零?而且不知道如何在OnCalculate()中退出,返回值为0?你有没有试过在一个网站上搜索信息?

  1. 从函数中获得所需的值
  2. 检查它是否为零
    1. 如果它是零,则返回0。
    2. 如果不为零,则进入第三步
  3. 用这个值工作
我从来没有想过,我会向一个评分超过13000分的人教授逻辑学的基本知识......