Ордер переходит в OP_BUY
А зачем вам нужно отследить посл. ордер? Возможно, вам помогут функции в адресе https://www.mql5.com/ru/forum/131859
- см. там содержание стр.3 и стр.4:
GetIndexByTicket - Возвращает индекс ордера или позиции по тикету.
GetIndexLastPos - Возвращает индекс последней открытой позиции или -1
GetLotLastPos - Возвращает размер лота последней открытой позиции или -1
GetMaxLotFromOpenPos - Возвращает максимальный размер лота из открытых позиций
GetMinLotFromOpenPos - Возвращает минимальный размер лота из открытых позиций
NumberOfPositions - Возвращает количество позиций.
GetProfitOpenPosInCurrency - Возвращает суммарный профит открытых позиций в валюте депозита
GetProfitOpenPosInPoint - Возвращает суммарный профит открытых позиций в пунктах
GetTicketLastPos - Возвращает тикет последней открытой позиции или -1
GetTypeLastClosePos - Возвращает тип последней закрытой позиции или -1
GetTypeLastOpenPos - Возвращает тип последней открытой позиции или -1
isLossLastPos - Возвращает флаг убыточности последней позиции.
isTradeToDay - Возвращает флаг торгов сегодня
NumberOfBarOpenLastPos - Возвращает номер бара открытия последней позиции или -1.
А зачем вам нужно отследить посл. ордерр? Возможно, вам помогут функции в адресе https://www.mql5.com/ru/forum/131859
Спасибо, обязательно посмотрю, просто я ненастоящий сварщик и не уверен, что смогу применить эту функцию.
Ослеживается последний ордер на предмет его состояния (если отложеный сработал, то должен быть открыт следующий отложенный), его параметров (цены открытия ит.д.).
Ну, в самом простейшем случае можно задействовать ф-ю NumberOfOrders - Возвращает количество ордеров.
Располагаем эту функцию (т.е. копируем её код) вне функции СТАРТ, например - в самый-самый низ кода советника.
Далее, например, Вы открыли позиции в первой половине вашего кода. Теперь вам нужно выставлять бай-отложки. Стоповые. Вместо второй части вашего кода - попробуйте задать:
if ( NumberOfOrders(NULL,OP_BUYSTOP,-1) <1) {//если нет отложенных байстоп ордеров, // то устанавливаем на расстоянии дельта от текущей цены: ticket=OrderSend(Symbol(),OP_BUYSTOP,0.05,MarketInfo(Symbol(),MODE_ASK)+delta,10,0,0,"buy",1,i,Green); return(0); }
Аналогично и по селлстопам. if ( NumberOfOrders(NULL, OP_SELLSTOP , -1)<1) { ......
Примерно так..... И теперь по мере срабатывания очередной байстоп отложки - сразу должна открываться новая.
Спасибо!
Привинтил каким-то неожиданным образом функцию GetTypeLastOpenPos, правда внутри функции старт (видимо, совсем не так как предполагал автор :-) и дописал в неё отслеживание отложенных ордеров, поскольку по умолчанию она отслеживает только открытые ордера. Получилось следующее:
int start() { //.......... datetime t; int i, k=OrdersTotal(), r=-1; int mn=-1; string sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderType(); } } } } } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, господа!
Подскажите как грамотно отследить последний открытый ордер. Имею конструкцию типа:
Проблема в том, что после открытия отложенного ордера цикл прекращается и последний открытый отложенный ордер не ослеживается.
Попутный вопрос - при срабатывании отложенного ордера его тип перейдет из OP_BUYSTOP в OP_BUY или останется тем же типом?
Спасибо.