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); } }
额外说明
- 请求头问题:你原本想要传递的
Content-Type请求头,在当前MT5版本提供的重载中无法直接设置。如果服务器必须要求该头信息,你需要升级MT5到最新版本(新版本的WebRequest支持传入请求头字符串参数),或者确认服务器是否可以自动识别表单编码数据。 - WebRequest权限:在MT5中需要手动启用WebRequest权限:
- 打开
工具 > 选项 > 智能交易 - 勾选
允许WebRequest用于列出的URL - 将你的服务器URL添加到列表中
- 打开
内容的提问来源于stack exchange,提问作者Kaweng Mancha
相关产品推荐
相关产品推荐

