类似于iBarShift - 页 11 1...4567891011121314151617 新评论 Vitaly Muzichenko 2018.04.05 01:32 #101 Nikolai Semko:是的,对于一个标准函数来说,这其实是很奇怪的行为。毕竟,我们所处理的正是与它的 "基准 "相适应的数值。 MQL4的标准函数iBarShift,当请求的时间落入一个洞时,返回左边的条数(即本例中的星期六),而iBarShift3返回洞中的右边条数(即星期一),这更合理。如果我们在洞里,返回左栏,即最后的已知值,但不返回未来,这是合乎逻辑的。 Nikolai Semko 2018.04.05 01:40 #102 Vitaly Muzichenko:如果我们在一个洞里,合乎逻辑的做法是返回左栏,即最后一个已知值,但不是未来。 对了,我没有想清楚。我把过去和未来混淆了)。可能是因为1(过去)>0(未来)。程式化。 Nikolai Semko 2018.04.05 02:48 #103 Alain Verleyen: 在大多数情况下,这个函数返回错误的结果PS: 是否需要发布英文版本或俄文翻译是正确的? 是的,翻译是正确的。运行这个脚本,你会发现这些函数 产生的结果完全相同。你能举个例子,说明这些函数的值在什么时间段是不同的吗? 顺便说一下,你的功能经常被误解。返回值为-1 2018.04.04 22:51:05.666 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:45:00 2018.04.04 22:50:46.867 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:46:00 2018.04.04 22:50:41.255 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:47:00 2018.04.04 22:50:23.496 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:45:00 2018.04.04 22:50:05.596 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:47:00 2018.04.04 22:48:38.638 TestBarShift2 AUDUSD,M5: BarShiftX PERIOD_M1 0 -1 2018.04.05 05:47:00 附加的文件: TestBarShift2.mq4 3 kb Nikolai Semko 2018.04.05 06:23 #104 Alain Verleyen:要求是将ONLY作为mql4的一个版本 你的函数在使用exact=true参数时不能正确工作。 这可以在这个脚本中看到。 这里是iBarShift函数的 一个完整的工作类似物,有确切的参数。 int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { int Res=Bars(Symb,TimeFrame,time+1,UINT_MAX); if(exact) if((TimeFrame!=PERIOD_MN1 || time>TimeCurrent()) && Res==Bars(Symb,TimeFrame,time-PeriodSeconds(TimeFrame)+1,UINT_MAX)) return(-1); return(Res); } 没有这个参数,它可以简化为这种形式。 Bars(Symb,TimeFrame,time+1,UINT_MAX); 附加的文件: TestBarShift2.mq4 3 kb Alain Verleyen 2018.04.05 09:05 #105 Nikolai Semko:是的,翻译是正确的。运行这个脚本,你会发现这些函数 产生的结果完全相同。你能举个例子,说明这些函数的值在什么时间段是不同的吗? 顺便说一下,你的功能经常被误解。返回值为-1 请认真对待。我的代码是针对mql5的。 它返回-1,因为Bars()函数在MT4下是不可靠的。 ... int shift=Bars(symbol,timeframe,time,LastBAR); datetime checkcandle[1]; if(CopyTime(symbol,timeframe,time,1,checkcandle)==1) { if(checkcandle[0]==time) return(shift-1); else if(exact && time>checkcandle[0]+PeriodSeconds(timeframe)) return(-1); else return(shift); } ... 脚本在澳元兑美元的M5图表上运行。 这在MT5中没有发生。 Nikolai Semko 2018.04.05 13:56 #106 Alain Verleyen:请认真对待。我的代码是针对mql5的。 它返回-1,因为Bars()函数在MT4下是不可靠的。 脚本在澳元兑美元的M5图表上运行。 这在MT5中没有发生。你说它应该像在MQL4中那样工作。 但这个脚本也可以在MQL5上运行 2018.04.05 09:52:40.760 TestBarShift2 (EURUSD,M12) PERIOD_M3 BarShift1 = -1 BarShift2 = 0 2018.08.10 18:39:49 exact = true 2018.04.05 09:52:40.760 TestBarShift2 (EURUSD,M12) PERIOD_M10 BarShift1 = -1 BarShift2 = 0 2018.04.15 00:25:08 exact = true 2018.04.05 09:52:40.761 TestBarShift2 (EURUSD,M12) PERIOD_M6 BarShift1 = -1 BarShift2 = 0 2018.04.21 04:26:03 exact = true 2018.04.05 09:52:40.761 TestBarShift2 (EURUSD,M12) PERIOD_M15 BarShift1 = -1 BarShift2 = 0 2018.05.29 17:10:52 exact = true 2018.04.05 09:52:40.761 TestBarShift2 (EURUSD,M12) PERIOD_M12 BarShift1 = -1 BarShift2 = 0 2018.09.16 13:10:33 exact = true 2018.04.05 09:52:40.762 TestBarShift2 (EURUSD,M12) PERIOD_M10 BarShift1 = -1 BarShift2 = 0 2018.09.25 21:24:50 exact = true 2018.04.05 09:52:40.762 TestBarShift2 (EURUSD,M12) PERIOD_M10 BarShift1 = -1 BarShift2 = 0 2018.05.30 20:04:10 exact = true 2018.04.05 09:52:40.762 TestBarShift2 (EURUSD,M12) PERIOD_M5 BarShift1 = -1 BarShift2 = 0 2018.04.29 16:12:16 exact = true 如果exact=True和未来时间,你必须返回-1。 我的脚本也发现了一个奇怪的错误。 这个错误被这个检查所证实。 Print (iBarShift2(_Symbol,PERIOD_MN1,D'2015.12.31 21:03:54',true)); // -1 Print (iBarShift1(_Symbol,PERIOD_MN1,D'2015.12.31 21:03:54',true)); // 28 所以我对你的算法中存在异常情况 的看法毕竟是正确的。 附加的文件: TestBarShift2.mq5 4 kb Nikolai Semko 2018.04.05 14:43 #107 从我所做的所有分析中,我们可以得出结论,这个完全模拟的iBarShift。 int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { int Res=Bars(Symb,TimeFrame,time+1,UINT_MAX); if(exact) if((TimeFrame!=PERIOD_MN1 || time>TimeCurrent()) && Res==Bars(Symb,TimeFrame,time-PeriodSeconds(TimeFrame)+1,UINT_MAX)) return(-1); return(Res); } 是迄今为止最正确的,同时也是最快的,而且是最简单和最短的算法。 如果你不需要确切的参数,你可以使用简化版本。 int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time) { return(Bars(Symb,TimeFrame,time+1,UINT_MAX)); } 或者直接使用这个等价的版本,而不调用该函数。 Bars(Symb,TimeFrame,time+1,UINT_MAX); 还是我错了? Nikolai Semko 2018.04.05 16:43 #108 沉默是一种同意的表示。 fxsaber 2018.04.05 17:04 #109 Nikolai Semko: 沉默是一种同意的表示。在ME中通过CTRL+SHIFT+F搜索了 "BarShift"。结果发现我没有使用类似的功能。显然,我自己不需要它。 曾经写过一个变体,可以在一行中把MT4的EA转换到MT5。似乎是写这篇文章的唯一原因。 我不与酒吧合作,不明白为什么其他人不这样做。 没有进入你的代码。但当你得到一个快速的解决方案时,总是很高兴。 Nikolai Semko 2018.04.05 17:14 #110 fxsaber:在ME中通过CTRL+SHIFT+F搜索了 "BarShift"。结果发现我没有使用类似的功能。显然,我自己不需要它。 曾经写过一个变体,将MT4的EA转换为MT5,只需一行。似乎是写这篇文章的唯一原因。 我不与酒吧合作,不明白为什么其他人不这样做。 没有进入你的代码。但当你得到一个快速的解决方案时,总是很高兴。我明白你的意思,但与酒吧合作对我来说仍然很紧迫。也许有一天它也会成为我的一个基本功。 1...4567891011121314151617 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,对于一个标准函数来说,这其实是很奇怪的行为。毕竟,我们所处理的正是与它的 "基准 "相适应的数值。
MQL4的标准函数iBarShift,当请求的时间落入一个洞时,返回左边的条数(即本例中的星期六),而iBarShift3返回洞中的右边条数(即星期一),这更合理。
如果我们在洞里,返回左栏,即最后的已知值,但不返回未来,这是合乎逻辑的。
如果我们在一个洞里,合乎逻辑的做法是返回左栏,即最后一个已知值,但不是未来。
PS: 是否需要发布英文版本或俄文翻译是正确的?
是的,翻译是正确的。
运行这个脚本,你会发现这些函数 产生的结果完全相同。
你能举个例子,说明这些函数的值在什么时间段是不同的吗?
顺便说一下,你的功能经常被误解。返回值为-1
要求是将ONLY作为mql4的一个版本
你的函数在使用exact=true参数时不能正确工作。
这可以在这个脚本中看到。
这里是iBarShift函数的 一个完整的工作类似物,有确切的参数。
没有这个参数,它可以简化为这种形式。
是的,翻译是正确的。
运行这个脚本,你会发现这些函数 产生的结果完全相同。
你能举个例子,说明这些函数的值在什么时间段是不同的吗?
顺便说一下,你的功能经常被误解。返回值为-1
请认真对待。我的代码是针对mql5的。
它返回-1,因为Bars()函数在MT4下是不可靠的。
脚本在澳元兑美元的M5图表上运行。
这在MT5中没有发生。
请认真对待。我的代码是针对mql5的。
它返回-1,因为Bars()函数在MT4下是不可靠的。
脚本在澳元兑美元的M5图表上运行。
这在MT5中没有发生。
你说它应该像在MQL4中那样工作。
但这个脚本也可以在MQL5上运行
如果exact=True和未来时间,你必须返回-1。
我的脚本也发现了一个奇怪的错误。
这个错误被这个检查所证实。
所以我对你的算法中存在异常情况 的看法毕竟是正确的。从我所做的所有分析中,我们可以得出结论,这个完全模拟的iBarShift。
是迄今为止最正确的,同时也是最快的,而且是最简单和最短的算法。
如果你不需要确切的参数,你可以使用简化版本。
或者直接使用这个等价的版本,而不调用该函数。
还是我错了?沉默是一种同意的表示。
在ME中通过CTRL+SHIFT+F搜索了 "BarShift"。结果发现我没有使用类似的功能。显然,我自己不需要它。
曾经写过一个变体,可以在一行中把MT4的EA转换到MT5。似乎是写这篇文章的唯一原因。
我不与酒吧合作,不明白为什么其他人不这样做。
没有进入你的代码。但当你得到一个快速的解决方案时,总是很高兴。
在ME中通过CTRL+SHIFT+F搜索了 "BarShift"。结果发现我没有使用类似的功能。显然,我自己不需要它。
曾经写过一个变体,将MT4的EA转换为MT5,只需一行。似乎是写这篇文章的唯一原因。
我不与酒吧合作,不明白为什么其他人不这样做。
没有进入你的代码。但当你得到一个快速的解决方案时,总是很高兴。
我明白你的意思,但与酒吧合作对我来说仍然很紧迫。也许有一天它也会成为我的一个基本功。