'Open' - 未声明的标识符

'Open' - undeclared identifier

有人知道为什么 .mqh 文件中的这段代码会抛出错误 'Open' - undeclared identifier 吗?

OpenCloseHighLow 函数似乎 "detected" 不在我的库中。 (其他系统功能如 Print() 已正确加载)。

bool isBlueCandle( int candle ) export {
   return Open[candle] < Close[candle];
}

不完全是,既不是1:1副本,也不是任何MOD,return任何错误:

//+------------------------------------------------------------------+
//|  isBlueCandle TESTs                     MetaLang.exe: Build 1154 |
//+------------------------------------------------------------------+
bool isBlueCANDLE_TEST(        int candle ) export
{
   return Open[candle] < Close[candle];
}

bool isBlueCANDLE_TEST2(       int candle ) export {
   return Open[candle] < Close[candle];
}

bool isBlueCANDLE_TEST3( const int candle ) export {
   return Open[candle] < Close[candle];
}

bool isBlueCANDLE_TEST4( const int candle ) export {
   return( Open[candle] < Close[candle] );
}

如以上评论中所述,缺少上下文将有助于追踪您所述问题的根本原因。

Post MetaLang.exe 错误描述的完整副本。 使用鼠标右键单击 + 复制(在 [错误] 页面上的 MetaLang.exe-工具箱 window 中 + 将完整描述粘贴到 Whosebug 上)

举个例子:

return value of 'OrderModify' should be checked
FOREX_SimpleSAR_EA_msMOD_0.00.mq4   227 19

为了清楚起见:

MQL4 识别函数 ( Print() ) 和其他对象 ( Open ),并使用特定的访问协议来处理它们。在函数的情况下,通过 "arguments" 与函数的期望兼容。

OpenHighVolume等,不是函数,而是数组,而且,这些数组比较特殊在内部 MT4 引擎中精心构建,以提供非常快速和非常有效的操作。

MetaQuotes 称其为 TimeSeries 对象,一个反向步进索引 (否则正常)array.

因此,您的函数 isBlueCandle() 确实是一个函数,但是,在内部它不调用函数,但它比较 [=44 的单元格值=]Open[anIntIndexAsPtrIntoTimeSeriesOrderedARRAY]-*引用的单元格) 针对 Close 的值(即 [anIntIndexAsPtrIntoTimeSeriesOrderedARRAY]-*引用的单元格)构建 bool isBlueCandle() 函数即将 return.