Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXVIII): Отложенные торговые запросы - закрытие, удаление, модификации"

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXVIII): Отложенные торговые запросы - закрытие, удаление, модификации:

Это третья статья о концепции отложенных запросов. В ней мы завершим тестирование работы с отложенными торговыми запросами - создадим методы для закрытия позиций, удаления отложенных ордеров и модификацию параметров позиций и отложенных ордеров.

Это третья статья о концепции отложенных запросов. В ней мы завершим тестирование предложенной концепции, создав методы работы с отложенными торговыми запросами для закрытия позиций, удаления ордеров и модификации стоп-приказов позиций и параметров отложенного ордера, которые возможно модифицировать.

Также мы немного дополним класс абстрактного ордера — по какой-то неведомой мне причине я упустил возврат значений двух свойств ордеров и позиций, а именно — тип заливки ордера и тип его экспирации. Вот их мы и добавим. Код всех торговых методов базового кроссплатформенного торгового объекта был немного оптимизирован — описывать подробно изменения мы тут не будем, ограничимся одним примером какого-нибудь из изменённых методов.

Автор: Artyom Trishkin

 

Привет, Артем, есть ли какая-то особая причина, по которой вы выделяете динамическую память под указатель для выполнения описанной ниже работы?

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq *req=new CPendingReq();
   if(req==NULL)
      return WRONG_VALUE;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   delete req;
   return index;
  }

По моему скромному мнению, использование обычной локальной переменной позволило бы упростить метод и избавиться от лишнего кода обработки указателей.

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq req;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   return index;
  }

Мне интересно понять, почему вы выбрали первый подход... может быть, я упускаю какую-то лучшую практику?

/dima

 
ddiall :

Привет, Артём, есть ли какая-то конкретная причина, по которой вы выделяете динамическую память указателю для выполнения работы, описанной ниже?

По моему скромному мнению, использование обычной локальной переменной позволило бы упростить метод и избавиться от лишнего кода обработки указателей выше.

Мне интересно понять, почему вы выбрали первый подход... может быть, я упускаю какую-то лучшую практику?

/dima

Метод Search() работает с указателем на объект:

 int Search(
   CObject*  element       // образец 
   ) const 
 
Artyom Trishkin:

Метод Search() работает с указателем на объект:

Ах да... но разве вы не можете вызвать метод и передать указатель локальной переменной?

int index=this.m_list_request.Search(GetPointer(req));
 
ddiall :

Ах да... но разве вы не можете вызвать метод и передать указатель локальной переменной?

Вы можете сделать это разными способами ... Я так и сделал... :)

 
Artyom Trishkin:

Вы можете сделать это разными способами... Я так делал... :)

Круто, спасибо - это было просто для подтверждения моего понимания, так как я все еще читаю статьи и изучаю код ;-)
 
ddiall:
Круто, спасибо - это было просто для подтверждения моего понимания, так как я все еще читаю статьи и изучаю код ;-)
ХОРОШО. Всегда пожалуйста :)
 
   CEventsCollection*GetObject(void)                                                                     { return &this;