诚信为本
量力而为
当前位置:峰汇在线 ea编程知识 正文

OnInit 函数详细介绍

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 或指标的后续执行。

版权所有转载请注明标题及链接:峰汇在线 » OnInit 函数详细介绍