初学者的问题 MQL5 MT5 MetaTrader 5 - 页 897

 
似乎很清楚,我想是这样的。再次感谢!
 
Alexey Viktorov:
你可以。

如何?

 
Andy:

如何?

这个小家伙已经告诉了我一切。

 
Alexey Kozitsyn:

位置标识符将不会改变。用它来搜索交易。

谢谢你。在清算后,该函数并没有按照预期返回交易的平均价格,而是返回重新开仓 的价格。错误在哪里,请告诉我。

double Aver_Pr_sell_nett()
  {
   double total_price_multiply_volume_sell   = 0.0;
   double total_volume_sell                  = 0.0;
   double net_price_sell_=0.0;
   string symb=_Symbol;
   int    total       =0;  // 

   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         //--- Получим количество сделок в полученном списке
         total=HistoryDealsTotal();
         //--- Пройдем по всем сделкам в полученном списке
         for(int i=0; i<total; i++)
           {
            ulong dt = HistoryDealGetTicket(i);
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
            if(did==pt && in_out==DEAL_ENTRY_IN)
              {
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  total_price_multiply_volume_sell+=PositionGetDouble(POSITION_PRICE_OPEN)*PositionGetDouble(POSITION_VOLUME);
                  total_volume_sell+=PositionGetDouble(POSITION_VOLUME);
                  if(total_price_multiply_volume_sell!=0 && total_volume_sell!=0)
                    {
                     net_price_sell_=total_price_multiply_volume_sell/total_volume_sell;
                     
                    };
                 }
              }
           }
        }
     }
//---
   return(net_price_sell_);
  }
 
Sile Si:

谢谢你。在清算后,该函数并没有按照预期返回交易的平均价格,而是返回重新开仓 的价格。错误在哪里,请告诉我。

如果你在与一个职位合作,就与该职位一起工作。如果你在做交易,就在交易上下功夫。交易是交易的价格,而不是职位的价格。

 
Alexey Kozitsyn:

如果你是与一个职位一起工作,就与一个职位一起工作。如果你在做交易,就在交易上下功夫。交易显示的是交易的价格,而不是仓位的价格。

我不是选择了开仓时 涉及的交易吗?

 
Sile Si:

我不是选择了开仓时 涉及的交易吗?

该算法很简单:你选择一个头寸,通过头寸ID,选择它的所有交易。你只选择那些构成头寸数量的交易进行工作,也就是说,你排除了清算的交易。

在选择了一个位置后,你会收到它的交易,然后你会要求一个位置的价格!而且你需要每个具体交易的价格。

 
Alexey Kozitsyn:

而且你需要每个具体交易的价格。

对不起,我不明白如何选择交易而不是仓位,请告诉我)

 
Sile Si:

对不起,我不明白如何选择交易而不是仓位,请告诉我)

ulong dt = HistoryDealGetTicket(i);
 
Alexey Kozitsyn:

好吧,这就是我所做的。

ulong dt = HistoryDealGetTicket(i);
long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);

然后我将交易ID与头寸代码进行比较,我想我已经选择了交易。

但它返回的是仓位的价格。为什么?