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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey
169
Sergey  

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

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

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

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

1

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

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

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

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

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


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

Sergey
169
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, то выходим
    }

//.............................
Сергей Таболин
2648
Сергей Таболин  
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
169
Sergey  
Сергей Таболин:

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

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


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

2

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


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

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

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

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

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

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

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

m_trade.PositionClose(_Symbol);

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий