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

如何在相同交易条件下持续开单,批量挂单且不重复生成新订单

MQL4挂单逻辑问题修复方案

你的代码存在多个明显的逻辑错误,导致未达到预期效果,具体问题和修正方案如下:

现存问题

  • 逻辑判断运算符错误:统计订单时错误使用了&&(逻辑与),订单类型不可能同时为两种,所以openCount和openpendCount永远为0,应该改为||(逻辑或)。
  • 魔术号判断不统一:统计订单时判定魔术号为0,但发单时使用的是MAGIC常量,若MAGIC不为0则永远统计不到已发挂单,会重复发单。
  • 挂单价位冗余且可能出错:Ask+(upper-Ask)等价于upper,Ask-(Bid-lower)在点差波动时可能偏离你想要的前低价位,直接使用upper和lower作为挂单价更符合你在前高前低挂单的需求。
  • 缺少发单结果校验:未判断OrderSend的返回值,无法感知发单失败的情况。
  • 注释错误:统计挂单的代码注释误写为统计市价单。

修正后代码

// 计算前高前低
double upper = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, periods, 0));
double lower = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, periods, 0)); 

Comment("Upper: ", upper, "\nLower: ", lower);

int openCount = 0;
int openpendCount = 0;

// 遍历所有订单统计数量
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
    if (OrderSelect(i, SELECT_BY_POS) &&         
        OrderMagicNumber() == MAGIC &&        // 和发单使用的魔术号保持一致
        OrderSymbol() == _Symbol)             
    {
        // 统计市价持仓单
        if(OrderType() == OP_SELL || OrderType() == OP_BUY)                  
            openCount++;
              
        // 统计限价挂单
        if(OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYLIMIT)                  
            openpendCount++;
    }
}

// 无持仓无挂单时发单
if(openCount == 0 && openpendCount == 0)
{      
    // 在前高挂SELLLIMIT
    int sellLimitTicket = OrderSend(Symbol(), OP_SELLLIMIT, 1, upper, 3, 0, 0, "Sub Sell", MAGIC, 0, Blue);
    if(sellLimitTicket < 0) {
        Print("SELLLIMIT发单失败,错误码:", GetLastError());
    }
    // 在前低挂BUYLIMIT
    int buyLimitTicket = OrderSend(Symbol(), OP_BUYLIMIT, 1, lower, 3, 0, 0, "Sub Buy", MAGIC, 0, Blue);
    if(buyLimitTicket < 0) {
        Print("BUYLIMIT发单失败,错误码:", GetLastError());
    }
}

防重复下单逻辑说明

每次触发交易条件前,先遍历所有订单,统计同品种、同魔术号的持仓单和挂单数量,只要数量不为0就跳过发单环节,即可避免重复生成订单。如果需要区分不同类型的挂单避免重复,可以单独统计对应类型的挂单数量即可。

内容的提问来源于stack exchange,提问作者linlin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 11:45:07