EA主要3大结构
OnInit()
、OnTick()
和OnDeinit()
。这三个方法是EA运行的基石,相当于房子的三大支柱,支撑起整个自动化交易逻辑。
一、EA三大核心方法总览
方法名 | 触发时机 | 核心作用 | 执行次数 |
---|---|---|---|
OnInit() | EA加载到图表时初始化 | 环境准备、参数设置、资源加载 | 仅1次(加载时) |
OnTick() | 每产生一个新报价时 | 实时行情处理、交易逻辑执行 | 高频触发(实时) |
OnDeinit() | EA从图表卸载时 | 资源释放、清理工作 | 仅1次(卸载时) |
二、OnInit()
:初始化准备
作用:在EA启动时完成初始设置,确保交易前的所有准备工作就绪。
- 典型操作:
- 参数初始化:设置交易品种、杠杆、初始资金等全局参数。
- 指标加载:初始化技术指标(如MA、MACD),获取指标句柄。
- 图表配置:修改K线显示样式(蜡烛图/竹节图)、颜色、时间周期。
- 权限校验:检查账户余额、保证金、算法交易权限。
代码示例:
cpp
int OnInit()
{
Print("【OnInit】EA加载,开始准备工作...");
return(INIT_SUCCEEDED); // 初始化成功,EA开始运行
}
关键返回值:
INIT_SUCCEEDED
:初始化成功,EA进入OnTick()
循环。INIT_FAILED
/INIT_PARAMETERS_INCORRECT
:初始化失败,EA不执行任何交易。
三、OnTick()
:实时交易逻辑
作用:每当市场产生新报价(Tick)时触发,是EA的核心逻辑执行区。
- 典型操作:
- 数据获取:读取实时价格、成交量、指标值(如当前买价
Bid
、卖价Ask
)。 - 条件判断:根据策略逻辑(如RSI超买超卖、均线交叉)决定开仓/平仓。
- 交易操作:执行下单、止损止盈设置、仓位管理。
- 风险控制:检查账户净值、保证金使用率,触发强制平仓逻辑。
- 数据获取:读取实时价格、成交量、指标值(如当前买价
代码示例:
cpp
void OnTick()
{
// 示例:获取当前交易品种与买价
string symbol = Symbol();
double bidPrice = SymbolInfoDouble(symbol, SYMBOL_BID);
Print("【OnTick】品种 新报价:", symbol, " Bid=", bidPrice);
}
高频触发机制:
- 每收到一个Tick(报价更新)就执行一次,可能每秒触发多次(取决于市场活跃度)。
- 逻辑需高效,避免耗时操作(如复杂计算)导致卡顿。
四、OnDeinit()
:资源释放
作用:EA卸载时释放占用的资源,确保程序优雅退出。
- 典型操作:
- 指标句柄释放:关闭OnInit中加载的指标,避免内存泄漏。
- 临时文件删除:清理EA运行中生成的日志文件、缓存数据。
- 交易停止:平仓所有持仓,停止未完成的订单。
代码示例:
cpp
void OnDeinit(const int reason)
{
Print("【OnDeinit】EA卸载,开始清理资源...");
}
参数reason
:
- 卸载原因(如用户手动移除、MT5关闭),通常无需特殊处理,统一释放资源即可。