Не плохо было бы ввести структуру состояния заполняемую событием Trade - страница 2

 
Serj_Che:

Насколько я понял, терминал отправляет заявку на торговую операцию - сервер (ДЦ) отвечает что заявка принята или отклонена по какой то причине.

Но это не значит, что позиция откроется.

Как узнать что позиция открылась или нет, каким объемом, по какой цене.  Сколько нужно ждать чтобы получить результат.

А если мультивалютный эксперт. 

 на данный момент, для этого можно использовать ряд функций
bool  PositionSelect(
   string  symbol     // имя инструмента
   );

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY  property_id      // идентификатор свойства
   );
 
long  PositionGetInteger(
   ENUM_POSITION_PROPERTY  property_id      // идентификатор свойства
   );

string  PositionGetString(
   ENUM_POSITION_PROPERTY  property_id      // идентификатор свойства
   );
 

 
Interesting:
А результирующая структура зачем? Для того чтобы понять отклонен твой ордер или пощиция при установке OnTrade() не нужен. Вот когда идет срабатывание ордера или закрытие позы то да, OnTrade() это то что доктор прописал...

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

Вот когда заявка срабатывает или не срабатывает, на весь запрошенный объем или часть,  тогда вызывается OnTrade().

Или я не правильно понял.  

 
sergey1294:
 на данный момент, для этого можно использовать ряд функций

Эти функции для уже открытых позиций.

А если не открылась как узнать почему.

И зачем городить огороды кому нужны эти индикаторы, ООП, тестеры, если нет четкой работы с заявками, ордерами и позициями.

 
Serj_Che:

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

Вот когда заявка срабатывает или не срабатывает, на весь запрошенный объем или часть,  тогда вызывается OnTrade().

Или я не правильно понял.  

struct MqlTradeResult
  {
   uint     retcode;       // Код результата операции
   ulong    deal;             // Тикет сделки, если она совершена
   ulong    order;            // Тикет ордера, если он выставлен
   double   volume;           // Объем сделки, подтверждённый брокером
   double   price;            // Цена в сделке, подтверждённая брокером
   double   bid;              // Текущая рыночная цена предложения (цены реквота)
   double   ask;              // Текущая рыночная цена спроса (цены реквота)
   string   comment;          // Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
  };
Что еще не понятно?
 
papaklass:

 

При срабатывание стопа, уменьшается совокупная позиция по инструменту. Произошло событие onTrade(), проверьте совокупный объем позы и изменение баланса. Такая проверка должна дать ответ на вопрос: что произошло?

с чего это вы взяли что она уменьшается, при срабатывании стоплосса или тейкпрофита позиция закрывается встречной с таким же объемом.
 
papaklass:

 

При срабатывание стопа, уменьшается совокупная позиция по инструменту. Произошло событие onTrade(), проверьте совокупный объем позы и изменение баланса. Такая проверка должна дать ответ на вопрос: что произошло?

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

Придерживаюсь теории что стоп-лосс должен порождать сделку в обратном направлении. Нам нужно найти эту новую сделку и посмотреть к какому ордеру она принадлежит. По логике, она должна принадлежать к ордеру который инициировал вход в рынок

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
C-4:

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

Придерживаюсь теории что стоп-лосс должен порождать сделку в обратном направлении. Нам нужно найти эту новую сделку и посмотреть к какому ордеру она принадлежит. По логике, она должна принадлежать к ордеру который инициировал вход в рынок

почитайте эти статьи, возможно они вам помогут в реализации вашей задачи

Использование ORDER_MAGIC для торговли разными экспертами на одном инструменте

Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5

 
Дела оказались хуже чем я предполагал. Стоп-лоссы и тейк-профиты инициируются специальными ордерами. Эти ордера ни как не относятся к ордерам истории. Что удивительно, так это то, что их magic номер всегда равен нулю!!! Т.е. понять, что сработал стоп-лосс из эксперта просто не возможно, можно только анализировать изменение совокупной позиции. В понедельник буду долбить службу тех.по. Такого маразма я не видел еще не разу.
 

А вот кстати цитата из статьи "Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5"

Использование "виртуальных" открытых и отложенных ордеров, а также Take Profit и Stop Loss ордеров. Понятие "виртуальность" означает, что их статус поддерживается на уровне клиентского терминала, независимо от позиции на сервере. Эти ордера изображаются на графике горизонтальными линиями, подобно открытым позициям.
Для защиты от сбоев компьютера или потери соединения, стопы на сервере устанавливаются значительно дальше виртуальных стопов.

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

Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5
Virtual Order Manager для управления ордерами в позициях терминала MetaTrader 5
  • 2010.05.14
  • Paul
  • www.mql5.com
Эта библиотека классов может быть добавлена в советники, написанные для MetaTrader 5, чтобы они могли работать с ордерами в рамках подхода, реализованного в MetaTrader 4, а не в рамках позиционно-ориентированного подхода платформы MetaTrader 5. Это достигается путем отслеживания "виртуальных" ордеров в терминале MetaTrader 5, поддержки стопов, невидимых для брокера, и установкой дальних защитных реальных стопов на торговом сервере.
 
C-4:
Дела оказались хуже чем я предполагал. Стоп-лоссы и тейк-профиты инициируются специальными ордерами. Эти ордера ни как не относятся к ордерам истории. Что удивительно, так это то, что их magic номер всегда равен нулю!!! Т.е. понять, что сработал стоп-лосс из эксперта просто не возможно, можно только анализировать изменение совокупной позиции. В понедельник буду долбить службу тех.по. Такого маразма я не видел еще не разу.

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



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