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

Sergey  

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

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

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

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

1

[Удален]  
Sergey:

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

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

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

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


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

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

Позиция 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, то выходим
                }
        }
   }

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

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

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

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


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

2

[Удален]  
Sergey:


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

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

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

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

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

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

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

m_trade.PositionClose(_Symbol);

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

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

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

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