MQL4代码示例:修复'OrderOpenPrice'函数调用错误

本文针对MQL4代码中出现的 'OrderOpenPrice' - ambiguous call to overloaded function with the same parameters 错误提供解决方案,并附带完整的代码示例。

错误分析

该错误提示表明在代码中调用 OrderOpenPrice 函数时出现了歧义。这是因为 OrderOpenPrice 函数可以接受参数,也可以不接受参数。当编译器无法确定应该使用哪个版本的函数时,就会报出此错误。

解决方案

在计算订单的持仓价格时,应该将无参的 OrderOpenPrice 改为带参的 OrderOpenPrice(ticket),并传入正确的订单号作为参数。

完整代码示例

以下是修正后的完整代码:mq4extern int MagicNumber = 92133;extern double InitialLots = 0.5;extern double TakeProfitAmount = 80;

int totalOrders = 0;int totalProfit = 0;

void OnTick(){ double currentPrice = MarketInfo(Symbol(), MODE_BID); if (!IsOpenOrders()) { // 挂单条件 double buyPrice = currentPrice + 200 * Point; double sellPrice = currentPrice - 200 * Point; // 挂单 OrderSend(Symbol(), OP_BUYSTOP, InitialLots, buyPrice, 10, 0, 0, 'Buy Stop', MagicNumber, 0, Green); OrderSend(Symbol(), OP_SELLSTOP, InitialLots, sellPrice, 10, 0, 0, 'Sell Stop', MagicNumber, 0, Red); } // 获取持仓订单 int buyOrder = GetFirstBuyOrder(); int sellOrder = GetFirstSellOrder(); if (buyOrder != -1) { double buyOrderOpenPrice = OrderOpenPrice(buyOrder); // 注意此处修改 // 多单信号 double buyOrderTakeProfit1 = buyOrderOpenPrice + 100 * Point; double buyOrderTakeProfit2 = buyOrderOpenPrice + 200 * Point; double buyOrderTakeProfit3 = buyOrderOpenPrice + 300 * Point; double buyOrderTakeProfit4 = buyOrderOpenPrice + 400 * Point; // 下单 OrderSend(Symbol(), OP_BUY, 0.3, currentPrice, 10, buyOrderTakeProfit1, 0, 'Buy Signal 1', MagicNumber, 0, Blue); OrderSend(Symbol(), OP_BUY, 0.18, currentPrice, 10, buyOrderTakeProfit2, 0, 'Buy Signal 2', MagicNumber, 0, Blue); OrderSend(Symbol(), OP_BUY, 0.1, currentPrice, 10, buyOrderTakeProfit3, 0, 'Buy Signal 3', MagicNumber, 0, Blue); OrderSend(Symbol(), OP_BUY, 0.06, currentPrice, 10, buyOrderTakeProfit4, 0, 'Buy Signal 4', MagicNumber, 0, Blue); } if (sellOrder != -1) { double sellOrderOpenPrice = OrderOpenPrice(sellOrder); // 注意此处修改 // 空单信号 double sellOrderTakeProfit1 = sellOrderOpenPrice - 100 * Point; double sellOrderTakeProfit2 = sellOrderOpenPrice - 200 * Point; double sellOrderTakeProfit3 = sellOrderOpenPrice - 300 * Point; double sellOrderTakeProfit4 = sellOrderOpenPrice - 400 * Point; // 下单 OrderSend(Symbol(), OP_SELL, 0.3, currentPrice, 10, sellOrderTakeProfit1, 0, 'Sell Signal 1', MagicNumber, 0, Red); OrderSend(Symbol(), OP_SELL, 0.18, currentPrice, 10, sellOrderTakeProfit2, 0, 'Sell Signal 2', MagicNumber, 0, Red); OrderSend(Symbol(), OP_SELL, 0.1, currentPrice, 10, sellOrderTakeProfit3, 0, 'Sell Signal 3', MagicNumber, 0, Red); OrderSend(Symbol(), OP_SELL, 0.06, currentPrice, 10, sellOrderTakeProfit4, 0, 'Sell Signal 4', MagicNumber, 0, Red); } totalProfit = CalculateTotalProfit(); if (totalProfit >= TakeProfitAmount) { CloseAllOrders(); DeleteAllPendingOrders(); Sleep(60000); // 1分钟延迟 totalProfit = 0; }}

// ... 其他函数代码 ...

请注意,这只是一个示例代码,并可能需要根据您的具体需求和平台要求进行进一步修改和优化。请确保在实际交易之前进行充分的测试和验证。

MQL4代码示例:修复'OrderOpenPrice'函数调用错误及完整代码

原文地址: https://www.cveoy.top/t/topic/cD3F 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录