OnInit()
函数是 MT4 和 MT5 平台中的 Init 事件处理程序。专为处理 Expert Advisor (EA) 或指标的初始化事件而设计。
函数原型
OnInit()
函数可以是以下两种形式:
int OnInit();
或
void OnInit();
不包含任何参数。
初始化事件
当 EA 或指标被加载或重新编译后,Init 事件立即触发,此时,OnInit()
用于初始化。
如果 OnInit()
返回 int,非零值意味着初始化失败,触发 Deinit 事件,原因为 REASON_INITFAILED
。只有使用 #property strict
编译时,才会分析 OnInit()
的执行结果。
返回值与含义
建议使用 ENUM_INIT_RETCODE
枚举值作为返回代码:
INIT_SUCCEEDED
:成功初始化,可继续测试 EA。INIT_FAILED
:初始化失败,如未能创建 EA 所需的指标。INIT_PARAMETERS_INCORRECT
:输入参数集不正确。
如果 OnInit()
类型为 void,它表示成功初始化。
实例
1. 初始化变量
input double TakeProfit = 50.0;
double PointSize;
int OnInit()
{
PointSize = MarketInfo(Symbol(), MODE_POINT);
if (PointSize == 0)
{
Print("获取点大小失败!");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
这里,PointSize
初始化为当前交易品种的点大小。
2. 检查时间框架
input ENUM_TIMEFRAMES Timeframe = PERIOD_H1;
int OnInit()
{
if (Timeframe != Period())
{
Print("该策略只适用于 ", Timeframe, " 时间框架");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
这检查加载的 EA 图表是否与指定的时间框架匹配。
3. 打开文件
int handle;
int OnInit()
{
handle = FileOpen("log.txt", FILE_WRITE|FILE_READ);
if (handle == INVALID_HANDLE)
{
Print("文件打开失败!");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
这尝试打开文件。失败时返回初始化失败。
4. 验证输入参数
input double RiskPercent = 2.0;
int OnInit()
{
if (RiskPercent <= 0 || RiskPercent > 100)
{
Print("风险百分比输入错误!");
return(INIT_PARAMETERS_INCORRECT);
}
return(INIT_SUCCEEDED);
}
这检查 RiskPercent
是否在有效范围内。
综上所述,OnInit()
在 MT4 和 MT5 中是重要的预定义函数,帮助用户在加载 EA 或指标时进行初始化。根据其返回值,决定如何处理 EA 或指标的后续执行。