类似于iBarShift - 页 10

 
Aleksey Vyazmikin:

你的意思是它在周一展示?这就是我所需要的...:)

是的,对于一个标准函数来说,这其实是很奇怪的行为。毕竟,我们在这里处理的是将数值与它的 "参照物 "进行拟合。

MQL4的标准函数iBarShift 返回左栏的数字(即本例中的星期六),而iBarShift3在要求的时间到达洞口时返回右栏的数字(即星期一),这更符合逻辑。

 
Nikolai Semko:

是的,对于一个标准函数来说,这其实是很奇怪的行为。毕竟,我们所处理的正是与它的 "基准 "相适应的数值。

MQL4的标准函数iBarShift,当所请求的时间打到洞里时,返回左边的小节编号(即本例中的星期六),而iBarShift3返回洞里的右边小节编号(即星期一),这更有意义。

而如果我们现在在洞里(实时),期待收到信息的时候吧,会有什么指数提供给我们呢?我想在MQL4中它将是 "1",而对于第三种算法,它将是 "0",或者不是?

我认为MQL4功能有一个 "不要向前看 "的信息,这在一定程度上是正确的 - 这完全取决于任务。

 

Nikolai Semko :

...

我对你的方案只有一个抱怨:它非常复杂和缓慢。

当我发布它时(4年前),主要目标是准确性(再次),因为我发现的所有其他版本都是错误的(与mql4版本相比)。

我知道 它可以更快。

试图证明这一点。找到一个单一的参数组合,当你的函数和我的函数将显示不同的值。

在大多数情况下,该函数返回错误的结果。

但我还没有实现其中最后一个参数的精确性,因为我不明白为什么根本不需要它。我个人从不需要它。

要求是只拥有mql4版本。

关于交易、自动交易系统和测试交易策略的论坛

类似于iBarShift

Alain Verleyen, 2018.04.05 00:18

事实上,它只显示了相反的情况,我的版本是唯一正确的。(而这段代码 中原来的iBarShift1是正确的)。

我的版本被设想为一个独立的功能,就mql4 iBarShift


PS: 是否有必要发布英文版本或俄文翻译是正确的?

 
vladevgeniy:
你为什么不试试我的功能呢?那里有一个解决方案,可以及时调整酒吧的开始和结束。它似乎能正确计算一切。而且在时间上比你最快的第三版还要快。还是分支更重要?)还是那里也有错误?)我已经用了很久了....

它在哪里,你的功能,尝试一下?

 
Aleksey Vyazmikin:

而如果我们现在是在一个洞里(实时),期望得到一个酒吧的信息,会有什么指数提供给我们呢?我想在MQL4中它将是 "1",而对于第三种算法,它将是 "0",或者不是?

我认为MQL4功能有 "不要向前看 "的信息,这在一定程度上是正确的 - 这完全取决于问题。

不,第一个是零。在实时情况下,它的工作方式也是如此。

 
Aleksey Vyazmikin:

那么它在哪里呢,你的功能是什么呢,可以试一试吗?

它在第7页的末尾)。

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

这可能更方便。

 
vladevgeniy:
你为什么不试试我的功能呢?我有一个解决方案,可以在时间上补偿酒吧的开始和结束。它似乎能正确计算一切。而且在时间上比你最快的第三版还要快。还是分支更重要?)还是那里也有错误?)我已经用了很久了....

这很有趣 ))))

这是你的功能。

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

由于你不知道一些数学运算符,如%--除法的余数

让我们对你的函数做一些简化。

它起作用了。

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

而这里是我的职能。

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

非常相似。真的吗?

只是你的人做什么都很错,而且速度较慢。

你可以在MQL4中用这个脚本试试。

附加的文件:
 
Nikolai Semko:

不,第一个是零。它在实时中的作用是一样的。

好的--只是一些算法显示我在未来数据上的"-1",今天....。

 
Nikolai Semko:

这很有趣 ))))


是的,好吧,它确实发出了不一致的声音)。我把它挖出来好了。

 
vladevgeniy:

嗯,是的,它确实发出了不一致的声音)。我把它挖出来好了。

我自己也一直在兜圈子。只是现在我已经想出了最短的解决办法。