如何检测一个新酒吧 - 页 2 1234 新评论 Hennie Reyneke 2017.01.26 11:57 #11 Ian Harris:嗨,oneillj。我想我已经回复过了,但它似乎已经消失在互联网上了。你提供的代码片段几乎就是我最初抱怨的那个。为什么这么复杂?我只是觉得一定有一个更简单的方法。我想出了这个办法,它似乎是有效的。如果我说错了,请纠正我。(我也尝试过使用BarsCalculated,但它总是等于Bars,所以测试结果总是错误的)。static int LastBarCount = 0; 如果(Bars(_Symbol, _Period) > LastBarCount) LastBarCount = Bars(_Symbol, _Period); 否则 返回。;-)伊恩我完全同意,我们需要尽可能简单的东西。遗憾的是,这段代码在MQL5中似乎并不适合我。 honest_knave 2017.01.26 12:00 #12 RoboSpider: 遗憾的是,这在MQL5中似乎不起作用。不管怎么说,条形图将是检测新条形图的一个糟糕的方法。唯一可靠的方法是使用时间来检查 新的条形图。不是成交量,不是价格,也不是条形图。static datetime LastBar = 0;datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);if(LastBar != ThisBar) { printf("New bar: %s",TimeToString(ThisBar)); LastBar = ThisBar; } Hennie Reyneke 2017.01.26 12:44 #13 honest_knave:不管怎么说,条形图将是检测新条形图的一个糟糕的方法。唯一可靠的方法是使用时间来检查新的条形图。不是成交量,不是价格,也不是条形图。static datetime LastBar = 0;datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);if(LastBar != ThisBar) { printf("New bar: %s",TimeToString(ThisBar)); LastBar = ThisBar; } 你是我的英雄! William Roeder 2017.01.26 14:07 #14 honest_knave Bars无论如何都是一个检测新蜡烛的坏方法。唯一可靠的方法是使用时间来检查一个新的蜡烛。不是成交量,不是价格,不是条形。 Bars是不可靠的(刷新/重新连接可以改变图表上的条数,)volume是不可靠的(错过ticks,)Price是不可靠的(重复的价格和==操作数。 - MQL4论坛。)总是使用时间。新的蜡烛 - MQL4论坛 Alain Verleyen 2017.01.26 15:23 #15 honest_knave:不管怎么说,条形图将是检测新条形图的一个糟糕的方法。唯一可靠的方法是使用时间来检查新的条形图。不是成交量,不是价格,也不是条形图。static datetime LastBar = 0;datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);if(LastBar != ThisBar) { printf("New bar: %s",TimeToString(ThisBar)); LastBar = ThisBar; }仅供参考,我在我的参考文献中有如下说明。//-- 有时SeriesInfoInteger与SERIES_LASTBAR_DATE 返回一个错误。那是很久以前的事了,而且我已经很多年没有使用/测试这个函数了,所以也许这不是更多的情况。但如果你想用它来检测一个新条形图,最好还是检查一下;-) honest_knave 2017.01.26 15:39 #16 Alain Verleyen:仅供参考,我的参考资料中有如下说明。//-- 有时SeriesInfoInteger与SERIES_LASTBAR_DATE 返回一个错误。那是很久以前的事了,而且我已经很多年没有使用/测试这个函数了,所以也许这不是更多的情况。但如果你想用它来检测一个新的酒吧,最好还是检查一下;-)这是非常隐蔽的,Alain!什么类型的错误?在这种情况下,对于belts'n'braces,要么在调用前检查SeriesInfoInteger >0和/或ResetLastError,然后在调用后检查_LastError。或者在其他地方获得时间源,例如,如果在OnCalculate中,则为time[],或者CopyTime等等等等。 Mladen Rakic 2017.01.26 15:43 #17 为什么不简单地使用像这样的东西。 static datetime prevTime=0; datetime lastTime[1]; if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0]) { prevTime=lastTime[0]; // ... } 它应该在所有情况下都能工作(即使在CopyTime()出现错误时,它也能避免出现陷阱) Alain Verleyen 2017.01.26 15:46 #18 honest_knave:这是非常隐蔽的,阿兰!什么类型的错误?在这种情况下,对于大括号,要么在调用前检查SeriesInfoInteger >0和/或ResetLastError,然后在调用后检查_LastError。或者在其他地方获得时间源,例如,如果在OnCalculate中,则为time[],或者CopyTime等等等等。 我只是说,当我多年前使用SeriesInfoInteger()时,它并不真正可靠。由你来决定你如何处理这些信息 :-D honest_knave 2017.01.26 15:55 #19 Alain Verleyen: 我只是说,当我多年前使用SeriesInfoInteger()时,它并不真正可靠。至于你如何处理这些信息,就看你自己了 :-D不是很多TBH - 我不需要在MT5中检测一个新的酒吧 ,但感谢你的分享 - 我会记住它为未来。我只是想简化一些人们似乎过于复杂的东西。尽管如此,原则仍然是:使用时间。注意:考虑到Alain的不完整的历史笔记,选择你获得时间的方法是你自己的危险(顺便说一下,XP Service Pack 1看起来怎么样?) Alain Verleyen 2017.01.26 16:38 #20 honest_knave:不多,TBH - 我不需要在MT5中检测一个新的酒吧,但感谢你的分享 - 我会记住它,为未来。我只是想简化一些人们似乎过于复杂的东西。尽管如此,原则仍然是:使用时间。注意:考虑到Alain的不完整的历史记录,选择获取时间的方法是你自己的风险(顺便说一下,XP Service Pack 1看起来怎么样?) 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗨,oneillj。
我想我已经回复过了,但它似乎已经消失在互联网上了。
你提供的代码片段几乎就是我最初抱怨的那个。为什么这么复杂?我只是觉得一定有一个更简单的方法。我想出了这个办法,它似乎是有效的。如果我说错了,请纠正我。(我也尝试过使用BarsCalculated,但它总是等于Bars,所以测试结果总是错误的)。
static int LastBarCount = 0;
;-)伊恩如果(Bars(_Symbol, _Period) > LastBarCount)
LastBarCount = Bars(_Symbol, _Period);
否则
返回。
我完全同意,我们需要尽可能简单的东西。
遗憾的是,这段代码在MQL5中似乎并不适合我。
遗憾的是,这在MQL5中似乎不起作用。
不管怎么说,条形图将是检测新条形图的一个糟糕的方法。
唯一可靠的方法是使用时间来检查 新的条形图。不是成交量,不是价格,也不是条形图。
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
不管怎么说,条形图将是检测新条形图的一个糟糕的方法。
唯一可靠的方法是使用时间来检查新的条形图。不是成交量,不是价格,也不是条形图。
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
不管怎么说,条形图将是检测新条形图的一个糟糕的方法。
唯一可靠的方法是使用时间来检查新的条形图。不是成交量,不是价格,也不是条形图。
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
仅供参考,我在我的参考文献中有如下说明。
//-- 有时SeriesInfoInteger与SERIES_LASTBAR_DATE 返回一个错误。
那是很久以前的事了,而且我已经很多年没有使用/测试这个函数了,所以也许这不是更多的情况。但如果你想用它来检测一个新条形图,最好还是检查一下;-)
仅供参考,我的参考资料中有如下说明。
//-- 有时SeriesInfoInteger与SERIES_LASTBAR_DATE 返回一个错误。
那是很久以前的事了,而且我已经很多年没有使用/测试这个函数了,所以也许这不是更多的情况。但如果你想用它来检测一个新的酒吧,最好还是检查一下;-)
这是非常隐蔽的,Alain!什么类型的错误?
在这种情况下,对于belts'n'braces,要么在调用前检查SeriesInfoInteger >0和/或ResetLastError,然后在调用后检查_LastError。
或者在其他地方获得时间源,例如,如果在OnCalculate中,则为time[],或者CopyTime等等等等。
为什么不简单地使用像这样的东西。
datetime lastTime[1];
if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
{
prevTime=lastTime[0];
// ...
}
这是非常隐蔽的,阿兰!什么类型的错误?
在这种情况下,对于大括号,要么在调用前检查SeriesInfoInteger >0和/或ResetLastError,然后在调用后检查_LastError。
或者在其他地方获得时间源,例如,如果在OnCalculate中,则为time[],或者CopyTime等等等等。
我只是说,当我多年前使用SeriesInfoInteger()时,它并不真正可靠。至于你如何处理这些信息,就看你自己了 :-D
不是很多TBH - 我不需要在MT5中检测一个新的酒吧
,但感谢你的分享 - 我会记住它为未来。
我只是想简化一些人们似乎过于复杂的东西。
尽管如此,原则仍然是:使用时间。注意:考虑到Alain的不完整的历史笔记,选择你获得时间的方法是你自己的危险(顺便说一下,XP Service Pack 1看起来怎么样?)
不多,TBH - 我不需要在MT5中检测一个新的酒吧,但感谢你的分享 - 我会记住它,为未来。
我只是想简化一些人们似乎过于复杂的东西。
尽管如此,原则仍然是:使用时间。注意:考虑到Alain的不完整的历史记录,选择获取时间的方法是你自己的风险(顺便说一下,XP Service Pack 1看起来怎么样?)