RefreshRates()的更新内容 - 页 3 12345678910...12 新评论 Mikhail Nazarenko 2021.02.15 15:47 #21 Artyom Trishkin:如果你怀疑iXXXXX函数中存在错误,请使用SymbolInfoXXXX函数 可以用SymbolInfoXXXX 替换iXXXXX的例子。 Alexey Viktorov 2021.02.15 16:00 #22 Mikhail Nazarenko:我的代码是类似的。在OnTick中出错它应该是如果我们有当前的时间框架M5,我们应该将M5与H1和M1进行比较。当前的时间框架M5显示正确。问题出在H1和M1上。我在Alpari真正的EURCHF M5上检查,而不是打印,我在每个级别上都画了横条。 是的,我一开始确实把H1写成这样,但后来觉得这样的比较太少了。所以我把它改成了M5。 Mikhail Nazarenko: 请允许我举个例子,用SymbolInfoXXXXXX 代替iXXXXXXX。 Artyom犯了一个小错误... 你可以用iClose来代替 int CopyClose( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период int start_pos, // откуда начнем int count, // сколько копируем double close_array[] // массив для копирования цен закрытия ); 类似这样的事情 double close_M5[]; CopyClose(_Symbol, PERIOD_M5, 1, 1, close_M5); 这样一来,你就可以用魔杖一动就得到几个小节的数值。 该函数返回真或假,但我在这个例子中没有检查它。你可以自己猜测... Mikhail Nazarenko 2021.02.15 16:10 #23 Alexey Viktorov: 是的,我最初就是这样写H1的,但后来我觉得这样的比较太少了。所以我把它改成了M5。 我在那里完成了你的代码,并把它贴在上面。我把你的版本放在我的版本中,结果是一样的。几乎每支M5蜡烛上都有一个错位。你的结果是什么? Alexey Viktorov 2021.02.15 16:18 #24 Mikhail Nazarenko:我在那里完成了你的代码,并把它贴在上面。我把你的版本放在我的版本中,结果是一样的。几乎每支M5蜡烛上都有一个错位。你的结果是什么? 这里我们需要改变 if(NewBar(PERIOD_M5)) 至 if(NewBar(PERIOD_H1)) Mikhail Nazarenko 2021.02.15 16:27 #25 Alexey Viktorov:在这里,我们必须改变至不,更好的是 _Period.因为我们将强行等待H1的零报价,而当前时期的报价被正确更新。数据应该在每小时的第一秒接收,而不是在每小时更新时接收。 我想补充到例子中,并检查double close_H1,close_M5, close_M1; /*******************Expert initialization function*******************/ int OnInit() { return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { if(NewBar(PERIOD_M5)) { close_H1 = iClose(_Symbol, PERIOD_H1, 1); close_M1 = iClose(_Symbol, PERIOD_M1, 1); close_M5 = Close[1]; if(close_H1 != close_M5) Print(close_H1, " H1 != M5 ", close_M5); if(close_M1 != close_M5) Print(close_M1, " M1 != M5 ", close_M5); double ARRAY_M1[]; CopyClose(_Symbol, PERIOD_M1, 1, 1, ARRAY_M1); double ARRAY_H1[]; CopyClose(_Symbol, PERIOD_H1, 1, 1, ARRAY_H1); if(ARRAY_H1[0] != close_M5) Print(ARRAY_H1[0], " CopyClose H1 != M5 ", close_M5); if(ARRAY_M1[0] != close_M5) Print(ARRAY_M1[0], " CopyClose M1 != M5 ", close_M5); Comment( close_H1, " H1\n", close_M1, " M1\n", close_M5, " M5\n", ARRAY_H1[0], " CopyCloseH1\n", ARRAY_M1[0], " CopyCloseM1\n" ); } }/******************************************************************/ /**********************Expert OnDeinit function**********************/ void OnDeinit(const int reason) { Comment(""); }/******************************************************************/ bool NewBar(ENUM_TIMEFRAMES tf) { static datetime nt = 0; datetime tm = iTime(_Symbol, tf, 0); if(tm == 0) return false; if(tm != nt) { nt = tm; return true; } return false; }/******************************************************************/ Mikhail Nazarenko 2021.02.15 16:44 #26 Alexey Viktorov:在这里,我们必须改变至 其结果与iClose() 相同;iClose和CopyClose似乎从同一个地方获取数据。 Документация по MQL5: Доступ к таймсериям и индикаторам / iClose www.mql5.com iClose - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Alexey Viktorov 2021.02.15 17:07 #27 Mikhail Nazarenko:不,更好的是 _Period.因为我们将强行等待H1的零报价,而当前时期的报价被正确更新。数据应该在每小时的第一秒接收,而不是在每小时更新时接收。 我想对这个例子进行补充和检查 看来你根本不了解新栏出现的功能是如何运作的。bool NewBar(ENUM_TIMEFRAMES tf) { static datetime nt = 0; datetime tm = iTime(_Symbol, tf, 0); if(tm == 0) return false; if(tm != nt) { nt = tm; return true; } return false; }/******************************************************************/ 因此,也是如此。Mikhail Nazarenko: 结果与iClose() 时相同;iClose和CopyClose似乎从同一个地方获取数据。 当接收到新的TIKA值时,从OHLC接收条形闭合值和或其他,总是没有问题。 Mikhail Nazarenko 2021.02.15 17:21 #28 Alexey Viktorov:你似乎根本不明白新的酒吧功能是如何运作的。因此,也是如此。 当新的TIKA进来时,从OHLC获得条形收盘值和其他值,总是没有问题。 回答这个问题。为什么在一个新的蜡烛上,iClose(1)函数 给出的是过时的信息,而不是更新或错误?这是一个错误。 Alexey Viktorov 2021.02.15 17:41 #29 Mikhail Nazarenko:回答一个问题。为什么在一个新的蜡烛上,iClose(1)函数 会返回过时的信息,而不是更新或错误?这是一个错误。 如果这是一个错误,那么每个人,或几乎每个人,都应该有这个问题。如果只有你,那就是代码中的问题。 我的EA在M15上确定了一个新的条形图H1。 /************************Expert tick function************************/ void OnTick() { if(NewBar(PERIOD_H1)) { close_H1 = iClose(_Symbol, PERIOD_H1, 1); CopyClose(_Symbol, PERIOD_M5, 1, 1, close_M5); close_M1 = iClose(_Symbol, PERIOD_M1, 1); if(close_H1 != close_M1) Print(close_H1, " != ", close_M1); } Comment(close_H1, "\n", close_M5[0], "\n", close_M1, "\n" ); }/******************************************************************/ 而这是评论的内容。 不存在任何差异。 Mikhail Nazarenko 2021.02.15 17:54 #30 好了,感谢所有开发者的关注,我去创造像NewBar这样的拐杖了。))))主题关闭。 12345678910...12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你怀疑iXXXXX函数中存在错误,请使用SymbolInfoXXXX函数
可以用SymbolInfoXXXX 替换iXXXXX的例子。
我的代码是类似的。在OnTick中出错
它应该是
如果我们有当前的时间框架M5,我们应该将M5与H1和M1进行比较。
当前的时间框架M5显示正确。问题出在H1和M1上。
我在Alpari真正的EURCHF M5上检查,而不是打印,我在每个级别上都画了横条。
是的,我一开始确实把H1写成这样,但后来觉得这样的比较太少了。所以我把它改成了M5。
请允许我举个例子,用SymbolInfoXXXXXX 代替iXXXXXXX。
Artyom犯了一个小错误...
你可以用iClose来代替
类似这样的事情
这样一来,你就可以用魔杖一动就得到几个小节的数值。
该函数返回真或假,但我在这个例子中没有检查它。你可以自己猜测...
是的,我最初就是这样写H1的,但后来我觉得这样的比较太少了。所以我把它改成了M5。
我在那里完成了你的代码,并把它贴在上面。我把你的版本放在我的版本中,结果是一样的。几乎每支M5蜡烛上都有一个错位。你的结果是什么?
我在那里完成了你的代码,并把它贴在上面。我把你的版本放在我的版本中,结果是一样的。几乎每支M5蜡烛上都有一个错位。你的结果是什么?
这里我们需要改变
至
在这里,我们必须改变
至
不,更好的是 _Period.因为我们将强行等待H1的零报价,而当前时期的报价被正确更新。数据应该在每小时的第一秒接收,而不是在每小时更新时接收。
我想补充到例子中,并检查在这里,我们必须改变
至
其结果与iClose() 相同;iClose和CopyClose似乎从同一个地方获取数据。
不,更好的是 _Period.因为我们将强行等待H1的零报价,而当前时期的报价被正确更新。数据应该在每小时的第一秒接收,而不是在每小时更新时接收。
我想对这个例子进行补充和检查看来你根本不了解新栏出现的功能是如何运作的。
因此,也是如此。
结果与iClose() 时相同;iClose和CopyClose似乎从同一个地方获取数据。
你似乎根本不明白新的酒吧功能是如何运作的。
因此,也是如此。
当新的TIKA进来时,从OHLC获得条形收盘值和其他值,总是没有问题。回答这个问题。为什么在一个新的蜡烛上,iClose(1)函数 给出的是过时的信息,而不是更新或错误?这是一个错误。
回答一个问题。为什么在一个新的蜡烛上,iClose(1)函数 会返回过时的信息,而不是更新或错误?这是一个错误。
如果这是一个错误,那么每个人,或几乎每个人,都应该有这个问题。如果只有你,那就是代码中的问题。
我的EA在M15上确定了一个新的条形图H1。
而这是评论的内容。
不存在任何差异。