Закрытие позиции

 

Доброго времени всем.

Суть вопроса в следующем: в момент смены сигнала индикатора позиция не закрывается, если не достигнут SL или TP. 

Хотелось бы поправить этот момент и сделать выход из позиции по сигналу, SL,TP - в зависимости что наступит первым

Как можно организовать это логически?

1

 
Sergey:

Доброго времени всем.

Суть вопроса в следующем: в момент смены сигнала индикатора позиция не закрывается, если не достигнут SL или TP. 

Хотелось бы поправить этот момент и сделать выход из позиции по сигналу, SL,TP - в зависимости что наступит первым

Как можно организовать это логически?


Позиция SELL. if(сигнал на покупку) закрываем позицию.

 
Сергей Таболин:

Позиция SELL. if(сигнал на покупку) закрываем позицию.


Есть такая конструкция. Но она не работает как надо

if (Mas_Signal[1]==1)                    // если сигнал первого бара на покупку
   {
    if(m_position.Select(_Symbol))       // если уже существует позиция по этому символу
    {
    if(m_position.PositionType()==POSITION_TYPE_SELL) m_trade.PositionClose(_Symbol);  // и тип этой позиции Sell, то закрываем ее
    if(m_position.PositionType()==POSITION_TYPE_BUY) return;                           // а если тип этой позиции Buy, то выходим
    }

//.............................
 
Sergey:


Есть такая конструкция. Но она не работает как надо

Распринтуйте всё...

if (Mas_Signal[1]==1)                    // если сигнал первого бара на покупку
   {
        Print("Сигнал на покупку");
        if(m_position.Select(_Symbol))       // если уже существует позиция по этому символу
        {
                if(m_position.PositionType()==POSITION_TYPE_SELL)
                {
                        Print("Текущая позиция SELL. Закрываем");
                        if(m_trade.PositionClose(_Symbol) && m_trade.ResultRetcode() == TRADE_RETCODE_DONE) Print("Позиция SELL закрыта успешно.");
                        else Print("Ошибка закрытия позиции SELL.");
                }
                if(m_position.PositionType()==POSITION_TYPE_BUY)
                {
                        Print("Текущая позиция BUY. Выходим без закрытия позиции.");
                        return;                           // а если тип этой позиции Buy, то выходим
                }
        }
   }

После этого Вы точно будете знать по какой причине позиция не закрывается.

 
Сергей Таболин:

Распринтуйте всё...

После этого Вы точно будете знать по какой причине позиция не закрывается.


Да, действительно есть ошибка 4753. Судя по документации значит "Позиция не найдена". Почему ее только не видно?

2

 
Sergey:


Да, действительно есть ошибка 4753. Судя по документации значит "Позиция не найдена". Почему ее только не видно?

Скорее всего к началу этой проверки позиция уже закрыта. Сработал SL или TP, например...?

Добавьте ещё проверку:

if(m_position.Symbol() == _Symbol && m_position.PositionType()==POSITION_TYPE_SELL)
 
Сергей Таболин:

Скорее всего к началу этой проверки позиция уже закрыта. Сработал SL или TP, например...?

Добавьте ещё проверку:

Проблему удалось решить. Я попробовал заменить операцию закрытия позиции с помощью класса (ниже) 

m_trade.PositionClose(_Symbol);

на приказ через TRADE_ACTION_DEAL

Получилось намного длиннее, но зато теперь работает.

Спасибо Вам, Сергей, за то что не прошли мимо. Попутных трендов!

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