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

MQL5中WebRequest函数调用重载不匹配错误求助

解决MQL5 WebRequest函数重载不匹配问题

问题原因

你的代码调用WebRequest时参数数量和类型与MT5提供的两个重载签名不匹配:

  • 第三个参数你传递了请求头的char数组,但该位置应为代理服务器字符串(无代理则传空字符串)。
  • 你传递了8个参数,而可用的重载仅接受7个或9个参数。
  • 最后一个参数你用了char数组存储响应头,但重载要求传入字符串引用。

修复后的代码

修改OnTimer函数中的相关部分,使其匹配第二个重载签名:

void OnTimer() {
    string accountName = AccountInfoString(ACCOUNT_NAME);
    double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
    double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY);

    string postDataStr = StringFormat(
        "username=%s&accountName=%s&accountBalance=%.2f&accountEquity=%.2f",
        username, accountName, accountBalance, accountEquity
    );

    // Convert string to char array
    char postData[];
    StringToCharArray(postDataStr, postData);

    int timeout = 5000; // 5 seconds timeout
    char result[];
    string responseHeaders; // 将响应头改为字符串类型

    int res = WebRequest(
        "POST", // 请求方法
        URL_update_account, // 目标URL
        "", // 代理服务器(无代理则为空字符串)
        timeout, // 超时时间
        postData, // 请求数据数组
        result, // 响应内容数组
        responseHeaders // 响应头字符串
    );

    if (res == -1) {
        Print("WebRequest失败,错误码: ", GetLastError());
    } else {
        Print("服务器响应: ", CharArrayToString(result));
        Print("响应头: ", responseHeaders);
    }
}

额外说明

  1. 请求头问题:你原本想要传递的Content-Type请求头,在当前MT5版本提供的重载中无法直接设置。如果服务器必须要求该头信息,你需要升级MT5到最新版本(新版本的WebRequest支持传入请求头字符串参数),或者确认服务器是否可以自动识别表单编码数据。
  2. WebRequest权限:在MT5中需要手动启用WebRequest权限:
    • 打开工具 > 选项 > 智能交易
    • 勾选允许WebRequest用于列出的URL
    • 将你的服务器URL添加到列表中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:35:01