PositionSelect код ошибка 4753 - страница 3

 

Просматривая данную тему у меня создалось впечатление, что мало кто может работать с ордерами, сделками и позициями в MQL5. Предлагаю решить данную проблему раз и навсегда. Прилагаемый мной исходник может открывать позиции, выполнять различные проверки и получать некоторые значения для торгового эксперта. Предлагаю всем доработать его. А именно добавить следующие функции:

public: // Функции которые вызываются сразу после того, как был выставлен ордер или открыта позиция
  // Тикет позиции
  long getPosition(){
    
    return 0;
  }
  
  // Тикет отложенного ордера
  long getOrder(){
    
    return 0;
  }
  
  // Тикет сделки
  long getDeal(){
    
    return 0;
  }
Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Файлы:
 
Mihail Matkovskij:

Просматривая данную тему у меня создалось впечатление, что мало кто может работать с ордерами, сделками и позициями в MQL5.

Михаил, если вы не можете, это не значит, что мало кто может. Скорее мало кто не может и один из них вы.

Дело в том, что всё что надо получить из свойств позиции, можно получить несколькими путями. Вы выбрали этот путь, в этом направлении я и давал рекомендации. А с fxsaber у нас было обсуждение разных подходов и не более того. И на основании этого обсуждения вы решили что ни он ни я не умеем работать с ордерами и позициями???

 
Alexey Viktorov:

Михаил, если вы не можете, это не значит, что мало кто может. Скорее мало кто не может и один из них вы.

Дело в том, что всё что надо получить из свойств позиции, можно получить несколькими путями. Вы выбрали этот путь, в этом направлении я и давал рекомендации. А с fxsaber у нас было обсуждение разных подходов и не более того. И на основании этого обсуждения вы решили что ни он ни я не умеем работать с ордерами и позициями???

Я сказал своё мнение которое у меня сформировалось после просмотра данной темы. Это всего лишь мое предположение. А вы, наверное, проводили статистику?


Так или иначе, правильный вариант решения этой проблемы должен быть в данной ветке!

 
Mihail Matkovskij:

Я сказал своё мнение которое у меня сформировалось после просмотра данной темы. Это всего лишь мое предположение. А вы, наверное, проводили статистику?


Так или иначе, правильный вариант решения этой проблемы должен быть в данной ветке!

А вам не кажется, что есть разные моменты, причины обращения к свойствам позиций? Не только ведь сразу после открытия. Соответственно решения будут разными. Даже сразу после открытия можно обратиться к свойствам позиции из обработчика событий

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
И можно так как вы решили. Получить тикет позиции тоже есть несколько способов. Эти способы и обсуждались тут. Я точно знаю, что fxsaber не сторонник работы с OnTradeTransection() и опять могут быть обсуждения. Хотя я уже не буду ввязываться. А в вашем представлении решение может быть только одно истинно верное, но это глубокое заблуждение.
 
Alexey Viktorov:

Проверьте.

В стандартной библиотеке есть

Если совпадает всё, то строка 45.

После открытия позиции запрашиваем .Request() и оттуда читаем тикет позиции.

Данный метод класса CTrade:

//+------------------------------------------------------------------+
//| Get the request structure                                        |
//+------------------------------------------------------------------+
void CTrade::Request(MqlTradeRequest &request) const
  {
   request.action      =m_request.action;
   request.magic       =m_request.magic;
   request.order       =m_request.order;
   request.symbol      =m_request.symbol;
   request.volume      =m_request.volume;
   request.price       =m_request.price;
   request.stoplimit   =m_request.stoplimit;
   request.sl          =m_request.sl;
   request.tp          =m_request.tp;
   request.deviation   =m_request.deviation;
   request.type        =m_request.type;
   request.type_filling=m_request.type_filling;
   request.type_time   =m_request.type_time;
   request.expiration  =m_request.expiration;
   request.comment     =m_request.comment;
   request.position    =m_request.position;
   request.position_by =m_request.position_by;
  }

Всего лишь заполняет запрос, очевидно перед выполнением очередной торговой операции, но никак не возвращает позицию. Очевидно, Алексей, вы тоже не знаете, как правильно получить тикет позиции после ее открытия.

 
Mihail Matkovskij:


Сначала четко, до винтика, сформулируйте задачу, а потом уже нападайте на людей.

 
Alexey Viktorov:

А вам не кажется, что есть разные моменты, причины обращения к свойствам позиций? Не только ведь сразу после открытия. Соответственно решения будут разными. Даже сразу после открытия можно обратиться к свойствам позиции из обработчика событий

И можно так как вы решили. Получить тикет позиции тоже есть несколько способов. Эти способы и обсуждались тут. Я точно знаю, что fxsaber не сторонник работы с OnTradeTransection() и опять могут быть обсуждения. Хотя я уже не буду ввязываться. А в вашем представлении решение может быть только одно истинно верное, но это глубокое заблуждение.

На счёт OnTradeTransaction не думал. Меня интересует максимально простой способ, как в MQL4.

 
Vladimir Karputov:

Сначала четко, до винтика, сформулируйте задачу, а потом уже нападайте на людей.

Задача состоит в том, чтобы после открытия позиции получить её тикет https://www.mql5.com/ru/forum/35904#comment_12373900. Никто не нападает. Наоборот, предлагаю всем решить данную задачу. Даже исходник прикрепил. Потом можно выложить в Кодобазу.

PositionSelect код ошибка 4753
PositionSelect код ошибка 4753
  • 2014.09.03
  • www.mql5.com
Если такая есть ждем закрытие второй позиции.
 

Изменил немного свой исходник. Сделал, как в CTrade из стандартной библиотеки. Осталось доработать getPosition.

public: // Функции которые вызываются сразу после того, как был выставлен ордер или открыта позиция
  // Тикет позиции
  ulong getPosition(){
    return 0;
  }
  
  // Тикет отложенного ордера
  ulong getOrder(){
    return result.order;
  }
  
  // Тикет сделки
  ulong getDeal(){
    return result.deal;
  }


 

Файлы:
 
Mihail Matkovskij:

Данный метод класса CTrade:

Всего лишь заполняет запрос, очевидно перед выполнением очередной торговой операции, но никак не возвращает позицию. Очевидно, Алексей, вы тоже не знаете, как правильно получить тикет позиции после ее открытия.

Ну и ладно. Значит я не зная, случайно получаю.


Причина обращения: