Всем привет !
задача стандартная скорее всего для опытных -
надо при закрытии ордера по СЛ открывать другой в противоположную сторону, не более трех раз
примерно так у меня работает, но как то не красиво: ищем первый ордер, если нет то проверяем не открылся ли второй ордер, и если да то отркывает третий противоположный лимитный ордер для второго
OnTradeTransaction + ENUM_DEAL_REASON.
ENUM_DEAL_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 | Сделка проведена по причине сплита (понижения цены) инструмента, по которому имелась позиция на момент проведения сплита |
Добавлено:
Пример, как работать с ENUM_DEAL_REASON в коде Stop Loss Take Profit.
OnTradeTransaction + ENUM_DEAL_REASON.
ENUM_DEAL_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 | Сделка проведена по причине сплита (понижения цены) инструмента, по которому имелась позиция на момент проведения сплита |
Добавлено:
Пример, как работать с ENUM_DEAL_REASON в коде Stop Loss Take Profit.
а это работает на MQL 4 ?
а это работает на MQL 4 ?
Нет, в MQL4 нет OnTradeTransaction и нет ENUM_DEAL_REASON.
Вы задали вопрос на форуме MQL5, Вы задали вопрос в основном разделе - поэтому ответ получили для MQL5. Для MQL4 есть специальный раздел: MQL4 и MetaTrader 4
Нет, в MQL4 нет OnTradeTransaction и нет ENUM_DEAL_REASON.
Вы задали вопрос на форуме MQL5, Вы задали вопрос в основном разделе - поэтому ответ получили для MQL5. Для MQL4 есть специальный раздел: MQL4 и MetaTrader 4
Извиняюсь. перенес в соответсвующую ветку !
Удобнее всего сделать идентификацию номера ордера по MagicNumber. То есть поле MagicNumber будет состоять из двух частей: ID ордеров эксперта и индекс ордера. Например:
int nMagicNumber = i_nMagicNumber * 10 + nOrderIndex;
где i_nMagicNumber - ID ордеров эксперта, выведенный во входные параметры,
nOrderIndex - индекс ордера.
Чтобы впоследствии "разобрать" поле MagicNumber, достаточно использовать:
int nMagicNumber = OrderMagicNumber() / 10; int nOrderIndex = OrderMagicNumber() % 10;
В итоге всегда можно будет точно идентифицировать:
- Ордера эксперта.
- Ордера в одной серии.
Удобнее всего сделать идентификацию номера ордера по MagicNumber. То есть поле MagicNumber будет состоять из двух частей: ID ордеров эксперта и индекс ордера. Например:
где i_nMagicNumber - ID ордеров эксперта, выведенный во входные параметры,
nOrderIndex - индекс ордера.
Чтобы впоследствии "разобрать" поле MagicNumber, достаточно использовать:
В итоге всегда можно будет точно идентифицировать:
- Ордера эксперта.
- Ордера в одной серии.
не совсем понял - что значит "в одной серии " ?
и как это поможет в дальнейшем ?
не совсем понял - что значит "в одной серии " ?
и как это поможет в дальнейшем ?
int nMagicNumber = OrderMagicNumber() / 10; // Тут будет магик ордера int nOrderIndex = OrderMagicNumber() % 10; // Данная переменная будет содержать 1,2,3 ордер в серии
Извиняюсь что вмешиваюсь. А смысл что найдя в истории последний закрытый ордер, вы по магику можете узнать каким он был по счёту в серии. И открыть противоположный. Изящное решение!
Извиняюсь что вмешиваюсь. А смысл что найдя в истории последний закрытый ордер, вы по магику можете узнать каким он был по счёту в серии. И открыть противоположный. Изящное решение!
смысл понятен вроде. А nOrderIndex надо самому проставлять по возрастанию ?
смысл понятен вроде. А nOrderIndex надо самому проставлять по возрастанию ?
и как в истории отлавлавть - закрылся по СЛ или ТП ? по профиту ?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет !
задача стандартная скорее всего для опытных -
надо при закрытии ордера по СЛ открывать другой в противоположную сторону, не более трех раз
примерно так у меня работает, но как то не красиво: ищем первый ордер, если нет то проверяем не открылся ли второй ордер, и если да то отркывает третий противоположный лимитный ордер для второго