Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Часто используемые и полезные функции:
Переработанная функция GetPositionPrice():
Эта функция показывает неверный результат, а точнее не тот, что хотелось бы. Стал разбираться, оказалось что не меняется Position ID при развороте (то есть при сделке in/out), как написано в документации:
https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties
Переворот позиции изменяет ее идентификатор на тикет ордера, в результате которого произошел переворот.
Ваша GetPositionPrice может мешать в кучу 2 и более разнонаправленных позиций, если имеется разворот, и вычисляет по ним среднюю цену. Практического смысла в такой средней цене позиции нет никакого.
Так все-таки меняется Position ID при развороте или нет?
А как по сделке in/out определить какой объем закрыл предыдующую позицию, а какой открыл новую?
Можно сравнить с текущим открытым. Но лучше исследовать историю позиции по id, который не меняется при перевороте... Объёмы buy/sell в помощь.
С недавних пор Position ID МЕНЯЕТСЯ при развороте. Документация по этому поводу уже обновлена....
POSITION_IDENTIFIER
Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.
Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.
Переворот позиции изменяет ее идентификатор на тикет ордера, в результате которого произошел переворот.
long
Можно сравнить с текущим открытым. Но лучше исследовать историю позиции по id, который не меняется при перевороте... Объёмы buy/sell в помощь.
Это вообще не вариант. Предыдущая позиция тоже может быть открыта вследствие разворота и т.д. Может и вариант, но явно не оптимальный.
С недавних пор Position ID МЕНЯЕТСЯ при развороте. Документация по этому поводу уже обновлена....
POSITION_IDENTIFIER
Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.
Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.
Переворот позиции изменяет ее идентификатор на тикет ордера, в результате которого произошел переворот.
long
Написано так, а на деле не меняется ничего.
Если угодно, мой код:
Где deal2_ticket - тикет сделки in/out, deal1_ticket - тикет, предшествующей сделке in/out, deal3_ticket - тикет после сделки in/out. Во всех трех случаях получаю один и тот же Position ID.
Написано так, а на деле не меняется ничего.
Если угодно, мой код:
Где deal2_ticket - тикет сделки in/out, deal1_ticket - тикет, предшествующей сделке in/out, deal3_ticket - тикет после сделки in/out. Во всех трех случаях получаю один и тот же Position ID.
А как по сделке in/out определить какой объем закрыл предыдующую позицию, а какой открыл новую?
Этот советник запустить в режиме "Отладка на истории" на неттинговом счёте. Пример немного грубый, так как он рассчитан, что в истории сделок есть только одна сделка типа "IN/OUT".
Сначала, после всех совершённый сделок и полного закрытия позиции, выводятся описания всех сделок (DEAL_POSITION_ID, DEAL_VOLUME, DEAL_ENTRY,DEAL_TYPE), при этом запоминается DEAL_POSITION_ID для сделки с типом IN/OUT.
Затем снова проход по истории и суммируется для сделок с DEAL_POSITION_ID все входы.
Получаем примерно такое:
У меня меняется. Попробуйте на самом последнем билде 1340.