You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MQL4中从函数返回数组?代码实现求助

如何让自定义函数返回数组(针对MQL4/MQL5)

嘿,我看你想要实现一个返回当前品种卖出订单编号数组的函数,现在的代码有几个关键问题需要调整,我来帮你修正并解释清楚:

1. 函数返回类型错误

你的函数声明是int GetOrdresVente(),但要返回数组的话,返回类型得改成int[],这样才能返回整数数组。

2. 数组初始化问题

直接声明int Tabordresvente[];没有初始化内存,在MQL里需要先给数组分配初始空间,我们可以初始化为空数组(大小0)。

3. ArrayResize的错误用法

你现在的代码里连续两次调用ArrayResize,先扩容再缩容,这会导致数组大小没变,根本存不下新元素。正确的做法是:先获取当前数组的大小,扩容后直接用新的索引赋值。

修正后的完整代码

int[] GetOrdresVente() {
    // 初始化空数组,初始大小为0
    int Tabordresvente[];
    ArrayResize(Tabordresvente, 0);

    for(int j = OrdersTotal() - 1; j >= 0 ; j--) {
        // 选中订单,同时处理选中失败的情况
        if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) {
            // 检查是否是当前品种的卖出订单
            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL) {
                int ordrevente = OrderTicket();
                // 获取当前数组大小
                int currentSize = ArraySize(Tabordresvente);
                // 数组扩容1位
                ArrayResize(Tabordresvente, currentSize + 1);
                // 把订单号赋值到新的索引位置(currentSize就是新的索引,因为数组从0开始)
                Tabordresvente[currentSize] = ordrevente;
            }
        }
    }
    // 返回数组
    return Tabordresvente;
}

调用示例

你可以这样调用这个函数,获取并使用返回的数组:

void OnTick() {
    int[] sellOrders = GetOrdresVente();
    Print("当前卖出订单数量:", ArraySize(sellOrders));
    for(int i = 0; i < ArraySize(sellOrders); i++) {
        Print("订单编号:", sellOrders[i]);
    }
}

额外注意事项

  • 别忘了在OrderSelect里加上MODE_TRADES参数(MQL4需要,MQL5可以省略但加上更清晰),确保我们遍历的是真实交易订单。
  • 如果没有符合条件的订单,函数会返回一个空数组,调用时可以用ArraySize判断是否有结果。

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

火山引擎 最新活动