открытие противоположного ордера при условии стоплосса предыдущего

 

Всем привет !

задача стандартная скорее всего для  опытных -

надо при закрытии ордера по СЛ  открывать другой в противоположную сторону, не более трех раз

примерно так у меня работает, но как то не красиво: ищем первый ордер, если нет то проверяем не открылся ли второй ордер, и если да то отркывает третий  противоположный лимитный ордер для второго

 if (OrdersTotal()>0 )
     {
        if (LG.checkOrder("Lagger")==0)
        {
            if (!LG.deleteOrders("AfterSL" ))
            {
               int mTicket = LG.checkOrder("AfterSL");
               if (mTicket > 0)
               {
                  LG.orderOpenBySL_2(mTicket,"AfterSL_2");
               }
               else  LG.deleteOrders("AfterSL_2");
            }
        }
        if (LG.checkOrder("LaggByOther")==0)
        {
               LG.deleteOrders("AfterSL15min" );
        }
     }
 
Worh:

Всем привет !

задача стандартная скорее всего для  опытных -

надо при закрытии ордера по СЛ  открывать другой в противоположную сторону, не более трех раз

примерно так у меня работает, но как то не красиво: ищем первый ордер, если нет то проверяем не открылся ли второй ордер, и если да то отркывает третий  противоположный лимитный ордер для второго

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.

 
Vladimir Karputov:

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 ?

 
Worh:

а это работает на MQL 4 ?

Нет, в MQL4 нет OnTradeTransaction и нет ENUM_DEAL_REASON.

Вы задали вопрос на форуме MQL5, Вы задали вопрос в основном разделе - поэтому ответ получили для MQL5. Для MQL4 есть специальный раздел: MQL4 и MetaTrader 4

 
Vladimir Karputov:

Нет, в MQL4 нет OnTradeTransaction и нет ENUM_DEAL_REASON.

Вы задали вопрос на форуме MQL5, Вы задали вопрос в основном разделе - поэтому ответ получили для MQL5. Для MQL4 есть специальный раздел: MQL4 и MetaTrader 4

Извиняюсь. перенес в соответсвующую ветку !

 
Переместил Вашу тему в раздел MQL4.
 

Удобнее всего сделать идентификацию номера ордера по MagicNumber. То есть поле MagicNumber будет состоять из двух частей: ID ордеров эксперта и индекс ордера. Например:

int nMagicNumber = i_nMagicNumber * 10 + nOrderIndex;

где i_nMagicNumber - ID ордеров эксперта, выведенный во входные параметры,

      nOrderIndex - индекс ордера.

Чтобы впоследствии "разобрать" поле MagicNumber, достаточно использовать:

int nMagicNumber = OrderMagicNumber() / 10;
int nOrderIndex = OrderMagicNumber() % 10;

В итоге всегда можно будет точно идентифицировать:

  1. Ордера эксперта.
  2. Ордера в одной серии.

 
Ihor Herasko:

Удобнее всего сделать идентификацию номера ордера по MagicNumber. То есть поле MagicNumber будет состоять из двух частей: ID ордеров эксперта и индекс ордера. Например:

где i_nMagicNumber - ID ордеров эксперта, выведенный во входные параметры,

      nOrderIndex - индекс ордера.

Чтобы впоследствии "разобрать" поле MagicNumber, достаточно использовать:

В итоге всегда можно будет точно идентифицировать:

  1. Ордера эксперта.
  2. Ордера в одной серии.

не совсем понял - что значит "в одной серии " ?

и как это поможет в дальнейшем ?

 
Worh:

не совсем понял - что значит "в одной серии " ?

и как это поможет в дальнейшем ?

int nMagicNumber = OrderMagicNumber() / 10;   // Тут будет магик ордера
int nOrderIndex = OrderMagicNumber() % 10;    // Данная переменная будет содержать 1,2,3 ордер в серии

Извиняюсь что вмешиваюсь. А смысл что найдя в истории последний закрытый ордер, вы по магику можете узнать каким он был по счёту в серии. И открыть противоположный. Изящное решение!

 
Alexey Valeev:

Извиняюсь что вмешиваюсь. А смысл что найдя в истории последний закрытый ордер, вы по магику можете узнать каким он был по счёту в серии. И открыть противоположный. Изящное решение!

смысл понятен вроде. А nOrderIndex надо самому проставлять по возрастанию ?

 
Worh:

смысл понятен вроде. А nOrderIndex надо самому проставлять по возрастанию ?

и как в истории отлавлавть - закрылся по СЛ  или ТП ? по профиту ?

Причина обращения: