EA: New Candle or Bar formation. - 页 2

 
Maxim Kuznetsov # :

对 previous_time 的初始化不当,导致代码启动时立即发出错误警报。

2. 在每次 tick 时对 iTime 的访问代价高昂。

3. 并非所有刻度线都构成一个条形图(在极少数情况下,刻度线可能出现在非交易日,但并不是交易,而只是服务器的内部程序)。

代码的工作是检测新蜡烛的形成,这只能写入 Ontick 或 OnTimer 函数中。
 

您不可能知道蜡烛何时关闭。只有当一个新的刻度线到达并开始一个新的条形图时,旧条形图才会关闭,而该刻度线可能在条形图持续时间几乎结束时到达。

对于新的条形图测试,条形图 是不可靠的(刷新/重新连接可以改变图表上的条形图数量),成交量是不可靠的(错过刻度线),价格是不可靠的(重复的价格和== 操作符。 - MQL4 编程论坛。)始终使用时间
MT4:新蜡烛 - MQL4 编程论坛 #3 (2014)
MT5:访问变量 - MQL4 编程论坛 #3 (2022)

我不同意创建一个新的 bar 函数,因为每个 tick 只能调用一次(第二次调用返回 false)。一个变量可以测试多次。
在每个条形图开始时运行一次 EA - MQL4 编程论坛 (2011)

 static datetime curDT=0; datetime preDT=curDT; curDT=iTime(_Symbol,_Period,0);
 if(curDT != preDT){ … }
 
William Roeder #:

我不同意创建一个新的条形图函数,因为每个刻度只能调用一次(第二次调用返回假值)。一个变量可以被检查多次。

设法 创建了一个通用函数IsNewBar(symbol, timeframe), 它可以在一个 EA 中对符号和时间框架的不同组合正常工作,并且可以在一个刻度线的处理过程中多次调用,第二次(以及以后的次数) 返回的结果与第一次相同。