jk01 发表于 2025-7-27 03:09:18

MT5一次平仓总数量订单二分之一方法

使用MQL5脚本自动平仓50%仓位以下是一个MQL5脚本示例,可以自动计算当前持仓总量,并平仓其中的50%:
#include <Trade\Trade.mqh>
CTrade trade;

void OnStart()
{
    double totalVolume = 0;
   
    // 计算当前持仓总手数
    for(int i = PositionsTotal() - 1; i >= 0; i--)
    {
      if(PositionGetTicket(i))
      {
            totalVolume += PositionGetDouble(POSITION_VOLUME);
      }
    }
   
    // 平仓50%
    double closeVolume = totalVolume * 0.5;
   
    // 遍历持仓并平仓
    for(int i = PositionsTotal() - 1; i >= 0; i--)
    {
      if(PositionGetTicket(i))
      {
            ulong ticket = PositionGetInteger(POSITION_TICKET);
            string symbol = PositionGetString(POSITION_SYMBOL);
            double volume = PositionGetDouble(POSITION_VOLUME);
            
            // 如果当前订单手数大于需要平仓的手数,则平仓部分
            if(volume >= closeVolume)
            {
                trade.PositionClosePartial(ticket, closeVolume);
                break; // 只平仓一次
            }
            else
            {
                trade.PositionClose(ticket); // 如果单笔订单小于50%,则全平
                closeVolume -= volume;
            }
      }
    }
}

xinhua123 发表于 2025-8-26 04:28:21

学习源码
页: [1]
查看完整版本: MT5一次平仓总数量订单二分之一方法