我在MQL5中尝试了以下代码,但遇到了错误。我猜这个代码来自MQL4。
代码:
int OnInit()
{
// if you don't want to execute on the first tick
IsBarClosed(-1,false);
return(1);
if(!IsBarClosed(0,true)) // true/false here allows to keep old bar for check again later in the code and reset
return(0);
}
//+------------------------------------------------------------------+
//| check if new bar has formed
//+------------------------------------------------------------------+
bool IsBarClosed(int timeframe,bool reset)
{
static datetime lastbartime;
if(timeframe==-1)
{
if(reset)
lastbartime=0;
else
lastbartime=iTime(NULL,timeframe,0);
return(true);
}
if(iTime(NULL,timeframe,0)==lastbartime) // wait for new bar
return(false);
if(reset)
lastbartime=iTime(NULL,timeframe,0);
return(true);
}
输出:
'iTime' - function not defined testing lines and trdae.mq5 243 25
'iTime' - function not defined testing lines and trdae.mq5 246 8
'iTime' - function not defined testing lines and trdae.mq5 249 21
3 error(s), 0 warning(s) 4 1
请帮助我使用MQL5正确完成它。我试图检测烛台关闭时间而不是开放时间。我只想在酒吧关门时尝试。
答案 0 :(得分:0)
iTime()
函数,仅在MQL4中。使用CopyRates()
或SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE)
。static
是MQL4 / 5中的关键字,具有非常特定的属性。它以下列方式工作的许多版本:如果您将ea附加到图表,static
为零,然后更新。如果你重新连接 - 从零到实际。如果你改变时间帧或ea / ind的设置 - 静态保持不变(它不会取消初始化,不会变为零,然后是实际值)。最早的1000多个版本的MT4就是这样工作的(从现在开始有两个更新)。也许有人发现这个关键字在mql4中很有用,它允许将变量与其函数一起保存,而不是在全局变量中;当然要记住上面的问题或忽略它。但是没有理由在MQL5中使用这个词。如果您需要一组函数 - 创建一个类并保留与之相关的所有变量。那么你就不会遇到没有重新初始化的静态变量的问题。open time + PeriodSeconds(_Period)-1
)。 我不知道您为什么需要重置代码中的参数,请尝试以下操作:
datetime iTime=(datetime)(SeriesInfoInteger(_Symbol,Period(),SERIES_LASTBAR_DATE)/PeriodSeconds()*PeriodSeconds());
然后使用iTime变量替换代码中的iTime()
,这可能会有所帮助