如何获得第N个未平仓头寸MQL4 / MT4的利润?

问题描述

我想创建一个可以获取随机获利头寸的函数
例如:

  • 获利前2个总总持仓的未结头寸

  • 前3个未平仓头寸的总获利总额

下面的功能似乎只获得了第一个未平仓头寸利润:

double BuyProfit()
{
   Price = 0;
   datetime EarliestOrder = TimeCurrent();

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            if(EarliestOrder > OrderOpenTime())
            {
               EarliestOrder = OrderOpenTime();
               Price = OrderProfit()+OrderSwap()+OrderCommission();
            }
         }
      }
   }
   return Price;
}

解决方法

Q “如何获得第N个未平仓头寸MQL4 / MT4的利润?
我想创建一个可以随机获得利润未平仓头寸的函数。

您可以使用此快速原型来完成实际的逻辑代码:

double nthNetPROFIT( const int Nth ) {
       
       if ( Nth > OrdersTotal() ) return( EMPTY );
       
       int    softCount    = 0;
       double nthNetProfit = EMPTY;,for( int ii = 0; ii < OrdersTotal(); ii++ ) {
            if (        OrderSelect( ii,SELECT_BY_POS ) ) {
                  if (  OrderType()        == OP_BUY          // DEPENDS ON ACTUAL LOGIC
                     && OrderSymbol()      == Symbol()        // DEPENDS ON ACTUAL LOGIC
                     && OrderMagicNumber() == MagicNumber     // DEPENDS ON ACTUAL LOGIC
                        ) {
                        ...                                   // DEPENDS ON ACTUAL LOGIC
                        if ( ++softCount == Nth ){
                        nthNetProfit = OrderProfit()
                                     + OrderSwap()
                                     + OrderCommission();
                        break;
                  }
            }
       }
       return( NormalizeDouble( nthNetProfit,2 ) );
}