'打开' - 未声明的标识符

时间:2015-08-19 10:27:49

标签: algorithmic-trading mql4 metatrader4 mt4

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

我的库中似乎没有“检测到OpenCloseHighLow个功能。 (其他系统功能如Print()已正确加载)。

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

1 个答案:

答案 0 :(得分: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错误描述的完整副本。 使用鼠标右键单击+复制(在[错误] -page +上的MetaLang.exe-Toolbox窗口中粘贴StackOverflow上的完整描述)

举个例子:

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

为了清楚起见:

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

OpenHighVolume等不是函数,而是数组,这些数组是特殊的,并且在内部精心构建MT4发动机,从而提供非常快速的&amp;非常有效的操纵。

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

因此,您的函数 isBlueCandle() 确实是一个函数,但是,在内部它不调用函数,但它会比较 Open的单元格值[anIntIndexAsPtrIntoTimeSeriesOrderedARRAY] - *引用的单元格) 使用值 Close (即[anIntIndexAsPtrIntoTimeSeriesOrderedARRAY] - *引用的单元格)构建 bool ,其中 { {1}} 函数即将返回。