Вопрос 1.
В документации <https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties> написано следующее:
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций OrderGet...() и HistoryOrderGet...().
Также в документации <https://www.mql5.com/ru/docs/trading/historyordergetinteger> сказано:
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала.
В
каком случае следует использовать OrderGet...() и в каком HistoryOrderGet...()?
Эти функции следует использовать при работе с отложниками (pending orders): OrderGetTicket, OrderSelect, OrderGetDouble, OrderGetInteger, OrderGetString;
Эти функции следует использовать при работе с ордерами попавшими в историю торгов (например удаленные ордера): HistoryOrderGetTicket, HistoryOrderGetDouble, HistoryOrderGetInteger, HistoryOrderGetString.
Вопрос 2.
Функция OrderSelect выбирает ордер для дальнейшей работы с ним.
...
Функция OrderSelect() копирует данные об ордере в программное окружение, и последующие вызовы OrderGetDouble(), OrderGetInteger(), OrderGetString()возвращают ранее скопированные данные. Это означает, что самого ордера может уже и не быть (или же в нем изменились цена открытия, уровни Stop Loss / Take Profit или момент истечения), а данные этому ордеру можно еще получать. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderSelect() непосредственно перед обращением за ними.
Функция OrderSelect() используется только для отложенных ордеров?
Что произойдёт, если выбрать выполненный ордер? Такая ситуация вполне возможна, что между вызовами ордер отработал и стал отложенным.
Эти функции следует использовать для выбора отложников: OrdersTotal, OrderSelect.
Такая ситуация конечно возможна, но в большинстве случаев между выбором объектов и запросом его свойств пройдет очень мало времени, т.е. как я понимаю если OrderSelect выбрал ордер то есть все шансы получить инфу по нему.
PS
Общая идея следующая - OrdersXXX предназначены для работы с отложенными ордерами, а HistoryOrderXXX - с ордерами находящимися в "истории торгов".
Вопрос 5.
На что
влияют свойства ордеров ORDER_SL и ORDER_TP? Они изменяют свойства POSITION_SL
и POSITION_TP соответствующей
позиции при срабатывании ордера или если создают позицию?
Насколько помню уровни SL и TP ордера при срабатывании автоматически передаются открытой позиции (если позиция была открыта до этого то изменятся те что были указаны в ней).
Также позиция "позаимствует" и комментарий у последнего сработавшего по инструменту ордера.
Вопрос 6.
В документации <https://www.mql5.com/ru/docs/trading/historyselect> сказано следующее:
Функция HistorySelect запрашивает историю сделок и ордеров за указанный период серверного времени.
И в <https://www.mql5.com/ru/docs/trading/historyorderselect> следующее:
Функция HistoryOrderSelect выбирает в истории ордер для последующих обращений к нему через соответствующие функции.
Как поведёт себя функция HistoryOrderSelect, если указать тикет ордера выходящего за рамки, установленные в HistorySelect?
Если функция не найдет (по каким-то причинам) в истории указанный титке она вернет false.
PS
Об этом прямо говориться в справке по функции.
Возвращаемое значение
Возвращает true в случае успеха, иначе false.
Примечание
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала.
Вопрос 8.
Что означает
свойство POSITION_PRICE_OPEN? Это цена по которой была открыта позиция или это цена последней сделки, которая изменила позицию?
Это цена открытия позиций, с учетом последней сделки по символу.
Таким образом в серии сделок это будет усредненная цена по всем сделкам.
Вопрос 9.
Зачем свойство ORDER_TYPE_TIME, когда имеется свойство ORDER_TIME_EXPIRATION? Как они связаны между собой?
ORDER_TIME_EXPIRATION имеет более высокий приоритет и больший вес.
ORDER_TYPE_TIME имеет актуальность только если в ORDER_TIME_EXPIRATION прямо указано ORDER_TIME_SPECIFIED (хотя нужно уточнить у разработчиков на счет вариантов когда ORDER_TYPE_TIME меньше времени завершения текущего торгового дня).
Идентификатор |
Описание |
ORDER_TIME_GTC |
Ордер будет находится в очереди до тех пор, пока не будет снят |
ORDER_TIME_DAY |
Ордер будет действовать только в течении текущего торгового дня |
ORDER_TIME_SPECIFIED |
Ордер будет действовать до даты истечения |
Вопрос 10.
Может ли быть отложенный ордер без позиции?
Вопрос 11.
Отложенный ордер может и не породить сделки (например, его удалят). Попадёт ли он тогда в историю?
Догадываюсь, что ответ: да. Его состояние может быть, например, ORDER_STATE_CANCELED или ORDER_STATE_EXPIRED. Так?
10. Конечно может. Исполнится он или будет отменен это уже другой вопрос.
11. Любой отмененый ордер попадет в историю, при этом у него изменится комментарий на соответствующий (насколько я помню).
По поводу статуса, скорей всего так:
Каждый ордер имеет статус, описывающий его состояние. Для получения информации используйте функцию OrderGetInteger() или HistoryOrderGetInteger() с модификатором ORDER_STATE. Допустимые значения хранятся в перечислении ENUM_ORDER_STATE.
Идентификатор |
Описание |
ORDER_STATE_STARTED |
Ордер проверен на корректность, но еще не принят брокером |
ORDER_STATE_PLACED |
Ордер принят |
ORDER_STATE_CANCELED |
Ордер снят клиентом |
ORDER_STATE_PARTIAL |
Ордер выполнен частично |
ORDER_STATE_FILLED |
Ордер выполнен полностью |
ORDER_STATE_REJECTED |
Ордер отклонен |
ORDER_STATE_EXPIRED |
Ордер снят по истечении срока его действия |
Вопрос 7.
Не совсем понятны свойства SYMBOL_LASTHIGH и SYMBOL_LASTLOW. Что они обозначают? Последняя сделка всегда одна. Если операция совершалась по разным ценам согласно ORDER_TYPE_FILLING, то наибольшая цена это и есть SYMBOL_LASTHIGH, а наименьшая SYMBOL_LASTLOW?
MT5 это терминал заточенный под фондовые рынки, об этом не стоит забывать.
На Forex по большому счету (как многим это известно) существует две цены - Ask и Bid (формируемые спросом и предложением и разделяемые спредом, верней чтобы точней выразиться - формирующие спред).
На фондовом рынке к этим двум ценам, привычных и понятных для каждого трейдера, добавляется еще одна цена - Last (Цена, по которой совершена последняя сделка. Не Вами лично, а вообще по рынку!).
Таким образом на реальной бирже можно отследить не только Ask и Bid, но и узнать по какой цене была совершена последняя сделка, скажем по акциям IBM.
Прикольно было бы еще узнать объем этой сделки и направление :) , но увы...
Частота изменения и диапазон хода цены Last кстати тоже о многом говорит. Но это я так, к слову.
Так вот HIGH и LOW показывают максимальные и минимальные уровни этих цен за период (за сутки или сессию, тут нужно уточнить).
SYMBOL_BID |
double |
|
SYMBOL_BIDHIGH |
Максимальный Bid за день |
double |
SYMBOL_BIDLOW |
Минимальный Bid за день |
double |
SYMBOL_ASK |
Ask - лучшее предложение на покупку |
double |
SYMBOL_ASKHIGH |
Максимальный Ask за день |
double |
SYMBOL_ASKLOW |
Минимальный Ask за день |
double |
SYMBOL_LAST |
Цена, по которой совершена последняя сделка |
double |
SYMBOL_LASTHIGH |
Максимальный Last за день |
double |
SYMBOL_LASTLOW |
Минимальный Last за день |
double |
PS
Не знаю как у MQ, но на Alpari по пятницам можно наблюдать не хилый "отрыв" ласта от закрытия по Ask и Bid (обычно)...
Вопрос 4.
В <https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties> написано:
Свойство ORDER_VOLUME_CURRENT означает невыполненный объем.
Не логично было бы обозначить через ORDER_VOLUME_CURRENT выполненный объём?
Не логично. Возвращать не выполненный объем куда логичнее.
Если Вы опять таки торгуете не Forex этот объем Вам будет до лампочки (скорей всего он никогда и не понадобится).
Другое дело фондовый рынок, представьте что условно треба купить скажем 10000 акций IBM, а по заявке вам продали всего 3000.
Вопрос что проще, получить 3000 уже купленных, вспомнить что было 10000, сделать вывод о покупке еще 7000, или сразу получить 7000?
Interesting:
Огромное спасибо за разъяснения (в этой и другой темах)!
Теперь попробую подвести для себя итог.
Вопрос 1. Вопрос 2.
Функции OrderGet* следует использовать с отложенными ордерами, а HistoryOrder*() с отработанными.
Вопрос 3.
Пока без ответа.
Вопрос 4.
Не логично. Возвращать не выполненный объем куда логичнее.
Тогда слово CURRENT вводит в заблуждение и лучше его переименовать, а вопрос можно считать закрытым.
Вопрос 5.
Насколько помню уровни SL и TP ордера при срабатывании автоматически передаются открытой позиции (если позиция была открыта до этого то изменятся те что были указаны в ней).
Также позиция "позаимствует" и комментарий у последнего сработавшего по инструменту ордера.
Вопрос 6.
Если функция не найдет (по каким-то причинам) в истории указанный титке она вернет false.
Хорошая формулировка.
Об этом прямо говориться в справке по функции.
Возвращаемое значение
Возвращает true в случае успеха, иначе false.
Примечание
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала.
В справке "Возвращает true в случае успеха, иначе false" - дежурная фраза. А вот явно указать такой момент не помешало бы, как и рассматривать или оговаривать различные ситуации, которые могут привести к вопросам или неясностям.
Вопрос 7.
На фондовом рынке к этим двум ценам, привычных и понятных для каждого трейдера, добавляется еще одна цена - Last (Цена, по которой совершена последняя сделка. Не Вами лично, а вообще по рынку!).
Таким образом на реальной бирже можно отследить не только Ask и Bid, но и узнать по какой цене была совершена последняя сделка, скажем по акциям IBM.
Наверное, это пробелы в моём образовании. Но опять же в документации было бы не лишним (если описываются Ask и Bid).
Частота изменения и диапазон хода цены Last кстати тоже о многом говорит. Но это я так, к слову.
А можно привести пример, чем всё-таки она интересна? Прошу прощения за любопытство. Но на у ничего не идёт, чем бы она могла быть полезной.
Вопрос 8.
Это цена открытия позиций, с учетом последней сделки по символу.
Таким образом в серии сделок это будет усредненная цена по всем сделкам.
Не знал. Спасибо.
Вопрос 9.
ORDER_TIME_EXPIRATION имеет более высокий приоритет и больший вес.
ORDER_TYPE_TIME имеет актуальность только если в ORDER_TIME_EXPIRATION прямо указано ORDER_TIME_SPECIFIED (хотя нужно уточнить у разработчиков на счет вариантов когда ORDER_TYPE_TIME меньше времени завершения текущего торгового дня).
Идентификатор |
Описание |
ORDER_TIME_GTC |
Ордер будет находится в очереди до тех пор, пока не будет снят |
ORDER_TIME_DAY |
Ордер будет действовать только в течении текущего торгового дня |
ORDER_TIME_SPECIFIED |
Ордер будет действовать до даты истечения |
По логике мне кажется подходит другой вариант: вес ORDER_TYPE_TIME больше, чем у ORDER_TIME_EXPIRATION.
а) иначе непонятно, когда использовать ORDER_TYPE_TIME? При каком значении ORDER_TIME_EXPIRATION?
б) если выставлено ORDER_TYPE_TIME=ORDER_TIME_SPECIFIED, то тогда используется ORDER_TIME_EXPIRATION. Если ORDER_TYPE_TIME=ORDER_TIME_DAY, то время жизни ордера жёстко определено. Если ORDER_TYPE_TIME=ORDER_TIME_GTC, то не важно, что в ORDER_TIME_EXPIRATION, но тогда не ясно, зачем этот вариант нужен?!
Вопрос 10.
10. Конечно может. Исполнится он или будет отменен это уже другой вопрос.
Согласен. Значение в поле ORDER_POSITION_ID имеет смысл, если ордер был выполнен. А если не выполнен, то здесь будет мусор или другое значение, которое не следует использовать.
Вопрос 11.
11. Любой отмененый ордер попадет в историю, при этом у него изменится комментарий на соответствующий (насколько я помню).
Получается, что абсолютно любой ордер попадёт в историю, но статус его может быть различным. Так?
А есть описание того, как изменяются комментарии? Может разработчики поделятся информацией?
Вопрос 12.
Зачем нужно свойство SYMBOL_TRADE_TICK_VALUE, когда оно дублирует SYMBOL_TRADE_TICK_VALUE_PROFIT?
- www.mql5.com
Давайте разбираться по порядку, так проще будет.
Вопрос 4.
Тогда слово CURRENT вводит в заблуждение и лучше его переименовать, а вопрос можно считать закрытым.
Тут весь вопрос в переводе и том что по сути понимается под свойством. Также следует учесть, что разработчикам необходимо получить наибольшую информационную ценность для я большого числа людей читающих исходные коды (человек не должен каждые 10 минут заглядывать в справку, а читать код максимально интуитивно).
В данных блоке свойств существует два свойства связанные с объемом ордера
Идентификатор |
Описание |
Тип |
ORDER_VOLUME_INITIAL |
Первоначальный объем при постановке ордера |
double |
ORDER_VOLUME_CURRENT |
Невыполненный объем |
double |
С ORDER_VOLUME_INITIAL все понятно, ORDER - Ордер, VOLUME - Объем, INITIAL - Скорей всего сокращение от инициализации.
Весь вопрос как перевести CURRENT. На мой взгляд больше всего подходит вариант "Текущий".
Разумно предположить что с точки зрения сервера (читай разработчиков) тот объем который не был исполнен сервером (по каким-то причинам ) может стать объемом "новой" заявки, следовательно обозвать его "текущим" вполне уместно.
PS
Переименовать конечно можно например обозвать его как "Remaining" или как "Unfulfilled", только "Current" проще и короче. В некоторых случаях это имеет приоритет.
Вопрос 7.
На фондовом рынке к этим двум ценам, привычных и понятных для каждого трейдера, добавляется еще одна цена - Last (Цена, по которой совершена последняя сделка. Не Вами лично, а вообще по рынку!).
Таким образом на реальной бирже можно отследить не только Ask и Bid, но и узнать по какой цене была совершена последняя сделка, скажем по акциям IBM.
Наверное, это пробелы в моём образовании. Но опять же в документации было бы не лишним (если описываются Ask и Bid).
Частота изменения и диапазон хода цены Last кстати тоже о многом говорит. Но это я так, к слову.
А можно привести пример, чем всё-таки она интересна? Прошу прощения за любопытство. Но на у ничего не идёт, чем бы она могла быть полезной.
1.
Я тоже узнал о Last не из справки, однажды в пятницу сильно возмущался о наличии "какого-то ласта" по Ере, да еще порядочно отличающегося от привычных мне Ask и Bid.
Нашлись добрые люди и объяснили что к чему. С тех пор я еще много чего узнал о фондовом рынке, и тем более хоть как-то "потрогать руками".
я сомневаюсь, что на рынке Forex эта цена такая уж актуальная (и что-то даст), хотя в рамках конкретного ДЦ или брокера вполне может быть дополнительным сигналом.
2.
Last - цена последней сделки по инструменту в рамках определенного рынка или его сегмента (Пусть это будет ДЦ, Банк, Биржа или иной подобный финансовый центр).
Как мы можем воспользоваться этой ценой? Есть несколько вариантов (как мне представляется):
а) просто узнать последнюю цену и на основании этой информации сделать выводы (возможно соотнеся Last с текущей ценой);
б) определить диапазон в котором совершаются торговые операции и на этом основании сделать выводы о происходящем на рынке;
в) Использовать динамику изменения Last с объемами и спредами (по возможности еще и с временем публикации экономических событий);
г) еще как-то использовать эту цену.
PS
Если кратко, то согласно этой идеи цена Last может стать дополнительным индикатором настроений определенной группы трейдеров (в зависимости кто является "маркетмейкером" этой цены).
Также эта цена может сигнализировать об определенных процессах на рынке.
Вопрос 9.
По логике мне кажется подходит другой вариант: вес ORDER_TYPE_TIME больше, чем у ORDER_TIME_EXPIRATION.
а) иначе непонятно, когда использовать ORDER_TYPE_TIME? При каком значении ORDER_TIME_EXPIRATION?
б) если выставлено ORDER_TYPE_TIME=ORDER_TIME_SPECIFIED, то тогда используется ORDER_TIME_EXPIRATION. Если ORDER_TYPE_TIME=ORDER_TIME_DAY, то время жизни ордера жёстко определено. Если ORDER_TYPE_TIME=ORDER_TIME_GTC, то не важно, что в ORDER_TIME_EXPIRATION, но тогда не ясно, зачем этот вариант нужен?!
Вы правы, это я местами идентификаторы поменял - перепутал, когда пост оформлял.
Правильно следует читать так
ORDER_TYPE_TIME имеет более высокий приоритет и больший вес.
ORDER_TIME_EXPIRATION имеет актуальность только если в ORDER_TYPE_TIME прямо указано ORDER_TIME_SPECIFIED...
Идентификатор |
Описание |
ORDER_TIME_GTC |
Ордер будет находится в очереди до тех пор, пока не будет снят |
ORDER_TIME_DAY |
Ордер будет действовать только в течении текущего торгового дня |
ORDER_TIME_SPECIFIED |
Ордер будет действовать до даты истечения |
Вопрос 11.
Получается, что абсолютно любой ордер попадёт в историю, но статус его может быть различным. Так?
А есть описание того, как изменяются комментарии? Может разработчики поделятся информацией?
По идеи да, все ордера попадают в историю. Вопрос как они туда попадают.
Ели рассматривать отложники (pending orders) то после установки у них есть следующие варианты:
1. Быть отмененным трейдером (МТС) или сервером. При этом ордер переносится в историю как отмененный и сервер устанавливает ему соответствующие свойства, статус и прочие (дополнительно, для наглядности в отчете, меня комментарий - пишет туда cancelled или что-то в этом вроде).
Хотел точно пример привести, но нет у экспертов торгующих на чемпионате желания ордера отменять. :)
Позже организуем отмену ордера...
2. Ордер исполняется, при этом он создает сделку которая создает позицию или изменяет уже существующую позу.
При этом поза получает комментарий этого ордера в "наследство", а сделка фиксируется в истории.
Попадает ли в историю при этом сам ордер я точно сказать не могу, нужно уточнять (но думаю что попадает).
PS
В использовании комментариев сервером нет особых секретов, это делалось еще в MT4 (для большей информативности и удобства восприятия трейдером).
Про [sl] и [tp] говорить не будем, это и так понятно, да и сталкиваются с этим все очень часто.
Существуют еще комментарии к балансовым операциям (операции зачисление и вывода средств); комментарии к поправкам в балансе (при различных ошибках и внештатных ситуациях сервера), с этим сталкивались многие; комментарии к операция закрытия по Stop Out (если не ошибаюсь выглядят как [so]).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В первую очередь хочется услышать мнение разработчиков.
Вопрос 1.
В документации <https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties> написано следующее:
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций OrderGet...() и HistoryOrderGet...().
Также в документации <https://www.mql5.com/ru/docs/trading/historyordergetinteger> сказано:
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала.
В каком случае следует использовать OrderGet...() и в каком HistoryOrderGet...()?
Вопрос 2.
Функция OrderSelect выбирает ордер для дальнейшей работы с ним.
...
Функция OrderSelect() копирует данные об ордере в программное окружение, и последующие вызовы OrderGetDouble(), OrderGetInteger(), OrderGetString()возвращают ранее скопированные данные. Это означает, что самого ордера может уже и не быть (или же в нем изменились цена открытия, уровни Stop Loss / Take Profit или момент истечения), а данные этому ордеру можно еще получать. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderSelect() непосредственно перед обращением за ними.
Функция OrderSelect() используется только для отложенных ордеров?
Что произойдёт, если выбрать выполненный ордер? Такая ситуация вполне возможна, что между вызовами ордер отработал и стал отложенным.
Вопрос 3.
Может ли быть такое, что часть свойств ORDER_* доступно только для исполненных ордеров, а другая часть только для отложенных?
Например, ORDER_TIME_DONE имеет смысл только для выполненных. Более удобно это представить в виде таблицы:
x - имеет смысл
* - актуально только для отложенных, для отработанных используется только как справка о значениях отложенного ордера
Вопрос 4.
В <https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties> написано:
Свойство ORDER_VOLUME_CURRENT означает невыполненный объем.
Не логично было бы обозначить через ORDER_VOLUME_CURRENT выполненный объём?
Вопрос 5.
На что влияют свойства ордеров ORDER_SL и ORDER_TP? Они изменяют свойства POSITION_SL и POSITION_TP соответствующей позиции при срабатывании ордера или если создают позицию?
Вопрос 6.
В документации <https://www.mql5.com/ru/docs/trading/historyselect> сказано следующее:
Функция HistorySelect запрашивает историю сделок и ордеров за указанный период серверного времени.
И в <https://www.mql5.com/ru/docs/trading/historyorderselect> следующее:
Функция HistoryOrderSelect выбирает в истории ордер для последующих обращений к нему через соответствующие функции.
Как поведёт себя функция HistoryOrderSelect, если указать тикет ордера выходящего за рамки, установленные в HistorySelect?
Вопрос 7.
Не совсем понятны свойства SYMBOL_LASTHIGH и SYMBOL_LASTLOW. Что они обозначают? Последняя сделка всегда одна. Если операция совершалась по разным ценам согласно ORDER_TYPE_FILLING, то наибольшая цена это и есть SYMBOL_LASTHIGH, а наименьшая SYMBOL_LASTLOW?
Вопрос 8.
Что означает свойство POSITION_PRICE_OPEN? Это цена по которой была открыта позиция или это цена последней сделки, которая изменила позицию?
Вопрос 9.
Зачем свойство ORDER_TYPE_TIME, когда имеется свойство ORDER_TIME_EXPIRATION? Как они связаны между собой?
Вопрос 10.
Может ли быть отложенный ордер без позиции?
Вопрос 11.
Отложенный ордер может и не породить сделки (например, его удалят). Попадёт ли он тогда в историю?
Догадываюсь, что ответ: да. Его состояние может быть, например, ORDER_STATE_CANCELED или ORDER_STATE_EXPIRED. Так?