将MQL4平均价格计算函数转换为MQL5及相关技术咨询
MQL4到MQL5的平均价格计算迁移及订单利润/佣金查询方案
一、MQL5版本平均价格计算函数
1. 持仓平均价格(对应MQL4持仓逻辑)
如果你的MQL4 getAveragePrice() 是计算当前持仓的平均入场价,MQL5需改用持仓相关API实现:
double getAveragePrice() { double avgPrice = 0.0; const int totalPositions = PositionsTotal(); double totalVolume = 0.0; double totalCost = 0.0; for(int i = 0; i < totalPositions; i++) { if(PositionGetTicket(i)) { if(PositionGetString(POSITION_SYMBOL) == _Symbol) { const double volume = PositionGetDouble(POSITION_VOLUME); const double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); totalVolume += volume; totalCost += volume * openPrice; } } } if(totalVolume > 0.0) { avgPrice = totalCost / totalVolume; } return avgPrice; }
2. 历史订单平均价格
如果原函数是计算历史订单的平均开仓价,改用订单遍历API:
double getOrderAveragePrice() { double avgPrice = 0.0; const int totalOrders = OrdersTotal(); double totalVolume = 0.0; double totalCost = 0.0; for(int i = 0; i < totalOrders; i++) { const ulong ticket = OrderGetTicket(i); if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) { if(OrderGetString(ORDER_SYMBOL) == _Symbol) { const double volume = OrderGetDouble(ORDER_VOLUME); const double openPrice = OrderGetDouble(ORDER_PRICE_OPEN); totalVolume += volume; totalCost += volume * openPrice; } } } if(totalVolume > 0.0) { avgPrice = totalCost / totalVolume; } return avgPrice; }
二、MQL5中订单/持仓总利润计算(对应MQL4逻辑)
MQL4中OrderProfit() + OrderSwap() + OrderCommission()的逻辑,在MQL5中需区分持仓和历史订单:
1. 持仓总收益
double getPositionTotalProfit() { double totalProfit = 0.0; if(PositionSelect(_Symbol)) { const double profit = PositionGetDouble(POSITION_PROFIT); const double swap = PositionGetDouble(POSITION_SWAP); const double commission = PositionGetDouble(POSITION_COMMISSION); totalProfit = profit + swap + commission; } return totalProfit; }
2. 历史订单总收益
double getOrderTotalProfit(const ulong ticket) { double totalProfit = 0.0; if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) { const double profit = OrderGetDouble(ORDER_PROFIT); const double swap = OrderGetDouble(ORDER_SWAP); const double commission = OrderGetDouble(ORDER_COMMISSION); totalProfit = profit + swap + commission; } return totalProfit; }
三、MQL5中获取佣金
- 持仓佣金:选中目标持仓后,调用
PositionGetDouble(POSITION_COMMISSION)获取,示例:double getPositionCommission() { double commission = 0.0; if(PositionSelect(_Symbol)) { commission = PositionGetDouble(POSITION_COMMISSION); } return commission; } - 历史订单佣金:通过订单号选中目标历史订单后,调用
OrderGetDouble(ORDER_COMMISSION)获取:double getOrderCommission(const ulong ticket) { double commission = 0.0; if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) { commission = OrderGetDouble(ORDER_COMMISSION); } return commission; }
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

