Блог им. Gens

Mql5

    • 16 апреля 2016, 12:45
    • |
    • Gens
  • Еще
Подскажите как найти тикет исполненого ордера? Суть в том что мне нужно стоп изменить открытой сделки.подскажите кто знает
6 комментариев
HistorySelect, потом HistoryOrderGetString
хотя, судя по задаче, вроде как PositionGetString — узнаете тикет открытой позиции.
avatar
#include <Trade\Trade.mqh>
CTrade trade;

if(PositionSelect(_Symbol))
 {
  long ticket = PositionGetInteger(POSITION_TICKET);
  trade.PositionModify(ticket,stop_loss,take_pofit);
 }

как вариант
avatar
Adept, у меня почему то POSITION_TICKET не определяет… на этом встал не знаю в чем причина.как будто не знает такой функции
avatar

Gens, Я там скобочку забыл (поправил).

Так как в CTrade функция PositionModify перегружена, можно и так:

#include <Trade\Trade.mqh>
CTrade trade;

trade.PositionModify(_Symbol,stop_loss,take_pofit);
 

avatar
Adept, failed modify buy 0.00 sl: 0, tp: 0 -> sl: 11964, tp: 0 [Position already closed] вот такая ошибка выходит, ну это понятно после закрытия позиции код заново просто проходит и видит что нечего закрывать. но по новому стоп лоссу позиция не кроется… и ошибок нет
avatar

Gens, код бы глянуть (именно часть с модификацией).

Ну вообще, если это при использовании второго варианта, то, конечно, логично добавить проверку 
if(PositionSelect(_Symbol))
{
//модификация

}

А если вообще по хорошему, лучше вообще не использовать стандартные стоплоссы нигде кроме тестера. 

Кароч, скиньте код эксперта с вырезанной торговой логикой, оставив только модули исполнения и модификации, ночью гляну — раз уж мы заморочились, надо доделать нормально :).

avatar

теги блога Gens

....все тэги



UPDONW
Новый дизайн