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

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXIV): Основной торговый класс - автоматическая коррекция ошибочных параметров:

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

Вообще, советник должен уметь действовать по обстоятельствам и по заранее определённой пользователем логике обработки ошибок в торговых приказах. Таким образом, можно дать советнику в настройках указание на действия при ошибках в торговых приказах:

  1. При обнаружении ошибки в торговом приказе, просто выйти из торгового метода, предоставив пользователю самому создать обработчик неверных параметров ошибочного приказа.
  2. Определив возможность исправления некорректного значения в торговом приказе, сразу же исправить значения и отослать корректный торговый приказ,
  3. Либо, если того требует ситуация и суть полученной ошибки — повторить заново торговый запрос после паузы, либо просто повторить запрос с теми же параметрами.

При обработке ошибки в параметрах торгового приказа вероятны несколько исходов:

  • Невозможность продолжения торговли экспертом до исправления пользователем причины ошибок.
  • Невозможность отсылки торгового приказа — выход из торгового метода.
  • Корректировка неверных значений и отсылка исправленного торгового приказа.
  • Немедленная отсылка торгового приказа с изначальными параметрами (с предположением, что торговые условия улучшились).
  • Ожидание, обновление котировочных данных и отсылка торгового приказа с изначальными параметрами.

Сегодня создадим обработчик ошибок в торговых приказах, который будет соответствовать перечисленному функционалу, а именно — будет проверяться ошибка и её причина, и возвращаться метод обработки ошибки:

  • запрет на проведение торговых операций,
  • прерывание торговой операции,
  • корректировка ошибочных параметров,
  • торговый запрос с изначальными параметрами,
  • торговый запрос после ожидания (временное решение),
  • создание отложенного торгового запроса (в последующих статьях)

Автор: Artyom Trishkin

 
Подскажите, как получить информацию об убыточном ордере? Например, сумма убытка, номер ордера, количество ордеров, время открытия и т.д.. Спасибо!
 
hsyhsy863 :
Подскажите, как получить информацию об убыточном ордере? Например, сумма убытка, номер ордера, количество ордеров, время открытия и т.д.. Спасибо!
Здесь вы можете задать свои вопросы.
 
Artyom Trishkin:
Здесь вы можете задать свои вопросы.
У меня такой вопрос: при разработке программы автоматической торговли с использованием вашей программы, мне нужно закрыть убыточный ордер, как я могу получить номер ордера убыточного ордера?
 
hsyhsy863 :
У меня такой вопрос: при разработке программы автоматической торговли с использованием вашей программы, мне нужно закрыть проигрышный ордер, как мне получить номер ордера проигрышного ордера?

В советнике.

//--- Получите список всех открытых вакансий
   CArrayObj* list=engine.GetListMarketPosition();
//--- Сортировка списка по прибыли с учетом комиссии и свопа
   list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- Получите индекс позиции с наименьшей прибылью (наибольшим убытком)
   int index=CSelect::FindOrderMin(list,ORDER_PROP_PROFIT_FULL);
   if(index>WRONG_VALUE)
     {
      //--- Получаем объект позиции с наибольшим убытком и закрываем позицию по тикету
      COrder* position=list.At(index);
      if(position!=NULL)
         engine.ClosePosition(position.Ticket());
     }

Библиотека должна быть подключена в соответствии с примером эксперта, приложенным к этой статье.

 
Artyom Trishkin:

В советнике.

Библиотека должна быть подключена в соответствии с примером эксперта, приложенным к этой статье.

Библиотека должна быть подключена в соответствии с примером эксперта, приложенным к этой статье!
 
Здравствуйте, при разработке автотрейдинга я обнаружил, что при одновременном выставлении OP_BUYSTOP и OP_SELLSTOP, выставляется только OP_SELLSTOP, но не OP_BUYSTOP. Заявление полностью соответствует условиям отложенного ордера, но оно не может быть отложенным.
 
hsyhsy863 :
Здравствуйте, при разработке автотрейдинга я обнаружил, что при одновременном выставлении OP_BUYSTOP и OP_SELLSTOP выставляется только OP_SELLSTOP, но не OP_BUYSTOP. Заявление полностью удовлетворяет условиям для отложенных ордеров, но ордера не могут быть отложенными.
Приведите пример, воспроизводящий эту ошибку.
 
Artyom Trishkin:
Приведите пример, воспроизводящий эту ошибку.
if(datetimeN5!=iTime(NULL,0,0))
if(datetimeN5!=iTime(NULL,0,0))
if(ASWER(Close Position, "Upper Pending Bid")==0) { if(datetimeN5!=iTime(NULL,0,0))
{
Pending Buy(0.382,Closed); {
datetimeN5 = iTime(NULL, 0, 0);
}}
if(datetimeN6!=iTime(NULL,0,0))
{
if(ASWER(Close Position, "Down Pending Sell Count") == 0)
{
Pending Sell(0.382,Close Position);
datetimeN6 = iTime(NULL, 0, 0);

}}

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

 
Извините, проблема решена, моя ошибка!!!!
 
hsyhsy863:
Извините, проблема решена, моя ошибка!!!!
OK