MT5 里定时平仓的写法,给需要的朋友参考
最近有人问 EA 怎么定时平仓,写个简单的思路。
核心就是在 OnTick 里判断服务器时间,到设定时间点就遍历持仓平掉。用 OrderClose 逐个平,或者用 PositionClose。
要注意的是时间用服务器时间 TimeCurrent(),别用本地时间,否则对不上。需要完整代码的可以说一声。
核心就是在 OnTick 里判断服务器时间,到设定时间点就遍历持仓平掉。用 OrderClose 逐个平,或者用 PositionClose。
要注意的是时间用服务器时间 TimeCurrent(),别用本地时间,否则对不上。需要完整代码的可以说一声。
// MT5 定时平仓
input double HoldingHours = 2.0; // 持仓2小时后自动平仓
input int Magic = 123456;
void OnTick() {
for(int i = PositionsTotal() - 1; i >= 0; i--) {
ulong ticket = PositionGetTicket(i);
if(PositionSelectByTicket(ticket)) {
if(PositionGetString(POSITION_SYMBOL) != Symbol()) continue;
if(PositionGetInteger(POSITION_MAGIC) != Magic) continue;
datetime openTime = (datetime)PositionGetInteger(POSITION_TIME);
double hoursHeld = (TimeCurrent() - openTime) / 3600.0;
// 持仓超过指定时间,自动平仓
if(hoursHeld >= HoldingHours) {
double volume = PositionGetDouble(POSITION_VOLUME);
long type = PositionGetInteger(POSITION_TYPE);
if(type == POSITION_TYPE_BUY) {
OrderSend(Symbol(), ORDER_TYPE_SELL, volume, Bid, 0, 0, 0, "定时平仓", Magic, 0, clrYellow);
} else {
OrderSend(Symbol(), ORDER_TYPE_BUY, volume, Ask, 0, 0, 0, "定时平仓", Magic, 0, clrYellow);
}
Print("订单 #", ticket, " 已持仓", DoubleToString(hoursHeld, 1), " 小时,自动平仓");
}
}
}
}全部回复(15)
发表回复
请先登录后再回复。
