Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 897

 
Açık görünüyor, muhtemelen öyle. Tekrar teşekkürler!
 
Alexey Viktorov :
Yapabilir.

Ancak?

 
Andy :

Ancak?

Barabashka zaten her şeyi anlattı.

 
Alexey Kozitsyn :

Konum kimliği değişmeyecek. Üzerinde anlaşmalar arayın.

Teşekkür ederim. Takas işleminden sonra işlev, amaçlandığı gibi işlemlerin ortalama fiyatını değil, yeniden açılan pozisyonun fiyatını döndürür. Hata nerede, lütfen söyleyin.

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 :

Teşekkür ederim. Takas işleminden sonra işlev, amaçlandığı gibi işlemlerin ortalama fiyatını değil, yeniden açılan pozisyonun fiyatını döndürür. Hata nerede, lütfen söyleyin.

Bir pozisyonla çalışıyorsanız - bir pozisyonla çalışın. Bir anlaşma ile çalışıyorsanız, bir anlaşma ile çalışın. İşlem, pozisyon fiyatını değil işlem fiyatını gösterir.

 
Alexey Kozitsyn :

Bir pozisyonla çalışıyorsanız - bir pozisyonla çalışın. Bir anlaşma ile çalışıyorsanız, bir anlaşma ile çalışın. İşlem, pozisyon fiyatını değil işlem fiyatını gösterir.

Pozisyonun açılmasıyla ilgili işlemleri ben seçmedim mi?

 
Sile Si :

Pozisyonun açılmasıyla ilgili işlemleri ben seçmedim mi?

Algoritma basittir: pozisyon kimliğine göre bir pozisyon seçin - tüm işlemleri. Yalnızca pozisyonun hacmini oluşturan işlemlerde çalışmayı seçin, yani. takas işlemlerini hariç tutun.

Bir pozisyon seçtiğinizde, fırsatları alırsınız ve ardından fırsatlardan POZİSYON fiyatını istersiniz! Ve her bir özel işlemin fiyatına ihtiyacınız var.

 
Alexey Kozitsyn :

Ve her bir özel işlemin fiyatına ihtiyacınız var.

Üzgünüm, pozisyon yerine nasıl anlaşma seçeceğimi anlamıyorum, göster bana)

 
Sile Si :

Üzgünüm, pozisyon yerine nasıl anlaşma seçeceğimi anlamıyorum, göster bana)

 ulong dt = HistoryDealGetTicket (i);
 
Alexey Kozitsyn :

Evet, yaptığım şey bu

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

sonra anlaşma kimliğini pozisyon biletiyle karşılaştırırım ve bir anlaşma seçtiğimi düşünüyorum,

ancak pozisyonun fiyatını döndürür. Niye ya?