Здравствуйте, Владимир У меня есть отложенный ордер и когда он исполняется и закрывается Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5) Спасибо большое.
Ahmadahmad654 : Здравствуйте, Владимир У меня есть отложенный ордер и когда он исполняется и закрывается Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5) Спасибо большое.
Ордер может быть только отложенным. Поэтому ордер нельзя закрыть - его можно только удалить.
Как я понимаю: вы выставляете отложенный ордер (его цена - Price # 1). Затем он срабатывает -> появляется позиция. Затем позиция закрывается и вы хотите снова выставить отложенный ордер по цене Price # 1? Правильно ли я вас понял?
Нам нужно перехватить сделку DEAL_ENTRY_OUT - сделать это легко вOnTradeTransaction. Процедура: перехватывает транзакцию TRADE_TRANSACTION_DEAL_ADD (добавление сделки в историю) и видит, что это сделка с типомDEAL_ENTRY_OUT
Пример кода:
//+------------------------------------------------------------------+//| Example DEAL_ENTRY_OUT.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"/*
barabashkakvn Trading engine 3.124
*/#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CSymbolInfo m_symbol; // object of CSymbolInfo class
CDealInfo m_deal; // object of CDealInfo class//--- input parametersinputulong InpMagic = 200; // Magic number//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(!m_symbol.Name(Symbol())) // sets symbol name
{
Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
return(INIT_FAILED);
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
}
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealSelect(trans.deal))
m_deal.Ticket(trans.deal);
elsereturn;
if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
{
if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
{
if(m_deal.Entry()==DEAL_ENTRY_OUT)
{
Print(m_deal.Time()," | ",m_deal.Symbol()," | ",m_deal.Price());
}
}
}
}
}
//+------------------------------------------------------------------+
Пожалуйста, попрактикуйтесь в запуске этого советника.
A deal is the reflection of the fact of a trade operation execution based on an order that contains a trade request. Each trade is described by properties that allow to obtain information about it. In order to read values of properties, functions of the Identifier of a position, in the opening, modification or closing of which this deal took...
OK... Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1 Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ()) Шаг 3 # Открыть новый отложенный ордер по цене #1 Пожалуйста, помогите мне в шаге#3.
OK... Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1 Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ()) Шаг 3 # Открыть новый отложенный ордер по цене #1 Пожалуйста, помогите мне в шаге#3.
большое спасибо... с наилучшими пожеланиями
Да, конечно, я помогу.
Вы только скажите: Вы поняли, как работает код в # 54? Понимаете ли вы, как поймать закрытие сделки?
У меня есть отложенный ордер и когда он исполняется и закрывается
Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5)
Спасибо большое.
Здравствуйте, Владимир
У меня есть отложенный ордер и когда он исполняется и закрывается
Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5)
Спасибо большое.
Ордер может быть только отложенным. Поэтому ордер нельзя закрыть - его можно только удалить.
Как я понимаю: вы выставляете отложенный ордер (его цена - Price # 1). Затем он срабатывает -> появляется позиция. Затем позиция закрывается и вы хотите снова выставить отложенный ордер по цене Price # 1? Правильно ли я вас понял?
Да. После активации ордера и закрытия его по тейк-профиту.
В этом случае нужно работать пошагово. Шаг первый: поймать момент закрытия сделки.
Сделки могут быть (по типу входа/выхода): ENUM_DEAL_ENTRY
ENUM_DEAL_ENTRY
Идентификатор
Описание
DEAL_ENTRY_IN
Вход в систему
DEAL_ENTRY_OUT
Выход из системы
DEAL_ENTRY_INOUT
Обратный
DEAL_ENTRY_OUT_BY
Закрытие позиции противоположной пози цией
Нам нужно перехватить сделку DEAL_ENTRY_OUT - сделать это легко в OnTradeTransaction. Процедура: перехватывает транзакцию TRADE_TRANSACTION_DEAL_ADD (добавление сделки в историю ) и видит, что это сделка с типом DEAL_ENTRY_OUT
Пример кода:
Пожалуйста, попрактикуйтесь в запуске этого советника.
OK...
Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1
Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ())
Шаг 3 # Открыть новый отложенный ордер по цене #1
Пожалуйста, помогите мне в шаге#3.
большое спасибо... с наилучшими пожеланиями
OK...
Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1
Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ())
Шаг 3 # Открыть новый отложенный ордер по цене #1
Пожалуйста, помогите мне в шаге#3.
большое спасибо... с наилучшими пожеланиями
Да, конечно, я помогу.
Вы только скажите: Вы поняли, как работает код в # 54 ? Понимаете ли вы, как поймать закрытие сделки?
Добрый день, Владимир.
Код #54 дает нам информацию о сделке, которая была закрыта.
Но m_deal.Price () == цена закрытия сделки
Где я могу найти цену открытия сделки?
С уважением, Владимир.
Добрый день, Владимир.
Код #54 дает нам информацию о транзакции, которая была закрыта
Но m_deal.Price () == цена закрытия сделки
Где я могу найти цену открытия сделки?
С уважением, Владимир.
При срабатывании отложенного ордера появляется сделка типа 'DEAL_ENTRY_IN'.
Мы немного изменим процедуру OnTradeTransaction, теперь мы можем ловить две сделки: вход в рынок (DEAL_ENTRY_IN) и выход из рынка (DEAL_ENTRY_OUT).
Большое спасибо за помощь.
Это только один способ - ловить онлайн сделки.
А есть хотя бы способ работы с историей торговли. Можно определить, что привело к сделке "OUT" - срабатывание Stop Loss или Take Profit ...
Но на данном этапе, я думаю, вам просто нужно использовать идею из # 58