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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:27