Всем привет !
как распознать в коде что позиция удалена самим пользователем ?
как распознать в коде что позиция удалена самим пользователем ?
У закрывшего позицию ордера посмотреть значение этого свойства.
ENUM_ORDER_REASON
| Идентификатор | Описание |
|---|---|
| ORDER_REASON_CLIENT | Ордер выставлен из десктопного терминала |
| ORDER_REASON_MOBILE | Ордер выставлен из мобильного приложения |
| ORDER_REASON_WEB | Ордер выставлен из веб-платформы |
| ORDER_REASON_EXPERT | Ордер выставлен из MQL5-программы – советником или скриптом |
| ORDER_REASON_SL | Ордер выставлен в результате срабатывания Stop Loss |
| ORDER_REASON_TP | Ордер выставлен в результате срабатывания Take Profit |
| ORDER_REASON_SO | Ордер выставлен в результате наступления события Stop Out |
if(trans.type == TRADE_TRANSACTION_ORDER_DELETE) // Проверяем, что транзакция связана с удалением ордера { // удаление отытой сделки пользвоатлем ulong ticket = trans.order; // Тикет удаленного ордера CheckOrderReason(ticket); // Определяем источник ордера PrintFormat("Удаление с тикетом %d был удален. Причина: %s", ticket, " reason"); }
почему то тикет дает другой , не тот который удаляется пользователем
Привет, Алексей! Добавлю. Не просто сделку, а сделку в результате которой был удалён тот самый ордер. А для этого сначала нужно в истории выбрать эту самую сделку, чтобы дальше обращаться к ней через соответствующую функцию.
С уважением, Владимир.
Привет, Алексей! Добавлю. Не просто сделку, а сделку в результате которой был удалён тот самый ордер. А для этого сначала нужно в истории выбрать эту самую сделку, чтобы дальше обращаться к ней через соответствующую функцию.
С уважением, Владимир.
Нет. Тут последовательность не такая. В результате исполнения ордера и переноса его в историю происходит сделка. И в свойствах сделки есть похожие на вышеуказанные…
| DEAL_REASON_CLIENT | Сделка проведена в результате срабатывания ордера, выставленного из десктопного терминала |
| DEAL_REASON_MOBILE | Сделка проведена в результате срабатывания ордера, выставленного из мобильного приложения |
| DEAL_REASON_WEB | Сделка проведена в результате срабатывания ордера, выставленного из веб-платформы |
| DEAL_REASON_EXPERT | Сделка проведена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом |
| DEAL_REASON_SL | Сделка проведена в результате срабатывания ордера Stop Loss |
| DEAL_REASON_TP | Сделка проведена в результате срабатывания ордера Take Profit |
| DEAL_REASON_SO | Сделка проведена в результате наступления события Stop Out |
| DEAL_REASON_ROLLOVER | Сделка проведена по причине переноса позиции |
| DEAL_REASON_VMARGIN | Сделка проведена по причине начисления/списания вариационной маржи |
| DEAL_REASON_SPLIT | Сделка проведена по причине сплита (понижения цены) инструмента, по которому имелась позиция на момент проведения сплита |
| DEAL_REASON_CORPORATE_ACTION | Сделка проведена в результате корпоративного действия: объединения или переименования бумаги, переноса клиента ну другой счет и т.д. |
Но, в принципе это на любителя. Можно и ордера ловить, только надо правильно выбрать тип транзакции. Да и как разделить ордер на открытие позиции или на закрытие я не знаю. Есть-ли вообще… А ведь вопрос был о закрытии позиции вручную.
Согласен. Не совсем внимательно прочитал заданный вопрос.
С уважением, Владимир.
Нет. Тут последовательность не такая. В результате исполнения ордера и переноса его в историю происходит сделка. И в свойствах сделки есть похожие на вышеуказанные…
Но, в принципе это на любителя. Можно и ордера ловить, только надо правильно выбрать тип транзакции. Да и как разделить ордер на открытие позиции или на закрытие я не знаю. Есть-ли вообще… А ведь вопрос был о закрытии позиции вручную.
На всякий случай: ордер может породить более одной сделки.
А при неттинге в случае работы нескольких роботов (или робот+ручная торговля) направление сделки (in-out) и вовсе теряет смысл - что с точки зрения общей позиции (и в свойствах сделки) in, с точки зрения конкретного робота может оказаться out и наоборот..
Всем привет !
как распознать в коде что позиция удалена самим пользователем ?
В большинстве случаев, если свойство DEAL_REASON сделки закрывшей позицию не равно DEAL_REASON_EXPERT, значит она закрыта вручную.
Если в OnTradeTransaction, то типа так:
//+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction & trans, const MqlTradeRequest & request, const MqlTradeResult & result) { if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { long deal_reason = -1; long deal_entry = -1; if(HistoryDealSelect(trans.deal)) { deal_reason = HistoryDealGetInteger(trans.deal, DEAL_REASON); deal_entry = HistoryDealGetInteger(trans.deal, DEAL_ENTRY); if(deal_entry == DEAL_ENTRY_INOUT || deal_entry == DEAL_ENTRY_OUT || deal_entry == DEAL_ENTRY_OUT_BY) if(deal_reason != DEAL_REASON_EXPERT) Print("ticket ", trans.deal, "; No Expert"); } } } //+------------------------------------------------------------------+
Если в истории, то так:
//+------------------------------------------------------------------+ void Histori() { datetime from = 0; datetime to = TimeCurrent(); ulong ticket = 0; if(HistorySelect(from, to)) for(int i = HistoryDealsTotal() - 1; i >= 0 ; i--) if((ticket = HistoryDealGetTicket(i)) > 1) { long deal_entry = HistoryDealGetInteger(ticket, DEAL_ENTRY); long deal_reason = HistoryDealGetInteger(ticket, DEAL_REASON); if(deal_entry == DEAL_ENTRY_OUT || deal_entry == DEAL_ENTRY_OUT_BY || deal_entry == DEAL_ENTRY_INOUT) if(deal_reason != DEAL_REASON_EXPERT) Print("ticket ", ticket, "; No Expert"); } } //+------------------------------------------------------------------+
На всякий случай: ордер может породить более одной сделки.
А при неттинге в случае работы нескольких роботов (или робот+ручная торговля) направление сделки (in-out) и вовсе теряет смысл - что с точки зрения общей позиции (и в свойствах сделки) in, с точки зрения конкретного робота может оказаться out и наоборот..
И к чему всё это? Вы хотите мне экзамен устроить, или человека запутать?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет !
как распознать в коде что позиция удалена самим пользователем ?