如何在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




