1

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

似乎Open, Close, High,Low函数在我的库中没有“检测到”。(其他系统功能,如Print()已正确加载)。

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

1 回答 1

1

不完全是,无论是 1:1 副本,还是任何 MOD,都不会返回任何错误:

//+------------------------------------------------------------------+
//|  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] );
}

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

发布 MetaLang.exe 错误描述的完整副本。使用鼠标右键单击 + 复制(在 [错误] 页面上的 MetaLang.exe-Toolbox 窗口中 + 将完整的描述粘贴到 StackOverflow 上)

举个例子:

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

只是为了清楚起见:

MQL4识别具有特定访问协议的函数 ( Print()) 和其他对象 ( Open) 以使用它们。在函数的情况下,传递与函数期望兼容的“参数”。

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

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

因此,您的函数isBlueCandle()确实是一个函数,但是,在内部它不调用函数,而是将Open[anIntIndexAsPtrIntoTimeSeriesOrderedARRAY]-*referenced cell )的单元格值与 Close(即[anIntIndexAsPtrIntoTimeSeriesOrderedARRAY]-*referenced cell )的值进行比较以构造一个boolwhich函数即将isBlueCandle()返回。

于 2015-08-19T16:34:12.383 回答