You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:35:06