Помогите разобраться с логом терминала.

 

На счёте работает эксперт, который при определённой ситуации закрывает все открытые позиции.

Одну позицию он закрыл нормально, а вторая закрылась сама по ТП, хотя должны были закрыться вместе.

Есть лог терминала

2008.03.03 16:50:49    '1000291825': requote 1.9907 / 1.9911 for order #8031218 sell 0.30 GBPUSD closing at 1.9912
2008.03.03 16:50:48    '1000291825': request was accepted by server
2008.03.03 16:50:48    '1000291825': close order #8031218 sell 0.30 GBPUSD at 1.9842 sl: 1.9936 tp: 1.9782 at price 1.9912

Больше информации о данном ордере в логе терминала нету.

Означает ли он, что ордер был закрыт? Слиппаже равен 8 пипам.

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

Записи в Вашем протоколе означают, что продажа 0.3 лота фунта, выполненная по цене 1,9842 была закрыта по цене 1,9912 с проскальзыванием 1 пункт, с убытком 70 пунктов.

 

опс... пардон... не-е, не была закрыта:

строка 3 - команда на закрытие
строка 2 - сервер сообщил, что принял запрос
строка 1 - реквота, сервер отклонил запрос

 
Rosh:
По представленному логу видно, что позиция с тикетом 1000291825 не была закрыта, цена 1.9912 отклонена и была выдана реквота. При этом размер проскальзывания не имеет никакого значения, если предпринимается попытка провести операцию по цене, которой не было в потоке.


т.е. если эксперт запустился на тике равном 1,9911 и перед выполнением операции OrderClose произошёл тик 1,9912, то независимо от размера слиппажа ордер не закроется.

Я правильно понял?

З.Ы. Банально перед OrderClose не хватает RefreshRates() ?

 
kermit:

З.Ы. Банально перед OrderClose не хватает RefreshRates() ?

По секрету: Refresh не всегда тут поможет))
 
Rosh:
По представленному логу видно, что позиция с тикетом 1000291825 не была закрыта, цена 1.9912 отклонена и была выдана реквота. При этом размер проскальзывания не имеет никакого значения, если предпринимается попытка провести операцию по цене, которой не было в потоке.

А вот это никак не могу понять. Принимаю как есть, но... Мне кажется, если текущая цена, попадает в диапазон (цена по которой происходит попытка закрыться +/- слиппаж) закрытие должно происходить, по цене которую ДЦ сочтет реальной из этого диапазона, иначе смысл этого параметра просто теряется. А на практике выходит, что измение цены во время запроса даже на пипс приводит к реквоту и параметр просто не работает.

 

Из учебника

price - цена закрытия. Устанавливается в соответствии с требованиями и ограничениями, принятыми для проведения торговых операций (см. Характеристики ордеров и Приложение 3). Если заявленной цены для закрытия рыночного ордера не было в ценовом потоке или она сильно устарела, то такой торговый приказ отклоняется; если же цена устарела, но присутствует в ценовом потоке и при этом отклонение от текущей цены находится в пределах значения slippage, то такой торговый приказ будет принят клиентским терминалом и отправлен на торговый сервер.

В моей ситуации в цикле закрываются ордера по цене аск/бид со слипажем спред*2.

Теоретически при данном варианте даже если брать всегда цену только бид или аск, то ордера должны всегда закрываться, за исключением гепов или тиков по 10 пипов.

А он не закрылся при двиге в один пип.

В чём здесь ошибка? Или я не правильно понимаю прочитанное?

P.S. Обидно, что в тестере за сегодня всё сработало нормально. :(

for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((OrderSymbol()==Symbol()) && (OrderMagicNumber()==magic))
         {
         if ((OrderType()==OP_BUY)) OrderClose(OrderTicket(),OrderLots(),Bid,spread*2*Point,CLR_NONE);
         else 
            if ((OrderType()==OP_SELL)) OrderClose(OrderTicket(),OrderLots(),Ask,spread*2*Point,CLR_NONE);
               else OrderDelete(OrderTicket());
         }
       }
 
kermit:

Из учебника

price - цена закрытия. Устанавливается в соответствии с требованиями и ограничениями, принятыми для проведения торговых операций (см. Характеристики ордеров и Приложение 3). Если заявленной цены для закрытия рыночного ордера не было в ценовом потоке или она сильно устарела, то такой торговый приказ отклоняется; если же цена устарела, но присутствует в ценовом потоке и при этом отклонение от текущей цены находится в пределах значения slippage, то такой торговый приказ будет принят клиентским терминалом и отправлен на торговый сервер.

Вы должны ответить на вопрос: цена Ask=1,9912 была в ценовом потоке или нет? Остальное сейчас не имеет значение.
 

Открыл минутный график.

OHLC - 1.9894/1.9908/1.9892/1.9907 / спред 4 пипа.

V=25


Получается, что была такая цена.

 
kermit:

Открыл минутный график.

OHLC - 1.9894/1.9908/1.9892/1.9907 / спред 4 пипа.

V=25


Получается, что была такая цена.

Вы не поняли вопроса. Была ли такая цена в момент отсылки приказа на закрытие ордера? То, что такая цена была (могла быть) в течение последнего месяца - значения не имеет. Сервер отсекает все приказы с несуществующими ценами, будь они хоть трижды в пределах допустимого проскальзывания. Это сделано для защиты от "грязного" кода, когда неправильно написанные советники начинают забрасывать сервер приказами с некорректным ценами в приказах, будь то непреднамеренно от неумения правильно программировать, или это сделано специально в расчете случайгно поймать шпильку.