MQL5:如何在Combobox中显示全部订单编号?解决重复添加问题
解决MQL5中ComboBox订单显示异常的问题
问题根源
- 原代码把
m_combobox_box.ItemsClear()放在循环内部,遍历每个订单时都会清空ComboBox,最终只会保留最后一个遍历到的订单编号。 - 移除清空语句后,由于
Update()函数可能被EA频繁触发(比如每tick或定时器调用),每次调用都会重复添加所有订单,导致条目无限累积。
修复代码
将ItemsClear()移到for循环之前,确保每次更新时先清空旧条目,再批量添加所有有效订单:
void CControlsDialog::Update(void){ // 先清空ComboBox所有旧条目 m_combobox_box.ItemsClear(); for(int i = PositionsTotal() - 1; i >= 0; i--) { long ticket = PositionGetTicket(i); if(ticket > 0){ PositionSelectByTicket(ticket); ENUM_POSITION_TYPE posType = PositionGetInteger(POSITION_TYPE); Print((string)ticket); m_combobox_box.ItemAdd(ticket); } } }
额外优化建议
- 控制
Update()调用频率:可以记录上一次的仓位总数,只有当仓位数量发生变化时再触发更新,避免每tick都执行UI操作,提升性能。 - 可选去重校验:虽然
PositionsTotal()返回的是当前有效仓位,理论上不会重复,但如果有特殊业务场景,可以在添加前检查ticket是否已存在于ComboBox中。
内容的提问来源于stack exchange,提问作者Dominiz X
相关产品推荐
相关产品推荐

