Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 842

 

OrderClose(OrderTicket(),0.01,Bid,2);

в "экспертах" пишет, что "invalid ticket for OrderClose function"

Помогите? моя цель - закрыть ордер на текущем графике. 

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

в "экспертах" пишет, что "invalid ticket for OrderClose function"

Помогите? моя цель - закрыть ордер на текущем графике. 

if (OrdersTotal()==true)
{
if(OrderSelect(ticket,SELECT_BY_TICKET)>0 && OrderType()==(OP_BUY/OP_SELL здесь поставишь какой ордер) && (здесь можешь написать условия закрытия т.е. сигнал) 
{
bool close = OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed); 
if(!close)
Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
else
Print("Ордер BUY успешно закрыт.");
}
}
 
Мне необходимо БЕЗУСЛОВНО закрыть ордер, если можно? Почему в той строке программы, где я написал, не работает orderticket?
 
Pokrov:

Добрый вечер! Помогите разобраться код ниже, sell написан по такому же принципу, почему три варианта открытия, потому как пришлось заморочиться с вариантом избежания открытия ордера тогда - когда ордер открывается на текущем баре и закрывается по безриску,

а сигнал остается и опять идет открытие, поэтому пришлось вот так писать. А проблема в том, что открывается всего один ордер бай и селл и все, дальше молчание, я ошибки так и не нашел. Заранее благодарен.

А как понять эту строку?

if (!OrdersTotal()==true)

 и эту

if (!OrdersHistoryTotal()==true)

и эту...

if(OrderSelect(ticket,SELECT_BY_TICKET)>0 // дальше я не смотрел

Хотя эта последняя строка работать будет, но так писать не ... слов нет.

Ну если ты ошибки не нашёл, тогда их, видимо нет...

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

в "экспертах" пишет, что "invalid ticket for OrderClose function"

Помогите? моя цель - закрыть ордер на текущем графике. 

Потому, что перед работой с ордером надо его выбрать функцией OrderSelect()
 
AlexeyVik:

А как понять эту строку?

 и эту

и эту...

Хотя эта последняя строка работать будет, но так писать не ... слов нет.

Ну если ты ошибки не нашёл, тогда их, видимо нет...

1. Если нет открытых ордеров

2. Если нет закрытых ордеров.

Что не так?  

 
Pokrov:

1. Если нет открытых ордеров

2. Если нет закрытых ордеров.

Что не так?  

int  OrdersTotal();  - возвращает количество, а не истину-ложь, вот что не так. Нет ордеров, значит 0, а если есть ордера, то это не только 1.

А закрытых нет только на свежеоткрытом счёте, на котором ещё не торговали. И опять неправильное применение функции.

А зачем RefreshRates(); ПОСЛЕ отсылки приказа на сервер? Это как сначала заплатить за что-то и уже потом спросить "а сколько это стоит?"...

 
Pokrov:

if (OrdersTotal()==true)
{
if(OrderSelect(ticket,SELECT_BY_TICKET)>0 && OrderType()==(OP_BUY/OP_SELL здесь поставишь какой ордер) && (здесь можешь написать условия закрытия т.е. сигнал) 
{
bool close = OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed); 
if(!close)
Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
else
Print("Ордер BUY успешно закрыт.");
}
}

Что за чушь вы тут нагородили?

Если общее количество ордеров и позиций 1 и больше...
Если выбран ордер по неизвестному тикету и не понятно закрыт он или открыт...
и т. д. ...

Думаете помогли?

 
evillive:

...  Нет ордеров, значит 0, а если есть ордера, то это не только 1.

...

Вот тут я поправлю с позволения так сказать.

В bool если 0, то false, всё остальное, отличное от ноля - true

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

в "экспертах" пишет, что "invalid ticket for OrderClose function"

Помогите? моя цель - закрыть ордер на текущем графике. 

Чтобы закрыть позицию по тикету, вам прежде всего необходимо точно знать номер тикета закрываемой позиции. Потом необходимо выбрать ордер функцией OrderSelect(ticket,SELECT_BY_TICKET) причём с проверкой успешности выбора. Далее необходимо проверить время закрытия успешно выбранного ордера. Зачем? А затем, что при выборе по тикету параметр pool функции OrderSelect(..., ..., pool) игнорируется (он нужен только при выборе по индексу). А значит, даже если мы и выбрали успешно ордер, нам ещё нужно знать в каком списке мы его выбрали - в списке закрытых или открытых позиций. Именно проверка времени закрытия позволит нам узнать "а в рынке ли ещё ордерочек". Если время закрытия равно нулю, то ордер ещё в рынке. Если время отлично от нуля - ордер уже закрыт ранее. И вот после всей этой процедуры мы можем отсылать приказ на закрытие этого ордера.
Причина обращения: