Commission для открытой позиции

 

Здравствуйте, столкнулся с ситуацией, когда чтобы закрыть позицию с прибылью, я должен знать какую Commission берет брокер.

Однако 

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
//--- property POSITION_COMMISSION is deprecated
   SetUserError(ERR_FUNCTION_NOT_ALLOWED);
   return(0);
  }

не смотря на это в терминале каким то образом отображается Commission по открытой сделке

Как мне найти значение Commission пока не закрылось ни одной сделки?

 
Aleksander Gladkov:
Как мне найти значение Commission пока не закрылось ни одной сделки?
Посмотреть сумму комиссий всех сделок, принадлежащих одной позиции, комиссию которой нужно узнать.
 
Artyom Trishkin #:
Посмотреть сумму комиссий всех сделок, принадлежащих одной позиции, комиссию которой нужно узнать.

Так вот что по запросу комисии получается 0. Функция myPosition.Commission() заблокирована!

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
//--- property POSITION_COMMISSION is deprecated
   SetUserError(ERR_FUNCTION_NOT_ALLOWED);
   return(0);
  }
 
Нужно суммировать DEAL_COMMISSION по всем сделкам позиции.
 
Stanislav Korotky #:
Нужно суммировать DEAL_COMMISSION по всем сделкам позиции.
Позиция может быть частично закрыта.
 

Спасибо за помощь!

Получилось таким образом:

//+------------------------------------------------------------------+
//| по идентификатору сделки                                     |
//+------------------------------------------------------------------+
double get_commission(const long deal_id)
  { 
    return(HistoryDealGetDouble(deal_id, DEAL_COMMISSION));
  }
 
Aleksander Gladkov #:

Спасибо за помощь!

Получилось таким образом:

//+------------------------------------------------------------------+
//| по идентификатору сделки                                     |
//+------------------------------------------------------------------+
double get_commission(const long deal_id)
  { 
    return(HistoryDealGetDouble(deal_id, DEAL_COMMISSION));
  }
Сделок у позиции может быть много. Их нужно все суммировать. 
 
fxsaber #:
Позиция может быть частично закрыта.
Разве у частично закрытой позиции меняется POSITION_ID ?
 
Artyom Trishkin #:
Разве у частично закрытой позиции меняется POSITION_ID ?
Не меняется.
 

Обращаю внимание, что наличие функции Commission()

в классе CPositionInfo:

//+------------------------------------------------------------------+
//| Class CPositionInfo.                                             |
//| Appointment: Class for access to position info.                  |
//|              Derives from class CObject.                         |
//+------------------------------------------------------------------+
class CPositionInfo : public CObject
  {
protected:
   ENUM_POSITION_TYPE m_type;
   double            m_volume;
   double            m_price;
   double            m_stop_loss;
   double            m_take_profit;

public:

. . . .

   double            Commission(void) const;
. . . .

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
//--- property POSITION_COMMISSION is deprecated
   SetUserError(ERR_FUNCTION_NOT_ALLOWED);
   return(0);
  }


вводит в заблуждение, так как эта функция пустышка и всегда возвращает 0.

На мой взгляд ее стоит удалить из класса ведь строка кода, которая просится:

prof=m_position.Profit()+m_position.Swap()+m_position.Commission();

на самом деле не учитывает комиссию.