Скачать MetaTrader 5

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

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

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

Dmitry Fedoseev
46481
Dmitry Fedoseev  
Для начала стоит попробовать терминал переустановить. Если не поможет, тогда ошибку искать.
bablokos
78
bablokos  
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);

}

Rashid Umarov
Админ
12606
Rashid Umarov  
bablokos писал (а) >>

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


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

bablokos
78
bablokos  
Rosh писал (а) >>

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

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

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

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

Rashid Umarov
Админ
12606
Rashid Umarov  
bablokos писал (а) >>

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

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

Alexander
2441
Alexander  
OrderClosePrice() - что это?
Rashid Umarov
Админ
12606
Rashid Umarov  
Roger писал (а) >>
OrderClosePrice() - что это?

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

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

Да уж...

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

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

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