Вопрос к разработчикам: Советник не закрывает ордера.

 
Советник не закрывает ордера выдавая при этом код ошибки 0. Иногда закрытие ордера происходит после нескольких десятков попыток (между каждой попыткой вызывается Sleep(3000)). Иногда ордера не закрываются до перезагрузки терминала, после чего несколько часов советник работает корректно. Пожалуйста помогите понять в чём проблема.
 

А что за советник? Если сам писал, напиши здесь хотябы функцию для закрытия ордеров (ну или часть советника, которая отвечает за закритыя ордеров).

 
Для начала стоит попробовать терминал переустановить. Если не поможет, тогда ошибку искать.
 
WWer писал (а) >>

А что за советник? Если сам писал, напиши здесь хотябы функцию для закрытия ордеров (ну или часть советника, которая отвечает за закритыя ордеров).

Функция самая простая. Вызывается из советника пока не вернёт true:

bool Close(int ticket)

{

bool isClosed = false;
int try = 0;

isClosed = OrderClose(ticket, OrderLots(), OrderClosePrice(), 3, 0);

while(!isClosed) {
Sleep(3000);
try++;
isClosed = OrderClose(ticket, OrderLots(), OrderClosePrice(), 3, 0);

if(try > 3) break;
}

if(!isClosed) Print("Order ", ticket, " was NOT closed due to error:", GetLastError());

return (isClosed);

}

 
bablokos писал (а) >>

Функция самая простая. Вызывается из советника пока не вернёт true:


Знакомая тема. Есть сильное подозрение, что данная функция пытается до победного конца закрыть отложенный ордер. Или ордер, который уже закрыт.

 
Rosh писал (а) >>

Знакомая тема. Есть сильное подозрение, что данная функция пытается до победного конца закрыть отложенный ордер.

Совсем не в тему. Мой советник даже понятия не имеет об отложенных ордерах. Все закрываемые ордера были до этого открыты советником.

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

Ещё раз подчеркну, что после перезагрузки терминала, ордер будет закрыт с первой попытки.

 
bablokos писал (а) >>

Ещё раз подчеркну, что после перезагрузки терминала, ордер будет закрыт с первой попытки.

Попробуйте вставить анализ на предмет занятости торгового потока. IsTradeContextBusy

 
OrderClosePrice() - что это?
 
Roger писал (а) >>
OrderClosePrice() - что это?

Кстати, только что к своему стыду обратил внимание - а где выбор необходимого ордера через OrderSelect(). Насколько корректно в данной функции использовать OrderClosePrice() без вызова OrderSelect(). Где гарантия, что использование OrderClosePrice() корректно?

 
А я вообще не понимаю, как можно закрывать ордер по цене закрытия OrderClosePrice(), которая будет иметь вменяемое значение только после закрытия позиции. До этого в ней будет просто 0. Здесь уж никакой слиппадж не спасет.
 
Scriptong писал (а) >>
А я вообще не понимаю, как можно закрывать ордер по цене закрытия OrderClosePrice(), которая будет иметь вменяемое значение только после закрытия позиции. До этого в ней будет просто 0. Здесь уж никакой слиппадж не спасет.

Да уж...

По трейдерской традиции Buy-позиции закрывают по цене Bid,

Sell-позиции по Ask, а тут инновационный метод: по OrderClosePrtice() Круто!